{
  "version": "1.0",
  "servers": [
    {
      "name": "dev.primitive/email",
      "description": "Primitive is email infrastructure for AI agents that ships an in-agent MCP App UI (a ui:// widget on the OpenAI Apps SDK / MCP Apps that renders the inbox inside agent hosts like ChatGPT and Claude) alongside MCP and REST APIs to send, receive, and manage email.",
      "url": "https://www.primitive.dev/mcp",
      "endpoint": "https://www.primitive.dev/mcp",
      "transport": "streamable-http",
      "auth": "bearer",
      "card": "https://www.primitive.dev/.well-known/mcp/server-card.json",
      "authorization_server": "https://www.primitive.dev/.well-known/oauth-authorization-server",
      "protected_resource": "https://www.primitive.dev/.well-known/oauth-protected-resource/mcp",
      "app": {
        "resource": "ui://widget/primitive-email-v1.html",
        "mimeType": "text/html;profile=mcp-app",
        "openingTools": [
          "getAccount",
          "getInboxStatus",
          "listEmails",
          "searchEmails",
          "getEmail",
          "replyToEmail",
          "sendEmail"
        ],
        "publicTool": "createEmailAddress"
      },
      "toolsets": {
        "core": {
          "endpoint": "https://www.primitive.dev/mcp",
          "tools": [
            "getAccount",
            "getInboxStatus",
            "getOutboundStatus",
            "listEmails",
            "searchEmails",
            "getEmail",
            "replyToEmail",
            "sendEmail",
            "listSentEmails",
            "getSentEmail",
            "awaitReply",
            "getConversation",
            "getEmailAttachment",
            "createEmailAddress"
          ]
        },
        "full": {
          "endpoint": "https://www.primitive.dev/mcp/full",
          "tools": [
            "listDomains",
            "addDomain",
            "verifyDomain",
            "downloadDomainZoneFile",
            "getAccount",
            "getInboxStatus",
            "getOutboundStatus",
            "listEmails",
            "searchEmails",
            "getEmail",
            "replyToEmail",
            "sendEmail",
            "listSentEmails",
            "getSentEmail",
            "cancelScheduledSend",
            "awaitReply",
            "getConversation",
            "getThread",
            "getEmailAttachment",
            "downloadEmailAttachments",
            "listEndpoints",
            "createEndpoint",
            "deleteEndpoint",
            "testEndpoint",
            "listFilters",
            "createFilter",
            "deleteFilter",
            "listWebhookDeliveries",
            "replayWebhookDelivery",
            "listFunctions",
            "getFunction",
            "createFunction",
            "updateFunction",
            "redeployFunction",
            "deleteFunction",
            "testFunction",
            "getFunctionTestTrace",
            "listFunctionLogs",
            "listFunctionInvocations",
            "listWakeSchedules",
            "getWakeSchedule",
            "createWakeSchedule",
            "updateWakeSchedule",
            "deleteWakeSchedule",
            "runWakeSchedule",
            "listWakeAuthorizations",
            "createWakeAuthorization",
            "updateWakeAuthorization",
            "deleteWakeAuthorization",
            "listWakeDispatches",
            "rescheduleSend",
            "listRoutes",
            "createRoute",
            "updateRoute",
            "deleteRoute",
            "reorderRoutes",
            "simulateRoute",
            "listInteractions",
            "getInteraction",
            "listRepeatingSends",
            "getRepeatingSend",
            "updateRepeatingSend",
            "deleteRepeatingSend",
            "listContacts",
            "getContact",
            "putContact",
            "deleteContact",
            "getContactPolicy",
            "putContactPolicy",
            "setMemory",
            "getMemory",
            "deleteMemory",
            "searchMemories",
            "createEmailAddress"
          ]
        }
      },
      "app_handshake": {
        "transport": "streamable-http",
        "initialize": "POST initialize with Accept: application/json, text/event-stream and Content-Type: application/json.",
        "session": "Stateless: no mcp-session-id header is issued or expected. Each JSON-RPC POST is self-contained.",
        "after_initialize": "Call notifications/initialized. Public discovery (no auth): tools/list returns app-opening tools with _meta.ui.resourceUri / openai/outputTemplate; resources/list lists the ui:// resource ui://widget/primitive-email-v1.html; resources/read returns text/html;profile=mcp-app app HTML. With no account, call the credential-free createEmailAddress tool, then pass the api_key it returns as the api_key argument of an app-opening tool such as getInboxStatus to render the widget with no bearer.",
        "tool_calls": "tools/call requires Authorization: Bearer prim_<key> or OAuth for account-backed operations. createEmailAddress runs without a token and returns an api_key. Pass it as the api_key argument only on tools whose input schema includes that argument; every other account-backed tool needs the bearer header or OAuth.",
        "tool_listing": "tools/list on https://www.primitive.dev/mcp returns the core email tools. tools/list on https://www.primitive.dev/mcp/full returns every tool, adding domain, webhook endpoint, filter and webhook delivery management. Each endpoint runs only the tools its own tools/list returns: a call on https://www.primitive.dev/mcp to a tool only https://www.primitive.dev/mcp/full serves (listDomains, addDomain, verifyDomain, downloadDomainZoneFile, cancelScheduledSend, getThread, downloadEmailAttachments, listEndpoints, createEndpoint, deleteEndpoint, testEndpoint, listFilters, createFilter, deleteFilter, listWebhookDeliveries, replayWebhookDelivery, listFunctions, getFunction, createFunction, updateFunction, redeployFunction, deleteFunction, testFunction, getFunctionTestTrace, listFunctionLogs, listFunctionInvocations, listWakeSchedules, getWakeSchedule, createWakeSchedule, updateWakeSchedule, deleteWakeSchedule, runWakeSchedule, listWakeAuthorizations, createWakeAuthorization, updateWakeAuthorization, deleteWakeAuthorization, listWakeDispatches, rescheduleSend, listRoutes, createRoute, updateRoute, deleteRoute, reorderRoutes, simulateRoute, listInteractions, getInteraction, listRepeatingSends, getRepeatingSend, updateRepeatingSend, deleteRepeatingSend, listContacts, getContact, putContact, deleteContact, getContactPolicy, putContactPolicy, setMemory, getMemory, deleteMemory, searchMemories) returns unknown_tool, so connect to https://www.primitive.dev/mcp/full to use one. toolsets names the tools each endpoint serves."
      }
    },
    {
      "name": "dev.primitive/email/docs",
      "description": "Primitive documentation over MCP: searchDocs and readDoc plus every published docs page as a resource. Public and read-only; content is derived live from docs.primitive.dev.",
      "url": "https://www.primitive.dev/mcp/docs",
      "endpoint": "https://www.primitive.dev/mcp/docs",
      "transport": "streamable-http",
      "auth": "none",
      "role": "documentation"
    }
  ],
  "app_handshake": {
    "transport": "streamable-http",
    "initialize": "POST initialize with Accept: application/json, text/event-stream and Content-Type: application/json.",
    "session": "Stateless: no mcp-session-id header is issued or expected. Each JSON-RPC POST is self-contained.",
    "after_initialize": "Call notifications/initialized. Public discovery (no auth): tools/list returns app-opening tools with _meta.ui.resourceUri / openai/outputTemplate; resources/list lists the ui:// resource ui://widget/primitive-email-v1.html; resources/read returns text/html;profile=mcp-app app HTML. With no account, call the credential-free createEmailAddress tool, then pass the api_key it returns as the api_key argument of an app-opening tool such as getInboxStatus to render the widget with no bearer.",
    "tool_calls": "tools/call requires Authorization: Bearer prim_<key> or OAuth for account-backed operations. createEmailAddress runs without a token and returns an api_key. Pass it as the api_key argument only on tools whose input schema includes that argument; every other account-backed tool needs the bearer header or OAuth.",
    "tool_listing": "tools/list on https://www.primitive.dev/mcp returns the core email tools. tools/list on https://www.primitive.dev/mcp/full returns every tool, adding domain, webhook endpoint, filter and webhook delivery management. Each endpoint runs only the tools its own tools/list returns: a call on https://www.primitive.dev/mcp to a tool only https://www.primitive.dev/mcp/full serves (listDomains, addDomain, verifyDomain, downloadDomainZoneFile, cancelScheduledSend, getThread, downloadEmailAttachments, listEndpoints, createEndpoint, deleteEndpoint, testEndpoint, listFilters, createFilter, deleteFilter, listWebhookDeliveries, replayWebhookDelivery, listFunctions, getFunction, createFunction, updateFunction, redeployFunction, deleteFunction, testFunction, getFunctionTestTrace, listFunctionLogs, listFunctionInvocations, listWakeSchedules, getWakeSchedule, createWakeSchedule, updateWakeSchedule, deleteWakeSchedule, runWakeSchedule, listWakeAuthorizations, createWakeAuthorization, updateWakeAuthorization, deleteWakeAuthorization, listWakeDispatches, rescheduleSend, listRoutes, createRoute, updateRoute, deleteRoute, reorderRoutes, simulateRoute, listInteractions, getInteraction, listRepeatingSends, getRepeatingSend, updateRepeatingSend, deleteRepeatingSend, listContacts, getContact, putContact, deleteContact, getContactPolicy, putContactPolicy, setMemory, getMemory, deleteMemory, searchMemories) returns unknown_tool, so connect to https://www.primitive.dev/mcp/full to use one. toolsets names the tools each endpoint serves."
  },
  "mcpServers": {
    "primitive": {
      "url": "https://www.primitive.dev/mcp"
    },
    "primitive-docs": {
      "url": "https://www.primitive.dev/mcp/docs"
    }
  }
}