Skip to content
MCP server

Setup

The Kirimdev MCP server is a standard remote MCP server at https://api.kirimdev.com/mcp, speaking the Streamable HTTP transport defined by the MCP spec. That means any MCP-compatible client can connect to it — Claude, OpenCode, Cursor, VSCode, Cline, Zed, Continue, MCP Inspector, etc.

There are two ways to authenticate:

  • OAuth sign-in — paste the URL, sign in to Kirimdev in your browser, pick an organization and approve the permissions. No key to copy. See Sign in with OAuth.
  • API key — send the same Bearer API key you use for the REST API in an Authorization header. Works with every client, including scripts and clients without OAuth support. The client tabs below use this.
  • An owner or admin role in the organization (OAuth), or a Kirimdev API key (kdv_live_...) from Settings → API Keys.
  • At least one connected WhatsApp Business number.
  • The client of your choice installed (links in each tab below).

Kirimdev implements the MCP authorization spec (revision 2026-07-28): the server publishes protected resource metadata, clients identify themselves with an OAuth Client ID Metadata Document, and access tokens are bound to https://api.kirimdev.com/mcp.

  1. Add https://api.kirimdev.com/mcp to your client without any Authorization header. The client receives a 401 pointing at the metadata above and opens your browser.

  2. Sign in to Kirimdev (email or Google). Already signed in to the dashboard? This step is skipped.

  3. Pick an organization if you own or administer more than one. Each connection reaches exactly one organization; connect again to use another.

  4. Choose the permissions. Each one is a checkbox on the consent page:

    ScopeLets the clientDefault
    mcp:readRead conversations, messages, contacts, labels and templatesAlways on
    mcp:writeCreate and update contacts, labels, templates and customers; mark messages as readOn, can be unticked
    mcp:sendSend WhatsApp messages (send_message)Off, tick to allow

    A tool outside the approved scopes returns 403 insufficient_scope; clients that support step-up authorization ask you again for the missing scope.

  1. Open the Claude Desktop config file.

    Terminal window
    open ~/Library/Application\ Support/Claude/claude_desktop_config.json

    If the file doesn’t exist, create it with {} as its content.

  2. Add the Kirimdev MCP server entry.

    Paste the following into the JSON (merge with any existing mcpServers block):

    claude_desktop_config.json
    {
    "mcpServers": {
    "kirimdev": {
    "command": "npx",
    "args": [
    "-y",
    "mcp-remote",
    "https://api.kirimdev.com/mcp",
    "--header",
    "Authorization:Bearer ${KIRIM_API_KEY}"
    ],
    "env": {
    "KIRIM_API_KEY": "kdv_live_REPLACE_ME"
    }
    }
    }
    }

    Replace kdv_live_REPLACE_ME with your actual API key.

  3. Restart Claude Desktop.

    Fully quit Claude (not just close the window) and reopen it. The config is read only at startup.

  4. Verify the connection.

    In the Claude chat input, look for the 🔌 MCP icon at the bottom-left. Click it — you should see kirimdev listed with 11 tools available.

In any of the clients above, send a chat message like:

“List the WhatsApp phone numbers connected to my Kirimdev account.”

The model will call list_phone_numbers and read back the numbers and their phone_number_ids. From there you can ask it to send messages, browse conversations, look up contacts, and so on — all in natural language.

Head over to Prompting the AI for a cookbook of phrases that work well (in Indonesian and English) for each kind of task.

The client doesn’t show the kirimdev server

Section titled “The client doesn’t show the kirimdev server”
  • Confirm the JSON file parses — paste it into jsonlint.com. A misplaced comma silently disables every server.
  • For Claude Desktop: check npx is on PATH (npx -y mcp-remote --help). Install Node.js from nodejs.org if missing.
  • For OpenCode / Cursor: confirm KIRIM_API_KEY is actually set in the shell that launched the client — echo $KIRIM_API_KEY (or $env:KIRIM_API_KEY on PowerShell) should print the key.
  • Fully quit the client (not just close the window) before reopening — menu-bar / tray processes hold the old config.
  • Verify the key in the dashboard is Active (not revoked or expired).
  • Check there are no quotes or whitespace inside kdv_live_.... The format is Bearer kdv_live_<26-base32-chars>.
  • For Claude Desktop: the --header value must be exactly Authorization:Bearer ${KIRIM_API_KEY} with no space after Authorization:. mcp-remote parses on the first colon.
  • For OpenCode with an API key: make sure "oauth": false is set. Without it, OpenCode sees the 401 and starts the OAuth flow instead of trusting your bearer header.
  • “No organization you can connect” — your role is agent in every organization. Ask an owner to connect the client or to make you an admin.
  • The client reports a registration error — it only supports Dynamic Client Registration. Use an API key for that client.
  • The connection stopped working — your role changed, you were removed from the organization, or the connection was revoked. Connect again.
  • send_message returns 403 insufficient_scope — mcp:send was not ticked on the consent page. Reconnect and tick Send WhatsApp messages.

The MCP tool error response carries the same code / message / request_id envelope as the REST API. Common ones:

  • whatsapp_number_not_verified — the phone_number_id you passed exists but isn’t connected. Reconnect from the dashboard.
  • resource_not_found — wrong phone_number_id, or the conversation_id / contact_id belongs to a different organization.
  • rate_limit_exceeded — you’re past the per-minute budget. The response includes a Retry-After-equivalent timestamp.

Claude.ai (web) and other OAuth-only clients

Section titled “Claude.ai (web) and other OAuth-only clients”

Web clients such as the Claude.ai Custom connector dialog accept only OAuth. Add https://api.kirimdev.com/mcp as the connector URL and follow Sign in with OAuth. If the dialog reports a client registration error, that client relies on Dynamic Client Registration, which Kirimdev does not offer — use Claude Desktop with an API key instead. Both share the same model and tool semantics.

The Kirimdev MCP endpoint is a standard Streamable HTTP server — any client that speaks the spec works. Quick pointers for clients we haven’t tested end-to-end but that follow the same pattern:

  • VSCode (with the GitHub Copilot MCP extension) — workspace .vscode/mcp.json, same mcpServers shape as Cursor, but the url field is "http" typed; consult the official VSCode MCP docs.
  • Cline / Continue / Zed — each ships its own settings file with a mcpServers (or equivalent) object accepting url + headers.
  • MCP Inspector (for debugging) — run npx @modelcontextprotocol/inspector and configure a custom server pointing at https://api.kirimdev.com/mcp with the bearer header. This is the fastest way to confirm the server is healthy if a client misbehaves.

For ChatGPT, the “Custom GPT” Actions feature consumes our OpenAPI spec directly — MCP isn’t required for that flow.

  • Prompting the AI — what to actually say to the assistant once it’s connected. Cookbook of phrases for sending, browsing, searching, and multi-step workflows.
  • Available Tools — full schema for each of the 6 tools.
  • MCP Overview — what the server does, what it doesn’t expose.
  • Errors — error codes shared with the REST API.