Docs  MCP: both directions

Mori docs

MCP, plug anything in, plug Mori in anywhere

Mori speaks the Model Context Protocol in both directions: paste a server's link and its tools become hers, and other agents can use Mori through a small, token-guarded server on your own computer.


Two directions, one protocol

MCP works both ways in Mori. As a client, she connects to any Model Context Protocol server, GitHub, Linear, Sentry, Notion, Postgres, Figma, Blender and many more, and its tools become hers on every model you use. As a server, she offers a small set of tools on your own computer so other agents (Claude Code, editors, scripts) can read through her, see her board and file tasks for you to sort.

Connecting happens on the MCP page, under More. Settings > Connections lists the servers you have and holds Mori as a server.

Connecting a server to Mori

On the MCP page, paste a server's link into Paste a server link and press Connect. Mori names the server from its address, checks it, opens the sign-in in your browser when the server asks for one, and lists the tools it got in plain words. A sign-in asks only for what the server needs and is kept for the one address it was made for.

More options covers a server that needs a key, a local command instead of a link, and where it runs.

The Directory on the same page lists verified servers you can connect with one press, among them GitHub, GitLab, Sentry, Linear, Jira and Confluence, Notion, Slack, Google Workspace and Calendar, Figma, Blender, Roblox Studio, Runway, fal, ElevenLabs, Supabase, Postgres, Stripe, Playwright and Context7.

Everything ends up in one file, mcp.json in Mori's own data folder, readable only by you; sign-in tokens are kept encrypted beside it. Settings > Connections shows each server's state, its tools and any error, with Reload all.

// Settings → Connections → Add a server// Name: filesystem{  "command": "npx",  "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Documents"]} // The same server in mcp.json (userData): paste-compatible with Claude Desktop:{  "mcpServers": {    "filesystem": {      "command": "npx",      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Documents"]    }  }}

Transports: stdio, Streamable HTTP, SSE fallback

A config with command starts a stdio server as a child process. Mori resolves your login-shell PATH once at startup, because GUI apps launched from Finder do not inherit it, npx, uvx, nvm-managed node, and Homebrew binaries all work without configuration. Stdio servers receive a minimal environment: the resolved PATH, a safe baseline (HOME, USER, LANG, and similar), and whatever you put in the server's own env block. They never see Mori's full process environment, so your API keys cannot leak into a third-party server.

A config with url connects over Streamable HTTP first. If that connect fails, legacy SSE-only servers reject the Streamable POST with a 404 or 405. Mori automatically retries the same URL with the legacy SSE transport. You do not declare the transport; the fallback is handled at connect time. Custom headers (for example an Authorization bearer) are sent on either transport.

// Remote server over Streamable HTTP (SSE fallback is automatic):{  "url": "https://example.com/mcp",  "headers": { "Authorization": "Bearer YOUR_KEY" }}

How foreign tools behave inside Mori

A connected server's tools are named mcp__<server>__<tool> and join Mori's own, on every provider, with the server's name in front of each description so the model knows where a tool comes from. A connected app is named to Mori on every turn, and when you name it, its tools are hers: "use deepwiki to explain this" asks DeepWiki, not its website.

  • At the read-only Safe permission level, MCP tools are blocked.
  • Tools run side by side only when the server marks them read-only; the rest run one after another.

Results come back in Mori's own shape: text joined, resources inlined with their address, and pictures passed on as real pictures the model can see.

Reliability: budgets, pagination, hot-reload

All configured servers connect in parallel after the window opens, best-effort, a dead or slow server never blocks the others or Mori's startup. Each connection gets a 15-second budget; each tool call gets 60 seconds. Timeouts and failures come back to the model as plain error: strings rather than crashes, so Mori can route around a flaky server mid-task.

  • Pagination: tool discovery follows the spec's nextCursor loop, so servers with large tool catalogs are listed completely (hard cap of 2,000 tools per server, so a broken cursor cannot spin forever).
  • Hot-reload: when a server announces notifications/tools/list_changed, Mori re-fetches its tool list on the spot, no reconnect, no restart.
  • Manual control: Reload all tears down every client and reconnects from the current config; removing a server closes its client and drops its tools from dispatch immediately.

Mori as a server: the curated surface

Turn on Mori as a server in Settings > Connections and Mori serves MCP at http://127.0.0.1:4519/mcp. It is off until you turn it on, listens only on your own computer, and every request must carry a token that is made once and shown in the card.

It offers twelve tools: mori_status, reading, listing and searching files, reading the board, adding a card to it, reading goals, and listing conversations, reading one, and listing workflows, agents and skills.

There is no terminal, no file write, no send and no computer control on this server. Its one write, adding a card, lands in the board's Inbox: an outside agent can ask for work, and nothing runs until you move the card on yourself.

Connecting Claude Code to Mori

Turn the server on, copy the token from the Settings card, and register Mori as an HTTP MCP server. From then on, Claude Code sessions can check what Mori is doing, read files through her, inspect her board and goals, and queue tasks into her Inbox.

# One-time setup: paste the token from Settings → Connections → Mori as a serverclaude mcp add --transport http mori http://127.0.0.1:4519/mcp \  --header "Authorization: Bearer <your-token>" # Then, inside Claude Code:#   mori_status          -> {"app":"Studio Mori","version":"…","platform":"darwin","tools":7}#   mori_create_task     -> lands in Mori's Inbox for you to triage

Files and defaults at a glance

  • Client config: mcp.json in Mori's data folder, readable only by you, in the claude_desktop_config.json shape (mcpServers key; servers also accepted).
  • Server config: mcp-server.json in the same directory, enabled flag plus the generated token. Regenerate by deleting the file while the server is off.
  • Defaults: client has no servers configured; Mori-as-server is disabled; port 4519; endpoint accepts POST /mcp only and answers 401 without the exact bearer token.
  • Scope: both files stay on your machine. Nothing about your MCP setup is synced or sent anywhere.