MCP server
kenari runs a Model Context Protocol server that gives an agent the kenari documentation, the live model list, your account figures, web search, page fetch and X search. Connect it to Claude Code, Cursor or another MCP client, and the agent can look things up and check your balance without leaving its session.
The server is at https://kenari.id/mcp. It uses the Streamable HTTP transport: the client sends a JSON-RPC 2.0 message with POST and gets one JSON response back. There is no server-initiated stream, so GET /mcp returns 405.
Connect a client
Section titled “Connect a client”The two documentation tools need no key. Add a key to use the rest. Create one under API Keys in the dashboard. See Authentication and API keys.
Claude Code
Section titled “Claude Code”claude mcp add --transport http kenari https://kenari.id/mcp \ --header "Authorization: Bearer $KENARI_API_KEY"Your shell expands $KENARI_API_KEY when you run the command, so the key is stored in Claude Code’s MCP config. Leave out --header to use the public tools only.
Cursor
Section titled “Cursor”Add the server to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:
{ "mcpServers": { "kenari": { "url": "https://kenari.id/mcp", "headers": { "Authorization": "Bearer kn-..." } } }}Other clients
Section titled “Other clients”Clients that document the mcpServers schema, such as Cursor, accept the entry above. For any other client that supports remote MCP servers over HTTP, set the URL https://kenari.id/mcp and an Authorization: Bearer $KENARI_API_KEY header in that client’s own settings.
Send your key
Section titled “Send your key”Set the key once, in the headers of the server entry. It is never a tool argument. kenari reads it from the Authorization header, with or without the Bearer prefix, or from x-api-key if your client sends that style. When both are present, Authorization wins. A request with no valid key can still call the public tools. A tool that needs a key returns an error telling you to set the header.
| Tool | Needs a key | Billed | What it does |
|---|---|---|---|
kenari_search_docs | No | No | Searches this documentation and returns the most relevant sections. |
kenari_list_models | No | No | Lists models with live prices in Rupiah per 1,000,000 tokens. |
kenari_balance | Yes | No | Returns your balance in Rupiah. Refused for a restricted key. The HTTP equivalent is Account balance. |
kenari_usage | Yes | No | Returns your usage for the last 30 days: requests, tokens and cost per model. For a restricted key, it covers only that key. The HTTP equivalent is Usage. |
kenari_quota | Yes | No | Returns your plan and coupon quota. Refused for a restricted key. The HTTP equivalent is Account quota. |
kenari_web_search | Yes | Per call | Searches the web and returns titles, URLs and snippets. |
kenari_web_fetch | Yes | Per call | Fetches one URL and returns its text. |
kenari_x_search | Yes | Per call | Searches live posts on X and returns a short answer with sources. |
Billed tools report the fee they charged at the end of the result.
Arguments
Section titled “Arguments”| Tool | Arguments |
|---|---|
kenari_search_docs | query (string, required). |
kenari_list_models | search (string, optional). Filters by model id or provider. |
kenari_web_search | query (string, required) and max_results (integer, 1 to 10, default 5, and a value outside that range is moved to the nearest limit). |
kenari_web_fetch | url (string, required). |
kenari_x_search | query (string, required) and x_search_filter (object, optional). |
kenari_balance, kenari_usage, kenari_quota | None. |
x_search_filter takes the same fields as POST /v1/x/search. allowed_x_handles and excluded_x_handles each hold at most 20 handles without the @ and cannot be used together. from_date and to_date are YYYY-MM-DD. enable_image_understanding and enable_video_understanding read the media inside posts. See Web and X search for the full table.
Billing
Section titled “Billing”The three search tools are billed per call from your account, the same as the endpoints in Web and X search. Web search and page fetch share one daily plan allowance, and kenari_x_search is billed from your balance only. A call that fails is not charged. See How billing works.
Shared API keys
Section titled “Shared API keys”A shared API key cannot access the owner’s financial information. kenari_balance, kenari_usage and kenari_quota are refused for a shared API key, because they would reveal the owner’s balance, usage and quota. The search tools still work with a shared API key, within what the share allows. Use a key from your own account to read those figures.
A restricted key, meaning one with a model restriction, a spend cap or a token cap, is refused by kenari_balance and kenari_quota. kenari_usage works but shows only that key’s own usage. See Account overview.