kagi-mcp
Rust MCP stdio server built on top of kagi-sdk.
Scope (v1)
- Transport: stdio only
- Tools: exactly two
kagi_searchkagi_summarize
- Prompts: none
- Resources: none
Both tools are annotated as read-only and idempotent.
Backend selection
kagi-mcp selects one backend at startup and keeps it fixed for the process lifetime.
| Env | Values | Default | Behavior |
|---|---|---|---|
KAGI_MCP_BACKEND |
auto, official, session |
auto |
Chooses which Kagi surface is used |
Credentials:
KAGI_API_KEY(official API / bot-token flow)KAGI_SESSION_TOKEN(session-web flow)
Resolution rules:
auto: preferKAGI_API_KEY; if missing, useKAGI_SESSION_TOKEN; if both missing, startup failsofficial: require validKAGI_API_KEYsession: require validKAGI_SESSION_TOKEN
No mid-call fallback is performed.
Tool contracts
kagi_search
Input:
query(required, trimmed, non-blank)limit(optional, default5, min1, max10)
Output:
results: array of{ title, url, snippet? }total_returned
kagi_summarize
Input (xor):
urlortext(exactly one)urlmust be absolute HTTP(S)textpreserves caller whitespace and must be<= 50_000UTF-8 bytes
Output:
markdown- optional
text - optional
source_url
Unknown input fields are rejected.
Run
# auto mode (preferred: API key)
KAGI_API_KEY=...
# force session mode
KAGI_MCP_BACKEND=session KAGI_SESSION_TOKEN=...
Development
From workspace root:
CI/CD note
In v1, live integration coverage is SDK-only. MCP live integration tests are intentionally deferred to v2.