What the connection can do
The MCP server uses exactly the same credentials and rules as/api/v1:
- The key decides the organisation. A connection can only see and change that organisation’s data.
- Each tool call is checked against the key’s scopes. A tool the key is not allowed to use returns a tool error with
insufficient_scope; the rest keep working. A read-only key (tracker:read,leads:read) can browse but cannot add, change or track anything. - Each tool call counts against the key’s rate limits (600 reads/min, 120 writes/min, 200 creates or lead tracks/hour, 60 refreshes/hour). Over the limit, the tool returns
rate_limitedwithretryAfterSeconds. - A missing, unknown, revoked or expired key is rejected before the MCP handshake with HTTP
401.
Server instructions
On connection the server sends instructions that orient the model: what companies, signals, alerts and leads are; that lists are compact; that names can be passed instead of IDs and ambiguity should go back to the user; and that removing, pausing and rejecting need the user’s confirmation.Example session
A VC asking their assistant “what’s new with my portfolio, and anything worth tracking?” typically results in:1
Signals worth acting on
list_signals { "needsAttention": true, "since": "2026-09-18" }2
What was emailed
list_alerts { "since": "2026-09-18" }3
The lead inbox
list_leads { "decision": "unreviewed" }4
Decide
After the user picks one:
track_lead { "id": "…", "thingsToTrack": "…", "alertEmails": ["…"] }. After they dismiss another: decide_lead { "id": "…", "accepted": false }.Implementation
Tools call the service layer directly, not the REST routes over HTTP. Built on@modelcontextprotocol/sdk (McpServer and WebStandardStreamableHTTPServerTransport).
Tested end to end with the official MCP TypeScript client over Streamable HTTP (34 checks), locally and against production.