{"id":170,"date":"2026-10-23T10:58:41","date_gmt":"2026-10-23T10:58:41","guid":{"rendered":"https:\/\/docs.latw.ai\/uncategorized\/mcp\/"},"modified":"2026-10-23T10:58:41","modified_gmt":"2026-10-23T10:58:41","slug":"mcp","status":"publish","type":"post","link":"https:\/\/docs.latw.ai\/pl\/latw-cloud\/mcp\/","title":{"rendered":"Translating from Your AI Agent (MCP)"},"content":{"rendered":"<p><em>Available from the <strong>Solo<\/strong> plan.<\/em><\/p>\n<p>LATW Cloud has an MCP server, so the AI agent you already work with \u2014 Claude, ChatGPT, Claude Code,<br \/>\nCursor, VS Code, Windsurf, Codex, n8n or your own \u2014 can translate your sites without you opening the<br \/>\npanel. Ask it &#8220;how much is left to translate into French?&#8221; or &#8220;translate all missing products into<br \/>\nGerman and French&#8221;, and the agent checks your site and translates the content itself, with no<br \/>\nCredits used (see <em>Translation by the agent itself<\/em>).<\/p>\n<p>If you would rather have LATW Cloud translate in the background, ask the agent to use LATW&#8217;s engine<br \/>\n\u2014 with Credits, or with your own API key if the site is set to <strong>Your key<\/strong>. The agent also offers<br \/>\nit when your plan&#8217;s words for agent translation are not enough. It shows you the price first and<br \/>\nstarts the job only after you confirm. These are ordinary LATW Cloud jobs: they use the site&#8217;s<br \/>\nsettings (model, AI source, glossary, prompt) and cost what the same job costs from the panel.<\/p>\n<p>Either way the jobs show in <strong>Jobs<\/strong> with the origin <strong>MCP<\/strong> and are written to your live site as<br \/>\nthey are translated.<\/p>\n<h2>Connecting your agent<\/h2>\n<p>There is no key or token to copy. You add LATW Cloud to your agent as a remote MCP server, the<br \/>\nagent opens a LATW page, you sign in with your LATW account and press <strong>Allow<\/strong>.<\/p>\n<ul>\n<li>Address: <code>https:\/\/app.latw.ai\/api\/mcp<\/code> (Streamable HTTP)<\/li>\n<li>Sign-in: OAuth \u2014 the agent finds it by itself, nothing else to enter<\/li>\n<\/ul>\n<p>The address is on the <strong>MCP<\/strong> screen of the panel. Below it, <strong>Connect your agent<\/strong> has a tab for<br \/>\n<strong>Claude Code<\/strong>, <strong>Claude<\/strong>, <strong>Codex CLI<\/strong> and <strong>ChatGPT<\/strong> \u2014 each with what to copy and where to put<br \/>\nit \u2014 and <strong>Setup prompt<\/strong>, a ready-made text you paste into a coding agent such as Cursor: it adds<br \/>\nthe server and starts the sign-in by itself.<\/p>\n<p><strong>Claude (Claude.ai, Claude Desktop, mobile)<\/strong> \u2014 open <strong>Customize \u2192 Connectors<\/strong>, press <strong>+ Add<\/strong> and<br \/>\n<strong>Add custom connector<\/strong>. Name it <em>LATW Cloud<\/em>, enter the address, press <strong>Continue<\/strong> and keep the<br \/>\nsign-in Claude detects. In a Team or Enterprise organization, an owner adds the connector under<br \/>\n<strong>Organization settings \u2192 Connectors<\/strong> and each member presses <strong>Connect<\/strong> next to it. In a chat,<br \/>\nturn LATW Cloud on with <strong>+ \u2192 Connectors<\/strong>.<\/p>\n<p><strong>ChatGPT<\/strong> \u2014 custom MCP servers need <strong>Developer mode<\/strong>, which you turn on in ChatGPT&#8217;s settings<br \/>\nunder <strong>Apps<\/strong> (the plans and labels that offer it are set by OpenAI and change; check ChatGPT&#8217;s help<br \/>\nif you do not find it). Then create an app with the address and OAuth as the authentication.<\/p>\n<p><strong>Claude Code<\/strong> \u2014 add the server, then run <code>\/mcp<\/code> in Claude Code, pick <code>latw<\/code> and sign in:<\/p>\n<pre><code>claude mcp add --transport http latw https:\/\/app.latw.ai\/api\/mcp<\/code><\/pre>\n<p><strong>Cursor<\/strong> \u2014 in <code>~\/.cursor\/mcp.json<\/code> (all projects) or <code>.cursor\/mcp.json<\/code> (one project). Cursor<br \/>\nasks you to sign in when it first connects:<\/p>\n<pre><code class=\"language-json\">{\n  \"mcpServers\": {\n    \"latw\": {\"url\": \"https:\/\/app.latw.ai\/api\/mcp\"}\n  }\n}<\/code><\/pre>\n<p><strong>Windsurf<\/strong> \u2014 in <code>~\/.codeium\/windsurf\/mcp_config.json<\/code>, then press <strong>Refresh<\/strong> in Windsurf&#8217;s MCP<br \/>\nsettings and sign in:<\/p>\n<pre><code class=\"language-json\">{\n  \"mcpServers\": {\n    \"latw\": {\"serverUrl\": \"https:\/\/app.latw.ai\/api\/mcp\"}\n  }\n}<\/code><\/pre>\n<p><strong>VS Code<\/strong> \u2014 in <code>.vscode\/mcp.json<\/code>; VS Code asks you to allow the sign-in when it starts the<br \/>\nserver:<\/p>\n<pre><code class=\"language-json\">{\n  \"servers\": {\n    \"latw\": {\"type\": \"http\", \"url\": \"https:\/\/app.latw.ai\/api\/mcp\"}\n  }\n}<\/code><\/pre>\n<p><strong>Codex CLI<\/strong> \u2014 add the server and sign in:<\/p>\n<pre><code>codex mcp add latw --url https:\/\/app.latw.ai\/api\/mcp\ncodex mcp login latw<\/code><\/pre>\n<p><strong>n8n<\/strong> \u2014 add the <strong>MCP Client Tool<\/strong> node to your AI Agent, set the endpoint to<br \/>\n<code>https:\/\/app.latw.ai\/api\/mcp<\/code> with the HTTP Streamable transport and choose OAuth2 as the<br \/>\nauthentication. n8n registers itself with LATW (dynamic client registration is on by default in<br \/>\nits MCP credential); connect the credential and allow it.<\/p>\n<p><strong>Agents that only run local servers<\/strong> \u2014 bridge with <code>mcp-remote<\/code>, which opens the sign-in in your<br \/>\nbrowser:<\/p>\n<pre><code class=\"language-json\">{\n  \"mcpServers\": {\n    \"latw\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https:\/\/app.latw.ai\/api\/mcp\"]\n    }\n  }\n}<\/code><\/pre>\n<p><strong>Your own agent<\/strong> \u2014 use an MCP client library with OAuth support (the official MCP SDKs have it).<br \/>\nThe server publishes where to sign in, and an app registers itself without asking us for keys.<\/p>\n<p><strong>Check the connection:<\/strong> ask the agent to call <code>get_account<\/code>. It answers with your plan and your<br \/>\navailable Credits.<\/p>\n<h2>Allowing an app<\/h2>\n<p>When an agent connects, it opens a LATW page: sign in if you are not signed in, check the name of<br \/>\nthe app and press <strong>Allow<\/strong>. <strong>Cancel<\/strong> sends you back to the app without connecting it. If the page<br \/>\nsays MCP is available from the Solo plan, upgrade first and reload the page. Check that you are<br \/>\nsigned in to the right LATW account \u2014 <strong>Switch account<\/strong> is on the same page.<\/p>\n<p><strong>What a connected app may do:<\/strong> see your sites, content, jobs and prices; start, cancel, resume and<br \/>\nretry jobs; translate content itself. It uses all sites of your account. It cannot change settings<br \/>\n(model, AI source, glossary, prompt, budget limits, API keys), top up Credits, change your plan or<br \/>\nconnect sites.<\/p>\n<p><strong>Connected apps<\/strong> on the <strong>MCP<\/strong> screen lists the apps you allowed, with the date. <strong>Disconnect<\/strong><br \/>\ntakes the app&#8217;s access away within a minute; jobs it started keep running. To use it again, connect<br \/>\nit again from the app. Jobs started by a connected app show the app&#8217;s name in their history, for<br \/>\nexample <em>Job created via MCP, app &#8220;Claude&#8221;<\/em>.<\/p>\n<h2>What the agent can do<\/h2>\n<table>\n<thead>\n<tr>\n<th>Tool<\/th>\n<th>What it does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>get_account<\/code><\/td>\n<td>Plan, available Credits, sites used, words left for agent translation, links to the panel<\/td>\n<\/tr>\n<tr>\n<td><code>list_sites<\/code><\/td>\n<td>Your sites with their languages and translation settings<\/td>\n<\/tr>\n<tr>\n<td><code>get_site_coverage<\/code><\/td>\n<td>Translated, outdated and missing items per language<\/td>\n<\/tr>\n<tr>\n<td><code>list_content_groups<\/code>, <code>list_content<\/code><\/td>\n<td>What the site has and the translation status of each item \u2014 the same lists as the <strong>Content<\/strong> tab<\/td>\n<\/tr>\n<tr>\n<td><code>list_models<\/code><\/td>\n<td>Models and their price in your plan<\/td>\n<\/tr>\n<tr>\n<td><code>estimate_translation<\/code><\/td>\n<td>Counts the words and prices a job, without spending anything<\/td>\n<\/tr>\n<tr>\n<td><code>start_translation<\/code><\/td>\n<td>Starts the job that was priced<\/td>\n<\/tr>\n<tr>\n<td><code>list_jobs<\/code>, <code>get_job<\/code><\/td>\n<td>Progress, cost and failed items with the reason<\/td>\n<\/tr>\n<tr>\n<td><code>cancel_job<\/code>, <code>resume_job<\/code><\/td>\n<td>As <strong>Cancel<\/strong> and <strong>Resume<\/strong> on the job&#8217;s page<\/td>\n<\/tr>\n<tr>\n<td><code>estimate_retry<\/code>, <code>retry_failed<\/code><\/td>\n<td>As <strong>Retry failed<\/strong> on the job&#8217;s page: first what the retry would cost, then the retry after you confirm<\/td>\n<\/tr>\n<tr>\n<td><code>start_agent_translation<\/code>, <code>get_source_texts<\/code>, <code>submit_translations<\/code><\/td>\n<td>Translation by the agent itself \u2014 see below<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The agent can pick items one by one or ask for everything with a status in a group \u2014 for example,<br \/>\nall products missing in German. One job takes at most 500 items this way; for more, the agent splits<br \/>\nthe work into several jobs. Webflow keeps no translation statuses (see <em>Connecting Webflow<\/em>), so on a<br \/>\nWebflow site the agent picks the items one by one.<\/p>\n<h2>Price first, then the job<\/h2>\n<p>This applies when the agent translates with LATW&#8217;s engine. An agent cannot spend Credits in one step. It first asks for an estimate: your site counts the<br \/>\nwords, and the agent gets the cost, your balance after the job and any warning (not enough Credits,<br \/>\na budget limit the job would pass). It must show you that and start the job only after you confirm.<\/p>\n<p>The price holds for 30 minutes. If the content grew in the meantime and the job would cost more,<br \/>\nthe job does not start and the agent asks for a new price. As with jobs from the panel, Credits are<br \/>\nreserved when the job starts and what it does not use goes back when it ends; budget limits apply<br \/>\nthe same way.<\/p>\n<p>Jobs are translated by LATW Cloud and <strong>written to your live site<\/strong> as they finish \u2014 exactly as when<br \/>\nyou start them in the panel.<\/p>\n<h2>Translation by the agent itself<\/h2>\n<p>When you ask the agent to translate, by default it translates with its own model \u2014 the<br \/>\nsubscription you already pay for \u2014 instead of LATW&#8217;s engine. LATW Cloud gives it the texts with the site&#8217;s prompt, website description and<br \/>\nglossary terms, checks every translation it hands back and writes the valid ones to your site.<\/p>\n<ul>\n<li><strong>No Credits are used.<\/strong> Instead, the words count towards a monthly limit of your plan, shown on<br \/>\nthe <strong>MCP<\/strong> screen and in the plan comparison. When the words left are not enough for a job, the<br \/>\nagent tells you and offers LATW&#8217;s engine, with the price first.<\/li>\n<li><strong>It uses your agent&#8217;s own model and time.<\/strong> A large job, such as a whole catalog, takes the agent<br \/>\nmany steps and uses up your agent subscription&#8217;s limits. For large jobs, LATW&#8217;s engine may be the<br \/>\nbetter choice: it translates in the background while you do something else.<\/li>\n<li><strong>What LATW checks:<\/strong> the same keys as the source, HTML tags and their order, shortcodes,<br \/>\nplaceholders, links, empty texts and length limits. A translation that breaks them is not written;<br \/>\nthe agent gets the reason and corrects it. LATW guarantees that the write is technically correct \u2014<br \/>\nthe quality of the translation is your agent&#8217;s.<\/li>\n<li><strong>Content that changes<\/strong> while the agent works is read again before its translation is written.<\/li>\n<li><strong>Every platform<\/strong>, WordPress, Drupal, PrestaShop and Webflow. On Webflow the agent works on a few<br \/>\nitems at a time (Webflow limits how many requests a site token may make a minute), translates whole<br \/>\nitems, and what is published follows the site&#8217;s <strong>Publishing<\/strong> setting (see <em>Connecting Webflow<\/em>) \u2014<br \/>\nas with jobs from the panel.<\/li>\n<li>In <strong>Jobs<\/strong> these jobs show the engine <strong>Agent (MCP)<\/strong> and no cost. <strong>Retry failed<\/strong> is not<br \/>\noffered \u2014 the agent translates the failed items in a new job.<\/li>\n<li>A job the agent stops working on is closed after 24 hours without activity; what it did not hand<br \/>\nin is released on your site.<\/li>\n<\/ul>\n<p>The texts are sent to the agent only while it translates and are not stored by LATW Cloud.<\/p>\n<h2>What the agent cannot do<\/h2>\n<p>The agent cannot change settings (model, AI source, glossary, prompt, budget limits, API keys), top<br \/>\nup Credits, change your plan or connect sites. When something needs your hand, it gives you the<br \/>\nlink to the right place in the panel.<\/p>\n<h2>When something goes wrong<\/h2>\n<p>Every error the agent gets has a code and the next step. The common ones:<\/p>\n<table>\n<thead>\n<tr>\n<th>Code<\/th>\n<th>What happened<\/th>\n<th>What to do<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>unauthenticated<\/code><\/td>\n<td>The agent is not signed in, its sign-in expired, or you disconnected the app<\/td>\n<td>Sign in again from the agent (see <em>Connecting your agent<\/em>)<\/td>\n<\/tr>\n<tr>\n<td><code>plan_required<\/code><\/td>\n<td>The account has no plan that includes MCP<\/td>\n<td>Choose a plan. Your connected apps are kept and work again<\/td>\n<\/tr>\n<tr>\n<td><code>insufficient_credits<\/code><\/td>\n<td>The job needs more than your available Credits<\/td>\n<td><strong>Credits \u2192 Top up<\/strong> by the missing amount, then estimate again<\/td>\n<\/tr>\n<tr>\n<td><code>not_found<\/code>, <code>job_not_found<\/code><\/td>\n<td>The site or job does not exist in your account<\/td>\n<td>Ask the agent to list your sites or jobs<\/td>\n<\/tr>\n<tr>\n<td><code>site_unreachable<\/code><\/td>\n<td>Your site did not answer<\/td>\n<td>See <em>Site Unreachable<\/em><\/td>\n<\/tr>\n<tr>\n<td><code>nothing_to_translate<\/code><\/td>\n<td>Everything chosen is up to date<\/td>\n<td>Ask for &#8220;translate again&#8221; only if you really want it<\/td>\n<\/tr>\n<tr>\n<td><code>selection_too_large<\/code><\/td>\n<td>More than 500 items in one job<\/td>\n<td>Narrow it by type or date, or split it<\/td>\n<\/tr>\n<tr>\n<td><code>quote_expired<\/code>, <code>price_changed<\/code><\/td>\n<td>The price is older than 30 minutes, or the job (or the retry) would now cost more<\/td>\n<td>The agent asks for a new price<\/td>\n<\/tr>\n<tr>\n<td><code>key_required<\/code><\/td>\n<td>The site uses <strong>Your key<\/strong> without a key chosen<\/td>\n<td>Pick a key in <strong>Sites \u2192<\/strong> your site <strong>\u2192 Settings<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>word_limit_reached<\/code><\/td>\n<td>Your plan&#8217;s words for agent translation are used up this month<\/td>\n<td>Use LATW&#8217;s engine, or a bigger plan<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>If your plan ends, the connected apps stay on the <strong>MCP<\/strong> screen, paused, until you renew or<br \/>\ndisconnect them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Available from the Solo plan. LATW Cloud has an MCP server, so the AI agent you already work with \u2014 Claude, ChatGPT, Claude Code, Cursor, VS\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_latwm_translated_slug":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-170","post","type-post","status-publish","format-standard","hentry","category-latw-cloud"],"_links":{"self":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":0,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"wp:attachment":[{"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.latw.ai\/pl\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}