{
  "$schema": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json",
  "name": "io.github.PatterAI/patter-mcp",
  "title": "Patter MCP",
  "description": "Gives an AI agent a phone number. Place outbound calls, answer inbound calls, hand a task to a third party over the phone, and read back transcripts, metrics and costs — built on the open-source Patter voice AI SDK.",
  "version": "1.0.0",
  "websiteUrl": "https://www.getpatter.com/developers",
  "repository": {
    "url": "https://github.com/PatterAI/patter-mcp",
    "source": "github"
  },
  "documentation": "https://github.com/PatterAI/patter-mcp#readme",
  "license": "MIT",
  "deployment": "self-hosted",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "http://localhost:3000/mcp",
      "description": "Streamable HTTP transport, served by the Patter MCP server you run yourself. Patter does not host a shared instance: the server places real phone calls using your own carrier and model credentials, so it runs inside your infrastructure. Set MCP_PORT to change the port."
    }
  ],
  "packages": [
    {
      "registryType": "github",
      "identifier": "PatterAI/patter-mcp",
      "transport": { "type": "streamable-http" },
      "runtimeHint": "node",
      "installInstructions": "git clone https://github.com/PatterAI/patter-mcp && cd patter-mcp && npm install && cp .env.example .env && npm run build && npm start",
      "connectInstructions": "claude mcp add --transport http patter-mcp http://localhost:3000/mcp"
    },
    {
      "registryType": "github",
      "identifier": "PatterAI/patter-mcp",
      "transport": { "type": "stdio" },
      "runtimeHint": "node",
      "installInstructions": "git clone https://github.com/PatterAI/patter-mcp && cd patter-mcp && npm install && npm run build",
      "connectInstructions": "Start the server with `--stdio` and let the MCP client spawn it as a subprocess."
    }
  ],
  "environmentVariables": [
    { "name": "TWILIO_ACCOUNT_SID", "description": "Twilio account SID.", "isRequired": true, "isSecret": true },
    { "name": "TWILIO_AUTH_TOKEN", "description": "Twilio auth token.", "isRequired": true, "isSecret": true },
    { "name": "TWILIO_PHONE_NUMBER", "description": "Your Twilio phone number in E.164 format.", "isRequired": true, "isSecret": false },
    { "name": "OPENAI_API_KEY", "description": "OpenAI API key.", "isRequired": true, "isSecret": true },
    { "name": "DEEPGRAM_API_KEY", "description": "Deepgram speech-to-text key.", "isRequired": true, "isSecret": true },
    { "name": "ELEVENLABS_API_KEY", "description": "ElevenLabs text-to-speech key.", "isRequired": true, "isSecret": true },
    { "name": "MCP_PORT", "description": "Port the MCP server listens on. Defaults to 3000.", "isRequired": false, "isSecret": false },
    { "name": "PATTER_PORT", "description": "Port the embedded Patter voice server listens on. Defaults to 8000.", "isRequired": false, "isSecret": false }
  ],
  "tools": [
    {
      "name": "make_call",
      "description": "Place an outbound call with an AI voice agent, wait for it to end, and return the outcome and transcript."
    },
    {
      "name": "call_third_party",
      "description": "Call a third party with an autonomous task, such as booking a restaurant reservation, and return the transcript."
    },
    {
      "name": "get_calls",
      "description": "List all calls with their status, duration and cost."
    },
    {
      "name": "get_transcript",
      "description": "Return the full conversation transcript of one call."
    },
    {
      "name": "end_call",
      "description": "Hang up a call that is still in progress."
    },
    {
      "name": "get_metrics",
      "description": "Read latency, token and cost metrics for calls."
    },
    {
      "name": "configure_inbound",
      "description": "Configure how inbound calls are answered."
    }
  ]
}
