PPToGoPPToGo
🔌 Developer Docs · MCP

PPToGo MCP Server

PPToGo exposes a Model Context Protocol (MCP) server at https://pptogo.com/api/mcp that lets AI assistants like Claude, GPT, and Openclaw call PPToGo tools directly — no custom integration per runtime. It speaks the spec-compliant Streamable HTTP transport (JSON-RPC 2.0 over POST), so any standard MCP client can connect to it as a remote server.

Looking for the REST API? The same capabilities are available over plain HTTP/JSON — see /docs/rest-api.

Authentication

Tool calls require an API key in the Authorization: Bearer pk_live_... header. Get a key from your dashboard. The discovery methods (initialize, tools/list) are open and need no key, so MCP registries can list the server; only tools/call is authenticated.

Connect a standard MCP client

Point any MCP client at the remote URL. For clients that read an mcpServers config (Claude Desktop, Cursor, etc.), bridge to the remote endpoint with mcp-remote:

{
  "mcpServers": {
    "pptogo": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://pptogo.com/api/mcp",
        "--header",
        "Authorization: Bearer pk_live_YOUR_KEY"
      ]
    }
  }
}

Clients that support remote Streamable-HTTP servers natively can connect to https://pptogo.com/api/mcp directly with the same Authorization header.

Available tools

JSON-RPC 2.0 handshake

The endpoint is a Streamable-HTTP MCP server: every call is a JSON-RPC 2.0 message POSTed to /api/mcp. The server is stateless (no Mcp-Session-Id required). A typical flow:

# 1. initialize (no auth)
curl -X POST https://pptogo.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-06-18"}}'
# → {"jsonrpc":"2.0","id":1,"result":{
#      "protocolVersion":"2025-06-18",
#      "serverInfo":{"name":"PPToGo MCP Server","version":"1.0.0"},
#      "capabilities":{"tools":{}}, "instructions":"..." }}

# 2. notifications/initialized (notification — HTTP 202, no body)
curl -X POST https://pptogo.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

# 3. tools/list (no auth — open discovery)
curl -X POST https://pptogo.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# → {"jsonrpc":"2.0","id":2,"result":{"tools":[...]}}

# 4. tools/call (requires Bearer pk_live_...)
curl -X POST https://pptogo.com/api/mcp \
  -H "Authorization: Bearer pk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"get_my_earnings","arguments":{}}}'
# → {"jsonrpc":"2.0","id":3,"result":{
#      "content":[{"type":"text","text":"{...}"}],
#      "structuredContent":{...} }}

A failing tool call returns a JSON-RPC result with isError: true (so the model sees the error). Unauthorized tools/call returns a JSON-RPC error with code -32001.

Raw HTTP (legacy shape)

For backward compatibility, the endpoint still accepts the older non-JSON-RPC body. A GET returns a discovery manifest, and POSTs without a jsonrpc field use list_tools / call_tool (auth required up front):

# Manifest (open)
curl https://pptogo.com/api/mcp
# → { name, version, protocolVersion, transport, tools: [...] }

# Legacy list / call (auth up front)
curl -X POST https://pptogo.com/api/mcp \
  -H "Authorization: Bearer pk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method":"list_tools"}'

curl -X POST https://pptogo.com/api/mcp \
  -H "Authorization: Bearer pk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method":"call_tool","params":{"name":"get_my_earnings"}}'

Need help? See the MCP tools & API integration guide or contact developer support.

Hi! I'm Pip 👋
Ask me anything
Pip