Skip to main content
HTTP POST with JSON-RPC 2.0. Base URL: https://mcp.app.pinkfish.ai. Requires a runtime token.

Request Flow

You know…Use
Tool and servertools/call on server path (e.g. /web-search, /gmail)
Task, not toolDiscovery: capabilities_discovercapability_details → call tool

Request Format

All requests use this structure:
curl -s -X POST "https://mcp.app.pinkfish.ai/<server-path>" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "<method>",
    "params": {
      "name": "<tool_name>",
      "arguments": { ... }
    },
    "id": 1
  }'
Required headers:
HeaderValue
AuthorizationBearer <runtime_token>
Content-Typeapplication/json
Acceptapplication/json
JSON-RPC fields:
FieldDescription
jsonrpcAlways "2.0"
methodThe JSON-RPC method — typically "tools/call" or "tools/list"
paramsMethod parameters — for tools/call, includes name (tool name) and arguments (tool inputs)
idRequest identifier (any integer)

List Servers

Query available servers and their tools:
curl -s -X POST "https://mcp.app.pinkfish.ai/mcp" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "listServers",
      "arguments": {}
    },
    "id": 1
  }'
Response: result.structuredContent or result.content[0].text. Each server has name, path, description, embedded, tools.

List Tools

Call tools/list on a server path to see its tools:
curl -s -X POST "https://mcp.app.pinkfish.ai/gmail" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "id": 1
  }'
Response:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "gmail_search_emails",
        "description": "Search emails in Gmail",
        "inputSchema": {
          "type": "object",
          "properties": {
            "PCID": {
              "type": "string",
              "description": "PinkConnect connection ID"
            },
            "query": { "type": "string", "description": "Gmail search query" }
          },
          "required": ["PCID", "query"]
        }
      }
    ]
  }
}

Call a Tool

POST tools/call to the server path with the tool name and arguments:
curl -s -X POST "https://mcp.app.pinkfish.ai/<server-path>" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "<tool_name>",
      "arguments": {
        "key": "value"
      }
    },
    "id": 1
  }'

Example: Search the Web

curl -s -X POST "https://mcp.app.pinkfish.ai/web-search" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "search_googlesearch",
      "arguments": {
        "query": "latest AI news"
      }
    },
    "id": 1
  }'

Example: External Service (Gmail)

Requires a PCID. See Connecting to MCPs.
curl -s -X POST "https://mcp.app.pinkfish.ai/gmail" \
  -H "Authorization: Bearer $PINKFISH_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "gmail_search_emails",
      "arguments": {
        "PCID": "abc123-def456",
        "query": "is:unread"
      }
    },
    "id": 1
  }'

Response Format

Success: result.structuredContent (preferred) or result.content[0].text (JSON string).
const data = result.structuredContent ?? JSON.parse(result?.content?.[0]?.text ?? "{}");
Errors: -32000 (validation, timeout, unsupported media) or -32603 (internal). Ensure Accept: application/json and Content-Type: application/json are set.