Deploy API: MCP Server

MCP protocol endpoints for agent and tools servers

MCP API

MCP (Model Context Protocol) endpoints for agents deployed via Agent.launch(protocol="mcp") or ToolsMCPServer.

Base URL + Playground

bash
# Start MCP server
agent.launch(protocol="mcp", port=8080)

Base URL: http://localhost:8080

Endpoints

GET /sse

Server-Sent Events endpoint for MCP communication.

ParamField none

No parameters required.

curl
curl -N http://localhost:8080/sse
Python
import requests

response = requests.get("http://localhost:8080/sse", stream=True)
for line in response.iter_lines():
    if line:
        print(line.decode())

Response: SSE stream with MCP protocol messages.

POST /messages/

Send JSON-RPC messages to the MCP server.

ParamField string

JSON-RPC version (must be “2.0”)

ParamField string

MCP method name (tools/list, tools/call, initialize)

ParamField object

Method parameters

ParamField integer

Request ID

curl
curl -X POST http://localhost:8080/messages/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
Python
import requests

response = requests.post(
    "http://localhost:8080/messages/",
    json={"jsonrpc": "2.0", "method": "tools/list", "id": 1}
)
tools = response.json()["result"]["tools"]
print(f"Available tools: {[t['name'] for t in tools]}")
JavaScript
const response = await fetch("http://localhost:8080/messages/", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({jsonrpc: "2.0", method: "tools/list", id: 1})
});
const { result } = await response.json();
console.log("Tools:", result.tools.map(t => t.name));

Response:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "execute_assistant_task",
        "description": "Executes the agent's primary task with the given prompt.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "prompt": {"type": "string"}
          },
          "required": ["prompt"]
        }
      }
    ]
  }
}

MCP Methods

tools/list

List available tools.

curl
curl -X POST http://localhost:8080/messages/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
Python
import requests

response = requests.post(
    "http://localhost:8080/messages/",
    json={"jsonrpc": "2.0", "method": "tools/list", "id": 1}
)
tools = response.json()["result"]["tools"]
for tool in tools:
    print(f"- {tool['name']}: {tool['description']}")

Response:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "search",
        "description": "Search the web for information.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {"type": "string"}
          },
          "required": ["query"]
        }
      }
    ]
  }
}

tools/call

Execute a tool.

ParamField string

Tool name to execute

ParamField object

Tool arguments

curl
curl -X POST http://localhost:8080/messages/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "search",
      "arguments": {"query": "AI news"}
    },
    "id": 2
  }'
Python
import requests

response = requests.post(
    "http://localhost:8080/messages/",
    json={
        "jsonrpc": "2.0",
        "method": "tools/call",
        "params": {"name": "search", "arguments": {"query": "AI news"}},
        "id": 2
    }
)
result = response.json()["result"]
print(result["content"][0]["text"])

Response:

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Results for: AI news"
      }
    ]
  }
}

initialize

Initialize MCP session.

ParamField string

MCP protocol version

ParamField object

Client capabilities

ParamField object

Client information (name, version)

curl
curl -X POST http://localhost:8080/messages/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {"name": "test-client", "version": "1.0.0"}
    },
    "id": 0
  }'
Python
import requests

response = requests.post(
    "http://localhost:8080/messages/",
    json={
        "jsonrpc": "2.0",
        "method": "initialize",
        "params": {
            "protocolVersion": "2024-11-05",
            "capabilities": {},
            "clientInfo": {"name": "my-client", "version": "1.0.0"}
        },
        "id": 0
    }
)
server_info = response.json()["result"]["serverInfo"]
print(f"Connected to: {server_info['name']}")

Response:

json
{
  "jsonrpc": "2.0",
  "id": 0,
  "result": {
    "protocolVersion": "2024-11-05",
    "capabilities": {"tools": {}},
    "serverInfo": {"name": "praisonai-tools", "version": "1.0.0"}
  }
}

Errors

MCP errors follow JSON-RPC 2.0 format:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32601,
    "message": "Method not found"
  }
}
CodeMessage
-32700Parse error
-32600Invalid request
-32601Method not found
-32602Invalid params
-32603Internal error

Related