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.
claude_desktop_config.json
{
  "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.

router session
> 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.