MCP
A hosted MCP server that knows whose account to use
Every Prompt TM URL speaks MCP over streamable HTTP. It names a server and a user, so each tool call runs with that user's connected account and nobody else's.
Custom servers
Pick the apps and tools, get a URL
A custom server exposes the tools of the toolkits you choose, narrowed to an allow-list if you like. Use it when the agent has one job, such as triaging GitHub issues, and should see nothing else.
- Tools carry read-only and destructive hints, so clients can ask before a write.
- Limit a server to certain auth configs to pin it to your own OAuth app.
- Generate per-user URLs with a key scoped to that server and that user.
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://www.prompt-tm.com/mcp/mcp_k3x9…?user_id=alice",
"headers": { "x-api-key": "ptm_…" }
}
}
}Router
Five meta tools instead of 348 definitions
Loading every tool into a model's context costs tokens and confuses tool choice. The router exposes five tools. The agent searches for what it needs, gets the schema, asks the user to connect a missing app, and runs the calls.
PTM_SEARCH_TOOLS
Finds tools for a task across every app in the catalogue. Describe the task in plain words ("open an issue on GitHub", "list my Vercel deployments"). Returns matching tool slugs with descriptions, and whether the user has the app connected.
PTM_GET_TOOL_SCHEMAS
Returns the full input schema of each named tool, so you can build valid arguments for PTM_MULTI_EXECUTE_TOOL.
PTM_MULTI_EXECUTE_TOOL
Runs one or more tools in parallel (up to 20) with the user's connected accounts. Each item: { tool_slug, arguments, connected_account_id? }. Returns one result per item: { data, error, successful }.
PTM_MANAGE_CONNECTIONS
Lists the user's connected apps, starts a new connection, or removes one. action "connect" with a toolkit slug returns a link: show it to the user so they can sign in, then call PTM_WAIT_FOR_CONNECTION.
PTM_WAIT_FOR_CONNECTION
Waits until the user has finished connecting an app (up to 50 seconds), then says whether it is active.
> PTM_SEARCH_TOOLS { "query": "list failed deployments" }
< { "results": [{ "tool_slug": "VERCEL_LIST_DEPLOYMENTS", … }],
"toolkit_connection_statuses": [{ "toolkit": "vercel", "connected": false }] }
> PTM_MANAGE_CONNECTIONS { "action": "connect", "toolkit": "vercel" }
< { "redirect_url": "https://www.prompt-tm.com/connect/Xq…" }
> PTM_WAIT_FOR_CONNECTION { "toolkit": "vercel" }
< { "connected": true, "connected_account_id": "ca_…" }
> PTM_MULTI_EXECUTE_TOOL { "tools": [{ "tool_slug": "VERCEL_LIST_DEPLOYMENTS",
"arguments": { "state": "ERROR" } }] }Three ways to send the key
x-api-key header
What Claude Code, Cursor and SDK agents send. The key stays out of the URL.
Authorization: Bearer
For clients that only know bearer tokens.
?key= in the URL
For hosted clients that cannot send headers, such as claude.ai custom connectors. Use a key scoped to one server and one user.