[{"data":1,"prerenderedAt":43},["ShallowReactive",2],{"doc:en:mcp":3},{"title":4,"lede":5,"html":6,"headings":7},"The MCP server","Escouade’s MCP server lets Claude (in a terminal, in another tool, or as an Escouade agent) read your projects, agents, and tickets, create, edit, and start tickets, and drive agents, under the same guardrails as the autopilot.","\u003Ch2 id=\"what-it-is-for\">What it is for\u003C\u002Fh2>\n\u003Cp>MCP (Model Context Protocol) is the protocol through which Claude Code calls tools. Escouade embeds an MCP server: once declared in Claude Code, it gives Claude the tools listed below.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Claude in a terminal\u003C\u002Fstrong>: you run \u003Ccode class=\"key\">claude\u003C\u002Fcode> wherever you like and talk to it about Escouade (“list the tickets to review in the api project”, “create a ticket to limit login attempts, then start it”).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Another tool\u003C\u002Fstrong> that speaks MCP can connect the same way (see \u003Ca href=\"#token-and-network\">Token and network\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>An Escouade agent\u003C\u002Fstrong>, when its project allows it (see \u003Ca href=\"#escouade-s-agents-and-the-server\">Escouade’s agents and the server\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The server runs on your machine alone. It only serves to read and to give orders; it accepts no permission on your behalf, runs no command, merges nothing, and deletes nothing.\u003C\u002Fp>\n\u003Ch2 id=\"turning-on-claude-can-drive-escouade\">Turning on “Claude can drive Escouade”\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Open Settings › Claude Code. The “Escouade in Claude” group has the “Claude can drive Escouade” switch.\u003C\u002Fli>\n\u003Cli>Turn it on. It is saved at once, without “Save”: the declaration writes into the Claude Code config of each account, which “Cancel” could not undo.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Escouade then starts the server and declares it in Claude Code for each active account, with the command \u003Ccode>claude mcp add --scope user --transport http escouade &lt;address&gt; --header &quot;Authorization: Bearer &lt;token&gt;&quot;\u003C\u002Fcode>, run the way the account runs Claude Code (its executable, its configuration folder). The entry lands in the account’s \u003Ccode class=\"key\">.claude.json\u003C\u002Fcode> (\u003Ccode class=\"key\">~\u002F.claude.json\u003C\u002Fcode> for “Main”). The tab says “Declared in Claude · Main account, Pro account”.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>An entry that is already up to date is left as it is. A different one (another port, another token) is replaced. An account added or reactivated later receives the declaration.\u003C\u002Fli>\n\u003Cli>If it fails for an account, the tab says so (“Not declared for the Pro account: …”) and shows the command to run by hand (“Run it by hand in PowerShell:”), written for PowerShell on Windows and for \u003Ccode class=\"key\">sh\u003C\u002Fcode> elsewhere. The token is masked on screen; “Copy the command” copies the real one.\u003C\u002Fli>\n\u003Cli>Turning the switch off changes the token at once, then removes the entry from every account. Deleting an account removes its own.\u003C\u002Fli>\n\u003Cli>If the server does not start, the tab says so (“The server did not start: …”).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Claude Code knows the server as \u003Ccode class=\"key\">escouade\u003C\u002Fcode>: its tools are called \u003Ccode>mcp__escouade__&lt;tool&gt;\u003C\u002Fcode> (for example \u003Ccode>mcp__escouade__list_tickets\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Cdiv class=\"callout note\">\u003Cp class=\"callout-title\">Note\u003C\u002Fp>\u003Cp>On Windows with Claude Code in WSL, Escouade’s MCP tools need WSL’s mirrored network: \u003Ccode>networkingMode=mirrored\u003C\u002Fcode> under \u003Ccode class=\"key\">[wsl2]\u003C\u002Fcode> in \u003Ccode>%UserProfile%\\.wslconfig\u003C\u002Fcode>, then \u003Ccode>wsl --shutdown\u003C\u002Fcode>. Settings › Claude Code reminds you when WSL’s network is NAT.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"the-tools\">The tools\u003C\u002Fh2>\n\u003Cp>In the arguments, a project is named by its id or its name (any case), an agent by its id or its name, a ticket by its key (\u003Ccode class=\"key\">ATL-12\u003C\u002Fcode>, any case) or its id. Answers are JSON.\u003C\u002Fp>\n\u003Ch3 id=\"reading\">Reading\u003C\u002Fh3>\n\u003Cp>These six tools change nothing.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Tool\u003C\u002Fth>\n\u003Cth>Arguments\u003C\u002Fth>\n\u003Cth>What it returns\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_projects\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>none\u003C\u002Ftd>\n\u003Ctd>The projects, in the app’s order: id, name, folder, current git branch, number of agents (archived ones left out), and number of tickets in each column.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_agents\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">project\u003C\u002Fcode> (optional)\u003C\u002Ftd>\n\u003Ctd>The agents that are not archived, oldest first, of every project or of one: id, name, project, status (\u003Ccode class=\"key\">idle\u003C\u002Fcode>, \u003Ccode class=\"key\">running\u003C\u002Fcode>, \u003Ccode class=\"key\">waiting\u003C\u002Fcode>, \u003Ccode class=\"key\">done\u003C\u002Fcode>, or \u003Ccode class=\"key\">error\u003C\u002Fcode>), whether a question or a permission is waiting for your answer, the key of their ticket, model, Claude account, and cost in dollars.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_tickets\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">project\u003C\u002Fcode>, \u003Ccode class=\"key\">column\u003C\u002Fcode> (optional: \u003Ccode class=\"key\">todo\u003C\u002Fcode>, \u003Ccode class=\"key\">doing\u003C\u002Fcode>, \u003Ccode class=\"key\">review\u003C\u002Fcode>, or \u003Ccode class=\"key\">done\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd>A project’s tickets in the Kanban’s order: id, key, title, column, the keys of the tickets they wait for, their agent’s name, and why they are blocked.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">get_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A whole ticket: title, description, criteria (met or not, with the agent’s note), loops (the current one and the maximum), column, tickets it waits for, progress, and the external ticket it comes from (Jira, Trello, GitHub, or Linear). An Escouade agent may leave out \u003Ccode class=\"key\">ticket\u003C\u002Fcode> to read its own.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">get_usage\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>none\u003C\u002Ftd>\n\u003Ctd>Each Claude account’s quota: whether new agents start on it now, the use of its 5-hour and weekly windows (\u003Ccode class=\"key\">pct\u003C\u002Fcode> from 0 to 100, \u003Ccode class=\"key\">resetsAt\u003C\u002Fcode>), and why the autopilot holds the tickets back (\u003Ccode class=\"key\">reason\u003C\u002Fcode>: \u003Ccode class=\"key\">fiveHour\u003C\u002Fcode>, \u003Ccode class=\"key\">week\u003C\u002Fcode>, or \u003Ccode class=\"key\">limit\u003C\u002Fcode>), until when.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">get_agent_summary\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">agent\u003C\u002Fcode>, \u003Ccode class=\"key\">project\u003C\u002Fcode> (optional)\u003C\u002Ftd>\n\u003Ctd>An agent without its conversation: id, name, status, the ticket’s key, last message (2,000 characters at most; a longer message gives its start and its end), and the files it edited (the latest 100 at most).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch3 id=\"acting\">Acting\u003C\u002Fh3>\n\u003Cp>These tools do what you would do in the window, through the same functions: the window is told, external tickets follow, and the Kanban updates.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Tool\u003C\u002Fth>\n\u003Cth>Arguments\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">create_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">project\u003C\u002Fcode>, \u003Ccode class=\"key\">title\u003C\u002Fcode>, \u003Ccode class=\"key\">description\u003C\u002Fcode>, \u003Ccode class=\"key\">criteria\u003C\u002Fcode>, \u003Ccode class=\"key\">after\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Creates a “To do” ticket at the bottom of the column. \u003Ccode class=\"key\">criteria\u003C\u002Fcode> is a list (two default criteria without it), \u003Ccode class=\"key\">after\u003C\u002Fcode> the tickets it waits for, by key or id. With the autopilot on, it starts as soon as a slot is free and its predecessors are done. Its description ends with “Created by \u003Ccode class=\"key\">&lt;author&gt;\u003C\u002Fcode> through Escouade”.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">update_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">ticket\u003C\u002Fcode>, \u003Ccode class=\"key\">title\u003C\u002Fcode>, \u003Ccode class=\"key\">description\u003C\u002Fcode>, \u003Ccode class=\"key\">criteria\u003C\u002Fcode>, \u003Ccode class=\"key\">after\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Edits a “To do” ticket, field by field: what is left out stays. \u003Ccode class=\"key\">criteria\u003C\u002Fcode> and \u003Ccode class=\"key\">after\u003C\u002Fcode> replace the whole list. A ticket that has already started cannot be edited, and a dependency that would make two tickets wait for each other is refused. If the title, description, or criteria change, the last line of the description becomes “Modified by \u003Ccode class=\"key\">&lt;author&gt;\u003C\u002Fcode> through Escouade”.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">move_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">ticket\u003C\u002Fcode>, \u003Ccode class=\"key\">position\u003C\u002Fcode> (\u003Ccode class=\"key\">top\u003C\u002Fcode>, \u003Ccode class=\"key\">bottom\u003C\u002Fcode>, or \u003Ccode class=\"key\">before\u003C\u002Fcode>), \u003Ccode class=\"key\">before\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Puts a “To do” ticket at the top, at the bottom, or just before another “To do” ticket of the project (\u003Ccode class=\"key\">before\u003C\u002Fcode>). Returns the column’s keys in their new order.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">start_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Starts a “To do” ticket as the “Start” button does: its agent starts as soon as a slot is free. Answers once the ticket is queued; follow it with \u003Ccode class=\"key\">get_ticket\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">create_agent\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">project\u003C\u002Fcode>, \u003Ccode class=\"key\">message\u003C\u002Fcode>, \u003Ccode class=\"key\">worktree\u003C\u002Fcode>, \u003Ccode class=\"key\">model\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Creates an agent in a project, with its first message, without changing the agent you are looking at. \u003Ccode class=\"key\">worktree\u003C\u002Fcode> (true or false) says whether it works in a worktree of its own, otherwise the project decides; \u003Ccode class=\"key\">model\u003C\u002Fcode> is named as in Claude Code (\u003Ccode class=\"key\">sonnet\u003C\u002Fcode>, \u003Ccode class=\"key\">opus\u003C\u002Fcode>, \u003Ccode class=\"key\">haiku\u003C\u002Fcode>…). Returns the agent’s id and name.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">send_message\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">agent\u003C\u002Fcode>, \u003Ccode class=\"key\">project\u003C\u002Fcode>, \u003Ccode class=\"key\">text\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Writes to an agent. An agent at work reads the message after its current turn (the answer says \u003Ccode class=\"key\">queued\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">stop_agent\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">agent\u003C\u002Fcode>, \u003Ccode class=\"key\">project\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Interrupts an agent’s current turn, as the stop button of its conversation does. The agent stays, and can be sent a message afterward.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>A title is 200 characters at most, a description 10,000, and a ticket has 30 criteria of 500 characters at most. A ticket created by the server has the default number of loops, 5, and its own branch.\u003C\u002Fp>\n\u003Ch3 id=\"reserved-to-escouade-s-agents\">Reserved to Escouade’s agents\u003C\u002Fh3>\n\u003Cp>These two tools are refused to Claude outside Escouade.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Tool\u003C\u002Fth>\n\u003Cth>Arguments\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">report_progress\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">line\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Publishes a status line of 120 characters at most, about what the agent is doing. It shows under its name in the sidebar and the overview, and on the card of its “In progress” ticket, until its next call. An empty line clears it.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">split_ticket\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">tickets\u003C\u002Fcode>, \u003Ccode class=\"key\">chain\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Splits what remains of the agent’s ticket into ten “To do” tickets at most, after its own. With \u003Ccode class=\"key\">chain\u003C\u002Fcode> true (the default), each comes after the one before and the first after the agent’s ticket; false, all come after the agent’s ticket alone and may run in parallel. Refused to an agent without a ticket. Returns the keys of the tickets made.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"the-guardrails\">The guardrails\u003C\u002Fh2>\n\u003Cp>The tools that act follow the rules of the window and of the autopilot:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Quota.\u003C\u002Fstrong> No ticket (\u003Ccode class=\"key\">start_ticket\u003C\u002Fcode>) or agent (\u003Ccode class=\"key\">create_agent\u003C\u002Fcode>) starts when no account is usable for the project: autopilot paused, quota window above the “Pause above quota” threshold, usage limit, an agent waiting for its reset. A single free account is enough. The refusal says until when (“The autopilot is paused until 14:30: the 5-hour window is 96% used. Try again then.”). \u003Ccode class=\"key\">send_message\u003C\u002Fcode> is refused when the agent’s account is held back that way (agents on another account can still take a message).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>In parallel.\u003C\u002Fstrong> The project’s “In parallel” maximum of tickets is not exceeded by \u003Ccode class=\"key\">start_ticket\u003C\u002Fcode>, nor its maximum of agents working at once by \u003Ccode class=\"key\">create_agent\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dependencies.\u003C\u002Fstrong> A ticket that comes after tickets that are not done is not started without them: the refusal says which ones, and \u003Ccode class=\"key\">update_ticket\u003C\u002Fcode> takes the dependencies off. A circular dependency is refused.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The Kanban.\u003C\u002Fstrong> \u003Ccode class=\"key\">start_ticket\u003C\u002Fcode> is refused when the project’s Kanban starts nothing for now (the target branch has no commit or is not found, no active account serves the project); the refusal says why.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Escouade’s agents\u003C\u002Fstrong> only act in their own project (they read the others), do not write to themselves, and do not stop themselves. You do not write to an archived agent.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No tool\u003C\u002Fstrong> accepts a permission, answers in your place, runs a command or a test, merges, or deletes (a project, an agent, or a ticket). An agent pushed by booby-trapped content cannot use them to escalate its rights.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>What comes from the server is never taken for you.\u003C\u002Fstrong> A message sent to an agent (\u003Ccode class=\"key\">send_message\u003C\u002Fcode>, the first message of \u003Ccode class=\"key\">create_agent\u003C\u002Fcode>) is read by the agent and shown in its conversation under “Message from \u003Ccode class=\"key\">&lt;author&gt;\u003C\u002Fcode>:”, the author being the name of the agent sending it or “Claude (outside Escouade)”. A ticket created or split by the server ends with “Created by \u003Ccode class=\"key\">&lt;author&gt;\u003C\u002Fcode> through Escouade”, a ticket it modified with “Modified by \u003Ccode class=\"key\">&lt;author&gt;\u003C\u002Fcode> through Escouade”, on its card as in its agent’s protocol.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A permission request for an Escouade tool names it in plain words (“Escouade · Create a ticket”, “Escouade · Start an agent”…) and shows what Claude gives it, one argument per line. A value of more than 2,000 characters is cut: the card says how many are not shown and points you to the conversation.\u003C\u002Fp>\n\u003Ch2 id=\"escouade-s-agents-and-the-server\">Escouade’s agents and the server\u003C\u002Fh2>\n\u003Cp>The “MCP server” group in a project’s settings (Settings › Projects) has the “Agents can use Escouade” switch, off by default.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>On, the project’s agents receive the server with a token each. They read the tickets and the agents, and can create tickets or start other agents, which uses quota. The setting applies the next time their process starts.\u003C\u002Fli>\n\u003Cli>Off, the project refuses all of Escouade’s tools to its agents, even when “Claude can drive Escouade” is on: otherwise an agent would inherit the entry in your Claude Code config and pass for Claude outside Escouade.\u003C\u002Fli>\n\u003Cli>This setting takes tools away from agents and protects your quota, it is not a partition: an agent that can use them only acts in its own project, but reads the others.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The server runs as soon as either setting asks for it: “Claude can drive Escouade”, or a project whose agents can use it. It stops with the app.\u003C\u002Fp>\n\u003Cp>In a conversation, a call to an Escouade tool carries the label “Escouade · ” followed by its name (“Escouade · Read a ticket”, “Escouade · Report progress”).\u003C\u002Fp>\n\u003Ch2 id=\"mcp-activity\">MCP activity\u003C\u002Fh2>\n\u003Cp>Settings › Claude Code › “MCP activity” keeps the last 200 calls and refusals, the most recent first, updated live. Each line gives:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>the time (on hover, the date);\u003C\u002Fli>\n\u003Cli>the caller: the agent’s name, “Claude (outside Escouade)”, or “Unknown client” for a request refused before its token says where it comes from;\u003C\u002Fli>\n\u003Cli>the tool, and in short what it was asked (never a token);\u003C\u002Fli>\n\u003Cli>the result: “Done”, “Refused”, or “Error”, with the reason for the last two (shown in the alert color).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>“Clear” empties the list. The log is not saved: it starts from zero the next time Escouade starts.\u003C\u002Fp>\n\u003Cp>Also refused, and logged: a request without a token (“Request refused: no token”), with an unknown token, with an unexpected \u003Ccode class=\"key\">Host\u003C\u002Fcode> header, with an \u003Ccode class=\"key\">Origin\u003C\u002Fcode> header (a web page), or to a path other than the server’s.\u003C\u002Fp>\n\u003Ch2 id=\"token-and-network\">Token and network\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>The server only listens on \u003Ccode class=\"key\">127.0.0.1\u003C\u002Fcode>, on a free port between 47000 and 47999, chosen at the first start and then kept (it only changes when its own is taken, and the declaration is then redone in every account).\u003C\u002Fli>\n\u003Cli>Every request carries a token, in the \u003Ccode>Authorization: Bearer\u003C\u002Fcode> header. Claude outside Escouade’s token is kept in the system keychain; when it refuses it, and on Linux, in \u003Ccode>~\u002F.escouade\u002Fmcp-token.json\u003C\u002Fcode>, readable by you alone. It is also written in plain text in Claude Code’s config (\u003Ccode class=\"key\">~\u002F.claude.json\u003C\u002Fcode> for “Main”). An agent’s token is its own, lives in memory and in a configuration file under \u003Ccode class=\"key\">~\u002F.escouade\u002Fmcp\u002F\u003C\u002Fcode> that the app removes when its process stops.\u003C\u002Fli>\n\u003Cli>A request sent by a web page (\u003Ccode class=\"key\">Origin\u003C\u002Fcode> header) or addressed to a name other than \u003Ccode class=\"key\">127.0.0.1\u003C\u002Fcode> or \u003Ccode class=\"key\">localhost\u003C\u002Fcode> is refused, even with a token: a site you visit cannot call the server.\u003C\u002Fli>\n\u003Cli>Another MCP client connects to \u003Ccode>http:\u002F\u002F127.0.0.1:&lt;port&gt;\u002Fmcp\u003C\u002Fcode> with the same header. The address and the token can be read in the account’s \u003Ccode class=\"key\">.claude.json\u003C\u002Fcode>, in the \u003Ccode class=\"key\">escouade\u003C\u002Fcode> entry, or in the command the tab offers when the declaration fails.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"see-also\">See also\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Fdocs\u002Fautopilot\u002F\">The autopilot\u003C\u002Fa>: the rules the tools take over.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Fdocs\u002Fboard\u002F\">The Kanban\u003C\u002Fa>: the tickets the tools create and move.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-claude-code\u002F\">Claude Code settings\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-projects\u002F\">Project settings\u003C\u002Fa>: where the switches are.\u003C\u002Fli>\n\u003C\u002Ful>\n",[8,12,15,18,22,25,28,31,34,37,40],{"id":9,"text":10,"depth":11},"what-it-is-for","What it is for",2,{"id":13,"text":14,"depth":11},"turning-on-claude-can-drive-escouade","Turning on “Claude can drive Escouade”",{"id":16,"text":17,"depth":11},"the-tools","The tools",{"id":19,"text":20,"depth":21},"reading","Reading",3,{"id":23,"text":24,"depth":21},"acting","Acting",{"id":26,"text":27,"depth":21},"reserved-to-escouade-s-agents","Reserved to Escouade’s agents",{"id":29,"text":30,"depth":11},"the-guardrails","The guardrails",{"id":32,"text":33,"depth":11},"escouade-s-agents-and-the-server","Escouade’s agents and the server",{"id":35,"text":36,"depth":11},"mcp-activity","MCP activity",{"id":38,"text":39,"depth":11},"token-and-network","Token and network",{"id":41,"text":42,"depth":11},"see-also","See also",1791926756463]