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. — using the same Bearer API key you already use for
the REST API.
This page covers the three clients we test against. The pattern is the
same everywhere: point your client at the URL, send the API key in an
Authorization header, restart, and start prompting.
Prerequisites
Section titled “Prerequisites”- A Kirimdev API key (
kdv_live_...). Generate one from the dashboard under Settings → API Keys. - At least one connected WhatsApp Business number.
- The client of your choice installed (links in each tab below).
Configure your client
Section titled “Configure your client”-
Open the Claude Desktop config file.
Terminal window open ~/Library/Application\ Support/Claude/claude_desktop_config.jsonIf the file doesn’t exist, create it with
{}as its content.Terminal window notepad $env:APPDATA\Claude\claude_desktop_config.jsonIf the file doesn’t exist, create it with
{}as its content.Terminal window ${EDITOR:-nano} ~/.config/Claude/claude_desktop_config.json -
Add the Kirimdev MCP server entry.
Paste the following into the JSON (merge with any existing
mcpServersblock):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_MEwith your actual API key. -
Restart Claude Desktop.
Fully quit Claude (not just close the window) and reopen it. The config is read only at startup.
-
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.
OpenCode supports remote MCP servers natively — no bridge needed.
-
Open your OpenCode config.
Edit either the global config (
~/.config/opencode/opencode.json) or a project-local one (opencode.jsonat the repo root). The project config wins when both exist. -
Add the Kirimdev MCP server entry.
opencode.json {"$schema": "https://opencode.ai/config.json","mcp": {"kirimdev": {"type": "remote","url": "https://api.kirimdev.com/mcp","enabled": true,"oauth": false,"headers": {"Authorization": "Bearer ${env:KIRIM_API_KEY}"}}}}Then export the API key in the shell that launches OpenCode:
Terminal window export KIRIM_API_KEY="kdv_live_REPLACE_ME"Add it to
~/.zshrc/~/.bashrcto make it persistent.Terminal window [Environment]::SetEnvironmentVariable("KIRIM_API_KEY", "kdv_live_REPLACE_ME", "User")Restart your terminal after running this.
-
Restart OpenCode so it picks up the new config.
-
Verify the connection.
Run
opencode mcp list— you should seekirimdevlisted as connected with 11 tools. Or just open the TUI and type a prompt that uses the tools (see Try it below).
Cursor supports remote MCP servers via mcp.json — no bridge needed.
-
Create or open the Cursor MCP config.
- Global (every project):
~/.cursor/mcp.json - Project (this repo only):
.cursor/mcp.jsonat the project root
If the file doesn’t exist, create it with
{}as its content. - Global (every project):
-
Add the Kirimdev MCP server entry.
.cursor/mcp.json {"mcpServers": {"kirimdev": {"url": "https://api.kirimdev.com/mcp","headers": {"Authorization": "Bearer ${env:KIRIM_API_KEY}"}}}}Then set the
KIRIM_API_KEYenvironment variable in your shell profile (~/.zshrc,~/.bashrc, or Windows User env vars). Cursor interpolates${env:KIRIM_API_KEY}from the environment of the process that launched it — make sure Cursor is opened from a terminal where the variable is set, or set it system-wide. -
Reload Cursor.
Open the Command Palette (
Cmd+Shift+P/Ctrl+Shift+P) → Developer: Reload Window, or restart the app. -
Verify the connection.
Open Settings → Tools & MCP (or Features → Model Context Protocol on older builds). The
kirimdevserver should appear as connected, with 11 tools listed. Toggle them on if any default to off.
Try it
Section titled “Try it”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.
Security tips
Section titled “Security tips”Troubleshooting
Section titled “Troubleshooting”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
npxis on PATH (npx -y mcp-remote --help). Install Node.js from nodejs.org if missing. - For OpenCode / Cursor: confirm
KIRIM_API_KEYis actually set in the shell that launched the client —echo $KIRIM_API_KEY(or$env:KIRIM_API_KEYon PowerShell) should print the key. - Fully quit the client (not just close the window) before reopening — menu-bar / tray processes hold the old config.
”Invalid API key” or 401 errors
Section titled “”Invalid API key” or 401 errors”- Verify the key in the dashboard is
Active(not revoked or expired). - Check there are no quotes or whitespace inside
kdv_live_.... The format isBearer kdv_live_<26-base32-chars>. - For Claude Desktop: the
--headervalue must be exactlyAuthorization:Bearer ${KIRIM_API_KEY}with no space afterAuthorization:.mcp-remoteparses on the first colon. - For OpenCode: make sure
"oauth": falseis set. Without it, OpenCode sees the 401 and tries to start an OAuth flow instead of trusting your bearer header.
Tools call but every one returns an error
Section titled “Tools call but every one returns an error”The MCP tool error response carries the same code / message /
request_id envelope as the REST API. Common
ones:
whatsapp_number_not_verified— thephone_number_idyou passed exists but isn’tconnected. Reconnect from the dashboard.resource_not_found— wrongphone_number_id, or theconversation_id/contact_idbelongs to a different organization.rate_limit_exceeded— you’re past the per-minute budget. The response includes aRetry-After-equivalent timestamp.
Claude.ai (web) — not supported yet
Section titled “Claude.ai (web) — not supported yet”The Custom connector dialog in Claude.ai web only accepts OAuth credentials. Kirimdev’s MCP currently authenticates via Bearer API keys only, so the web UI flow cannot complete. We’re tracking demand for adding OAuth 2.1 with Dynamic Client Registration (RFC 7591) — if you need this for your team, let us know.
In the meantime, use Claude Desktop for production assistant use cases. The two products share the same model and tool semantics; only the UI shell differs.
Other MCP clients
Section titled “Other MCP clients”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, samemcpServersshape as Cursor, but theurlfield is"http"typed; consult the official VSCode MCP docs. - Cline / Continue / Zed — each ships its own settings file with a
mcpServers(or equivalent) object acceptingurl+headers. - MCP Inspector (for debugging) — run
npx @modelcontextprotocol/inspectorand configure a custom server pointing athttps://api.kirimdev.com/mcpwith 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.
Where to next
Section titled “Where to next”- 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.