Once connected, your agent can:
- See your work — list your projects and workspaces, and read the full structure of a sitemap (pages, blocks, colors, tags, symbols).
- Build and edit sitemaps — create and update pages, add content blocks with wireframes, restructure the page tree, apply several changes at once as a single atomic update.
- Manage projects — create, duplicate, archive, move, or delete projects; transfer ownership; update project settings like theme and layout.
Every action runs as you — the agent only ever sees and changes what your Octopus.do account has access to.
Connecting
Endpoint
https://mcp.octopus.do/mcp
The general flow is the same in every client:
- Add Octopus as a remote MCP server / connector using the endpoint above.
- Choose OAuth as the authorization type — most clients detect this automatically.
- Sign in (or register) with your Octopus.do account when the browser opens.
- Ask your agent to do something — e.g. “show my Octopus projects” or “add a pricing page to my sitemap.”
No API keys to copy or manage — authorization happens through your normal Octopus.do login. Client-specific instructions below.
Claude (web and desktop)
- Go to Settings → Connectors → Add custom connector.
- Enter
https://mcp.octopus.do/mcpas the URL and click Add. - Click Connect and sign in with your Octopus.do account.
Claude Code
Run in your terminal:
claude mcp add --transport http octopus https://mcp.octopus.do/mcp
Then run /mcp inside Claude Code to complete the sign-in.
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": {
"octopus": {
"url": "https://mcp.octopus.do/mcp"
}
}
}
Cursor will prompt you to authenticate the first time the server is used.
VS Code (GitHub Copilot)
Run MCP: Add Server from the Command Palette and choose HTTP, or add to .vscode/mcp.json:
{
"servers": {
"octopus": {
"type": "http",
"url": "https://mcp.octopus.do/mcp"
}
}
}
ChatGPT
Requires a plan with connector support and developer mode enabled (Settings → Apps & Connectors → Advanced settings).
- Go to Settings → Apps & Connectors → Create (or Add connector).
- Set the MCP server URL to
https://mcp.octopus.do/mcpand authentication to OAuth. - Complete the Octopus.do sign-in when prompted.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"octopus": {
"serverUrl": "https://mcp.octopus.do/mcp"
}
}
}
Other MCP clients
Any client that supports remote MCP servers (Streamable HTTP) with OAuth works: point it at https://mcp.octopus.do/mcp, pick OAuth, and sign in with your Octopus.do account.
Authentication
Octopus MCP uses OAuth 2.1, the standard MCP clients use for secure, per-user authorization. Your agent requests access on your behalf, you approve it once during sign-in, and access can be revoked from your Octopus.do account at any time. The MCP server itself never sees or stores your password.
Available tools
Your agent picks these tools on its own — you don’t call them directly. The reference below is useful when you want to know exactly what the agent can (and can’t) do, or to phrase a request precisely.
Most write tools accept an optional idempotency_key (string): a unique key that makes retries safe — a repeated request with the same key is applied only once. It’s omitted from the tables below (delete_project is the one write tool that doesn’t take it).
Destructive actions (like deleting a page or a project) are flagged to your AI client, which will typically confirm with you before running them.
Reading
get_me
Returns your account name. No parameters.
list_projects
Lists all projects you can access, across every workspace (personal and teams). Each item includes the workspace it belongs to. No parameters.
list_workspaces
Lists your workspaces (personal + teams) with folders and the projects inside each. No parameters.
get_workspace
Returns one workspace: info, folders, and projects.
| Field | Required | Type | Description |
|---|---|---|---|
uuid | Yes | string | Workspace uuid. Use the literal "my" for your personal workspace. |
get_project
Returns the full state of one project: the entities (tabs, sections, nodes = pages, blocks, colors, tags, symbols, arrows, …), the parent/child tree linking them.
| Field | Required | Type | Description |
|---|---|---|---|
uuid | Yes | string | Project uuid |
Editing
apply_changes
Applies several editing operations to a project as one atomic change — the preferred way to build or restructure a sitemap. Operations run in order and each sees the effect of the previous ones. Give a created entity a ref and reference it in later operations via parent_ref / node_ref instead of an id.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
operations | Yes | array | At least one operation (see below) |
dry_run | No | boolean | Validate and preview only — nothing is changed |
Each operation:
| Field | Required | Type | Description |
|---|---|---|---|
operation | Yes | string | Operation name, e.g. "nodes.create" |
ref | No | string | Local name for the created entity, referenced by later operations via *_ref fields |
data | No | object | Operation payload — same fields as the corresponding standalone tool |
Operation names follow group.action:
| Group | Actions |
|---|---|
nodes | create, update, move, delete, clone, collapse |
blocks | create, update, move, delete, clone, link-symbol, unlink-symbol |
tabs | create, update, delete, clone, move-up, move-down |
sections | create, update, delete, clone, collapse, move-up, move-down |
colors | create, update, delete |
symbols | create, update, delete |
tags | create, update, delete, assign-node, unassign-node |
arrows | create, update, delete |
sticky-notes | create, update, delete, clone |
external-links | create, update, delete, clone |
estimates | update-settings, add-line-item, update-line-item, delete-line-item, set-value |
settings | update |
create_node
Creates a page (node) in the sitemap.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
parent_id | Yes | string | Parent id — a tab, section, or another node (ids come from get_project) |
title | No | string | Page title |
color_id | No | string | Project color id; defaults to the project default |
url | No | string | Page URL/slug shown on the node |
variant | No | enum | default | frame | ghost | stack |
index | No | number | Position among the parent’s children; omit to append |
update_node
Updates page fields.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Node id |
title | No | string | New title |
color_id | No | string | Project color id |
url | No | string | null | Page URL/slug; null clears it |
variant | No | enum | default | frame | ghost | stack |
notes | No | object | SEO/notes fields to merge: note, keywords, page_intent, seo_title, seo_description |
move_node
Moves a page with its whole subtree to another parent.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Node id to move |
parent_id | Yes | string | New parent (tab, section, or node) — not the node itself or its subtree |
index | No | number | Position among the new parent’s children |
delete_node
Deletes a page with its whole subtree and all blocks inside.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Node id |
create_block
Creates a content block inside a page.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
node_id | Yes | string | Page (node) id the block is created in |
title | No | string | Block title |
content | No | string | Block text content |
wireframes | No | string[] | Wireframe names to render, e.g. ["header"], ["text"], ["footer"] |
color_id | No | string | Project color id |
index | No | number | Position within the page; omit to append |
update_block
Updates block fields.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Block id |
title | No | string | New title |
content | No | string | Block text content |
color_id | No | string | Project color id |
wireframes | No | string[] | Wireframe names to render |
collapsed | No | boolean | Collapse/expand the block |
completed | No | boolean | Mark the block done/not done |
move_block
Moves a block to another page.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Block id to move |
node_id | Yes | string | Destination page (node) id |
index | No | number | Position within the destination page |
delete_block
Deletes a block from its page.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
id | Yes | string | Block id |
Project management
create_project
Creates a new project in the target workspace. May fail when your plan’s project limit is reached.
| Field | Required | Type | Description |
|---|---|---|---|
workspace_id | Yes | string | Destination workspace — a team workspace uuid, or the literal "my" for your personal space. Required; an empty or omitted value is rejected with an error. |
folder_id | No | string | Folder id within the team workspace |
delete_project
Permanently deletes a project with all its content. This cannot be undone.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
manage_project
Project lifecycle actions: duplicate, archive/unarchive, move, transfer.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
action | Yes | enum | duplicate | archive | unarchive | move | transfer |
workspace_id | Yes (move) | string | move: destination workspace — a team workspace uuid, or the literal "my" for your personal space. Required for move; an empty value is rejected with an error. |
folder_id | No | string | move: destination folder id |
email | No | string | transfer: recipient email — must be a registered, non-free-plan user |
update_project_settings
Updates project-level settings.
| Field | Required | Type | Description |
|---|---|---|---|
project_uuid | Yes | string | Project uuid |
title | No | string | Project title |
theme | No | enum | blueprint | bold | dark | light |
tree | No | enum | Tree layout: map | matrix |
frame | No | enum | Node frame style: mobile | neutral | web |
mobile | No | boolean | Mobile mode |
image_mode | No | boolean | Show images on nodes |
legend_position | No | enum | bottom | none | top |
default_color_id | No | string | Default color for new pages |
Learn more
- Octopus.do: https://octopus.do/
- Model Context Protocol: https://modelcontextprotocol.io/