Architecture
Unlike the original Naive MCP (which ran as a local stdio subprocess), this is a remote SSE server. The agent connects over the network.Connection
Claude Desktop Configuration
Cursor Configuration
How It Works
- Agent opens SSE connection to
/mcp/ssewith Bearer auth - Server sends back session ID
- Agent sends tool calls via
POST /mcp/messages?sessionId=... - Server executes the tool using internal services and returns result
- Connection stays open for the session duration
Governance on this transport
Every tool call goes through one dispatcher tail: scope → revoke → kit gate → budget scope, the same ordergatePrimitive() uses on HTTP, so the two surfaces cannot give
different reasons for the same refusal. The subject and the AccountKit are re-resolved
per call, so a revoke or a kit edit takes effect mid-session with no reconnect.
Available Tools
The server declares 310naive_* tools, documented across three pages:
The list is per tenant, not per server. What a session is offered is filtered by the resolved
tenant user’s Account Kit: a tool whose primitive the kit disables is withheld, because a listed
tool that is certain to be refused teaches a model a capability it does not have. Tools that are
allowed but need approval stay listed — hiding an authority decision would give the model the
wrong one of two policies.
GET /v1/users/{user_id}/sessions/{id}/tools renders the exact list a
session will see.The seven
naive_* tools the Node SDK’s agentTools() produces are a different, deliberately
compressed set — a model gets naive_run_primitive + naive_search_primitives rather than 273
definitions. They are documented with the SDK, not here.