Docs
Ork MCP Server
Let AI agents read and write your Ork notes.
ork-mcp is a Model Context Protocol server.
It exposes your Ork notes — search, create, append, tag, publish, organize — as
tools any MCP-capable client (Claude Desktop, Claude Code, Cursor, …) can
call on your behalf.
Contents
- What is MCP?
- Install
- Authentication
- Connect a client
- Tools reference
- Example prompts
- Engineer Brain
- Security model
- Troubleshooting
What is MCP?
MCP is an open standard for connecting AI assistants to external tools and data. Instead of every app building a bespoke integration, it exposes one MCP server and any MCP-capable client can use it.
- Server — exposes capabilities (this:
ork-mcp). - Client — the host app the model runs in (Claude Desktop, Cursor, …).
- Tools — callable functions with JSON schemas the model invokes.
The client launches the server as a subprocess (stdio) and the model decides when to call each tool, based on the tool’s description. You never type tool calls — you just talk to your agent.
You ──▶ Agent (Claude) ──▶ MCP tool ──▶ ork-mcp ──▶ Ork API
│
You ◀── phrased answer ◀── tool result ◀──────────────┘
Install
Clients launch it with no install via npx:
{ "command": "npx", "args": ["-y", "@ork.so/ork-mcp@latest"] }
From source
# from the monorepo root (Node >= 22)
pnpm --filter @ork.so/ork-mcp build
ln -sf "$PWD/apps/mcp/dist/index.js" /opt/homebrew/bin/ork-mcp # put on PATH
ork-mcp --help # (it runs as a stdio server; see clients below)
Authentication
The server reads auth from its environment — there is no interactive login.
| Variable | Required | Purpose |
|---|---|---|
ORK_API_KEY | preferred | A scoped API key (x-api-key). Revocable, non-expiring. |
ORK_TOKEN | fallback | A 30-day session token. |
ORK_API_URL | no | API origin. Defaults to https://api.ork.so. |
ORK_WEB_URL | no | Web origin for links in tool results. |
Get an API key
Via the CLI:
ork token create "Claude agent" # prints the key once — copy it
Via the web app: Profile → API Keys → Create (the key is shown once).
🔐 Prefer an API key over a session token for agents: it’s scoped, independently revocable, and doesn’t expire. Revoke any time with
ork token revoke <id>or from the web UI.
Connect a client
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ork": {
"command": "ork-mcp",
"env": {
"ORK_API_KEY": "ork_…"
}
}
}
}
Fully quit (⌘Q) and reopen Claude Desktop. The Ork tools appear in the tools menu. Then just ask: “List my recent Ork notes.”
Claude Code
Plugin (recommended) — installs the server and the Engineer Brain skill, and prompts for your key (stored securely, no config editing):
/plugin marketplace add Ork-so/ork-plugin
/plugin install ork@ork-so
Manual — server only:
claude mcp add ork --env ORK_API_KEY=ork_… -- ork-mcp
claude mcp list # verify
Cursor
Cursor speaks MCP but can’t install Claude Code plugins. The
plugin repo’s cursor/ folder
has ready-to-import files so there’s no JSON to hand-write:
- One-click — the “Add to Cursor” deeplink in that folder’s README.
- By config — copy
cursor/mcp.jsonto~/.cursor/mcp.json(global) or<project>/.cursor/mcp.json(per project), same shape as Claude Desktop, then paste your key.
For the Engineer Brain behavior, also copy the rule file from
that folder into your project’s .cursor/rules/.
Hosted MCP (Claude.ai / ChatGPT)
Desktop clients use stdio (above). Browser / remote hosts need Streamable HTTP at:
https://mcp.ork.so
Claude custom connector (recommended):
- URL:
https://mcp.ork.so - Authentication: Sign in (OAuth)
- OAuth client: Use Claude’s published identity (CIMD)
- Transport: Streamable HTTP
- Approve on
ork.sowhen prompted — Ork mints a revocable API key for that connector
API key (no OAuth): header Authorization: Bearer ork_… or x-api-key: ork_…
(Claude → Request headers → No sign-in, or Cursor mcp.json headers).
Health: https://mcp.ork.so/health
Discovery: https://mcp.ork.so/.well-known/oauth-authorization-server
MCP Inspector (testing)
The fastest way to test the server in isolation — a UI to list and call tools:
npx @modelcontextprotocol/inspector \
-e ORK_API_KEY=ork_… \
ork-mcp
Open the printed URL, click Connect → List Tools, then run any tool with a form.
Tools reference
21 tools, grouped below. Each shows its parameters (? = optional).
Read
| Tool | Parameters | Description |
|---|---|---|
search_notes | query | Full-text search; returns matching notes (id, title). |
get_note | note_id | Fetch one note’s title + body as Markdown. |
list_notes | limit? | List recent notes (id, title). |
Write
| Tool | Parameters | Description |
|---|---|---|
create_note | markdown, title?, tags? | Create a note from Markdown; optional tags (auto-created). Returns id + URL. |
append_to_note | note_id, markdown | Append Markdown to a note, keeping existing content. |
replace_note_body | note_id, markdown, title? | Replace a note’s entire body (and optionally title). |
Tags
| Tool | Parameters | Description |
|---|---|---|
add_tags | note_id, tags | Attach tags to a note (auto-created). |
list_tags | — | List all tags. |
Publishing
| Tool | Parameters | Description |
|---|---|---|
publish_note | note_id | Publish a note; returns the public URL. |
unpublish_note | note_id | Make a note private again. |
Collections
| Tool | Parameters | Description |
|---|---|---|
list_collections | — | List collections (name, id). |
create_collection | name, description? | Create a collection. |
add_to_collection | collection_id, note_ids | Add notes to a collection. |
Boards
| Tool | Parameters | Description |
|---|---|---|
list_boards | — | List boards (id, title, card count). |
get_board | board_id | Read a board as text: cards with ids and content, frames, connections. |
create_board | title, description?, cards?, connections?, frames?, note_ids? | Create a board, optionally filled with text, checklist and link cards laid out in a grid. Returns id + URL. |
update_board | board_id, title?, description? | Rename a board or change its description. |
edit_board | board_id, ops | Add cards, edit text/checklist/link cards, connect cards, and add frames in one call. Never removes anything. |
add_notes_to_board | board_id, note_ids | Place existing notes on a board as note cards. |
publish_board | board_id, password?, slug?, show_author? | Publish a board; returns the public URL. Also publishes the notes on it unless a password is set. |
unpublish_board | board_id | Make a board private again. |
Call get_board before edit_board so you can refer to cards by id. Edits
replace the board’s saved layout, so if you have the board open in Ork, reload
it after the agent finishes rather than editing at the same time.
🛡️ There is intentionally no delete tool — agents can’t destroy notes or boards, and
edit_boardonly adds to a board.
Tool input is validated with JSON Schema, and errors (e.g. a missing/expired key) come back as readable, model-facing messages.
Example prompts
Once connected, talk naturally — the agent picks the right tool:
- “What did I note about the Postgres migration?” →
search_notes - “Summarize this article and save it to Ork tagged #reading.” →
create_note+add_tags - “Add these three action items to my standup note.” →
append_to_note - “What did I write this week?” →
list_notes - “Publish my ‘Q3 plan’ note and give me the link.” →
publish_note - “Group my launch notes into a ‘Launch’ collection.” →
create_collection+add_to_collection - “Sketch a launch-plan board with the key steps and how they connect.” →
create_board - “Add a ‘risks’ checklist to my launch board and link it to the plan.” →
get_board+edit_board
Engineer Brain
The Claude Code plugin bundles engineer-brain, a skill that turns these tools into a persistent project memory. It reads a project’s Ork collection at the start of a session, and auto-records decisions, architecture, structure changes, and gotchas as atomic, tagged notes while you work — searching first so it updates existing notes rather than duplicating them.
Point it at a collection with one line in your project’s AGENTS.md or
CLAUDE.md:
Ork Engineer Brain collection: "My Project"
If the line is absent, the agent asks the first time it needs it. Say
“update the brain” to force a write. Cursor users get the same behavior via
the rule file in the plugin repo’s cursor/
folder.
Security model
- Scoped keys. Each agent uses its own API key — revoke one without affecting the others or your session.
- No destructive tools. No delete; publishing is reversible.
- Your data path. Tools call the same authenticated Ork API as every other client; notes stay encrypted at rest server-side.
- stdout is the protocol channel. The server logs only to stderr, so tool transport is never corrupted.
Troubleshooting
| Symptom | Fix |
|---|---|
| A tool returns “Not authenticated” | ORK_API_KEY is missing/expired/revoked. Mint a fresh key. |
| Hosted MCP returns 401 | Pass Authorization: Bearer ork_… (or x-api-key) on the initialize request. |
| Server / tools don’t appear in the client | Fully restart the client. Confirm ork-mcp is on PATH (which ork-mcp). Test in the Inspector. |
| Works in Inspector, not in client | Check the client config path and that you fully quit/reopened it. |
| Created-note links show the wrong host | Set ORK_WEB_URL in env. |
See also: Ork CLI — the same capabilities for humans at the terminal.