Skip to main content
workspaceId is your workspace UUID, from Settings → Workspace. Anything that is not a well-formed UUID returns 404.
This endpoint is unauthenticated. There is no key. The only credential is the workspace id in the URL, and CORS is *.That is safe because the endpoint is read-only and guide-only — it cannot change anything, and it exposes only the capabilities you have explicitly marked agent-accessible. It is not private: treat the URL as public, because anyone you give it to can share it.It is rate limited per workspace and per source IP for exactly this reason — every call runs a multi-read query, so an unbounded caller would otherwise hammer your data for free.

GET — discovery card

A small card for humans and directories.
Cached for five minutes.

POST — JSON-RPC

initialize

Note listChanged: false — the tool list does not push updates. Clients should re-list rather than wait for a notification.

tools/list

The annotations tell a client how to treat each tool:
These annotations describe the capability, not this endpoint. No tool call here executes anything, whatever its annotations say — they exist so a client can present the guidance with the right weight.

tools/call

No invite was sent. The response is guidance for the assistant to relay, and the arguments are not acted on. See the overview for why.
An unknown tool name returns -32602 Unknown tool: {name}; a missing name returns -32602 Invalid params: missing tool name.

Batching

Returns an array of responses, with notifications omitted. If a batch contains only notifications, the response is 202 with no body.

Errors

MCP clients expect protocol errors as 200 responses with a JSON-RPC error member, and that is what Peeve returns — with two exceptions noted below. Rate limiting is a real 429 with a retry-after header on purpose, so a client backs off properly instead of retrying into the wall.
A -32001 does not distinguish “no such workspace” from “not entitled” — both look the same from outside. If you are debugging, check in order: the workspace id is a valid UUID; the plan is Growth or above; the agent channel is enabled; the kill switch is off.

Rate limits

Bucketed per workspace and per hashed source IP — there is no key bucket, because there is no key. Ceilings follow your plan; see Rate limits. The limiter runs before the capability projection, so a shed request costs nothing. Like every limiter in Peeve it fails open: if the limiter itself is unavailable, requests are allowed rather than blocked.

A friendly hostname

The endpoint is advertised as mcp.peeve.ai/{workspaceId}, which rewrites to this route. Both work; use whichever you prefer when handing the URL to someone.