Endpoint —
https://api.sidenet.ai/api/mcp/sidenet-api/mcp (Streamable HTTP)What it can do
The server exposes the whole API reference — one tool per endpoint, plusget_connection_info for confirming which organization the connection is scoped
to. Each tool is named after its endpoint’s title in the API reference — “List
agents” (GET /v1/agents) is list_agents, “Run workflow” is run_workflow —
and a new endpoint becomes a tool the moment it is documented.
That means everything the API can do, an MCP client can do: read and create
agents, workflows, prompt blocks, networks, tools, tool providers, users and
groups; save drafts, publish, activate and delete; run agents, networks,
workflows and experiments; and manage workflow schedules.
The one exception is streaming chat. POST /v1/chat streams its response, and
an MCP tool call returns a single result, so the chat-stream endpoints are not
tools — run_agent and run_network are the same capability in request/response
form. Use the SDK or the HTTP API for streaming chat.
Connecting
With an API key
Best for Claude Code, Cursor, and anything you configure from a file. Use an API key from studio.sidenet.ai → API keys..mcp.json / claude_desktop_config.json:
With OAuth
Best for Claude Cowork and claude.ai, which have no field for a header. Addhttps://api.sidenet.ai/api/mcp/sidenet-api/mcp as a custom connector. The client
discovers the flow on its own and opens a Sidenet consent screen, which asks for
an API key — the same one you’d paste into a config file. Approve, and the client
receives a token.
That token is a handle on the key, not a separate credential: it reaches
exactly what the key reaches, and revoking the key in the studio disconnects the
client immediately. You can also revoke a single client’s token without touching
the key.
Because the token is bound to one API key, an OAuth connection is scoped to
that key’s organization, exactly like a header connection.
Which organization am I in?
Every connection is pinned to one organization by its credential.get_connection_info
reports which one, so an assistant can confirm the workspace before it starts
naming agents. To work in a different organization, connect with a key from it.
Connecting to several organizations
Add one connector per organization, each with that organization’s API key. Clients that manage connectors for you — Claude Cowork, claude.ai — key them by URL and reject a duplicate, so label each URL with the organization’s id:~ doesn’t select the organization — your key does that — it
just makes the URL distinct. It is checked against the key, so a URL labelled for
one organization used with another’s key is refused rather than quietly working
on the wrong data. A mismatch tells you which labels would have worked.
Use either the first block of the id or the whole thing. You’ll find it in the
studio URL while viewing that organization:
Names aren’t accepted as labels. An id never changes, so the URL keeps working
after someone renames the organization.
The plain
https://api.sidenet.ai/api/mcp/sidenet-api/mcp keeps working
unchanged — labels are only needed when you want more than one connector.End-user identity
User-scoped endpoints (chat runs, threads, user workflows) act on behalf of an end user as well as an organization — the sameX-User-Id you can send over
HTTP. Every tool therefore accepts an optional userId, and a tool that needs
one will say so in its error; the org-scoped tools work without it.
With a header connection you can set it once for the whole session by sending
X-User-Id alongside Authorization.
Results
Tools return{ status, ok, data }, mirroring the HTTP response. A 404 or
400 comes back as data rather than an error, so the assistant can read the
reason and correct itself.
Every tool declares its result shape, so the answer arrives as MCP
structuredContent — a parsed object — not as a JSON string the client has to
parse itself.
Very large responses are cut off with truncated: true and a note. Narrowing the
request — a filter, a page, or fetching one record by id — returns the rest.
The tool catalogue is the response most likely to hit that limit, because every
tool carries its full JSON schema. list_tools accepts basic: true, which
returns just the provider id/name/type/base_url and each tool’s
id/name/description — enough to choose a tool, small enough to keep in
context. Fetch the same tool again without basic when you need its schema. It
also accepts limit and offset to page through the catalogue.