Developers

MCP server

The Model Context Protocol (MCP) lets an AI assistant use outside tools. Missionary Lane's MCP server gives an assistant such as Claude the same abilities as the REST API: it can look up your missionaries, post an announcement, add a newsletter or summarize giving, within the scopes of the key you give it.

On this page

Connection details #

URLhttps://missionarylane.org/mcp
TransportStreamable HTTP. Every request is a POST and gets a JSON reply; there are no sessions or event streams.
AuthenticationAuthorization: Bearer ml_live_…, an API key for your church
Protocol versions2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05
  • The assistant sees only the tools its key's scopes allow. A key with just gallery:read and missionaries:read can look things up but can't change anything.
  • Requests count toward the same rate limit as the REST API: 120 a minute per key by default.
  • Restricted missionaries appear by their public alias only, as in the gallery.
  • Give each assistant its own key, so you can revoke one without affecting the others.

Claude Desktop #

Claude Desktop starts local MCP servers from its config file, so this setup uses the mcp-remote helper to reach the Missionary Lane server. It needs Node.js installed.

  1. In Claude Desktop, open Settings → Developer and choose Edit Config. This opens claude_desktop_config.json.
  2. Add the missionary-lane entry below inside mcpServers, with your key after Bearer.
  3. Save the file and restart Claude Desktop.
{
  "mcpServers": {
    "missionary-lane": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://missionarylane.org/mcp",
               "--header", "Authorization:${ML_AUTH}"],
      "env": { "ML_AUTH": "Bearer ml_live_YOUR_KEY" }
    }
  }
}

The header is passed through an environment variable, with no space after the colon, because some systems split arguments on spaces.

Claude Code #

Add the server from a terminal:

claude mcp add --transport http missionary-lane https://missionarylane.org/mcp \
  --header "Authorization: Bearer ml_live_YOUR_KEY"

Or share it with a project in .mcp.json, reading the key from an environment variable so it isn't committed:

{
  "mcpServers": {
    "missionary-lane": {
      "type": "http",
      "url": "https://missionarylane.org/mcp",
      "headers": { "Authorization": "Bearer ${ML_API_KEY}" }
    }
  }
}

Other MCP clients #

Any client that supports Streamable HTTP with a custom header can connect: point it at https://missionarylane.org/mcp and add the Authorization header. To try the server by hand:

curl https://missionarylane.org/mcp \
  -H "Authorization: Bearer $ML_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Browser-based clients must run on an origin the server allows; server-side clients send no origin and aren't affected.

Tools #

Each tool runs the same operation as a REST endpoint, with the same scopes, checks and privacy rules. This list is read from mcp-tools.json; connected clients also list the tools themselves.

Loading the tools…

Good practice #

  • Start with read-only scopes. Add write scopes only when you want the assistant to make changes.
  • Assistants can make mistakes. Check what they post before it goes in front of your congregation, and review the gallery after any change.
  • Don't give an assistant giving scopes unless the person using it has Finance in your church.