The Official Model Context Protocol (MCP) server for Kagi search & other tools. Python-based implementation.
Documentation
Kagi MCP Server
An MCP server backed by the Kagi API. It exposes search and extraction tools to MCP-compatible clients.
Tools
- **
kagi_search_fetch** - web, news, videos, podcasts, and image search with optional page extracts, filters, and Kagi lenses. - **
kagi_extract** - fetch a page's full content as markdown.
Note: The previous
kagi_fastgptandkagi_summarizertools have been removed. Both are planned to return in a future release.
Requirements
- A Kagi API key in
KAGI_API_KEY. - [
uv](https://docs.astral.sh/uv/) for the recommendeduvxinstall path.
Install uv:
curl -LsSf https://astral.sh/uv/install.sh | shWindows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Client Setup
Codex CLI
codex mcp add kagi --env KAGI_API_KEY= -- uvx kagimcpCodex writes MCP configuration to ~/.codex/config.toml.
Claude Desktop
Install uv first.
MacOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Then in your Claude Desktop config (found through Settings -> Developer -> Edit Config):
{
"mcpServers": {
"kagi": {
"command": "uvx",
"args": ["kagimcp"],
"env": {
"KAGI_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Claude Code
claude mcp add kagi -e KAGI_API_KEY="YOUR_API_KEY_HERE" -- uvx kagimcpSmithery
npx -y @smithery/cli install kagimcp --client claudeKiro
Add to your Kiro MCP config file (~/.kiro/settings/mcp.json for global, or .kiro/settings/mcp.json for project-scoped) using the same mcpServers JSON as Claude Desktop. See the Kiro MCP documentation for more details.
OpenCode
Edit the OpenCode configuration file in ~/.config/opencode/opencode.json and add the following:
{
"mcp": {
"kagi": {
"type": "local",
"command": ["uvx", "kagimcp"],
"enabled": true,
"environment": {
"KAGI_API_KEY": ""
}
}
}
}Usage Examples
- Search:
Who was Time's 2024 person of the year? - Extract:
extract the full content of https://en.wikipedia.org/wiki/Model_Context_Protocol
Configuration
Environment variable | Description
--- | ---
KAGI_API_KEY | Required Kagi API key.
FASTMCP_LOG_LEVEL | Logging level, for example ERROR.
KAGI_SEARCH_TIMEOUT | Search timeout in seconds. Defaults to 10.
KAGI_EXTRACT_TIMEOUT | Extract timeout in seconds. Defaults to 30.
KAGI_MAX_RETRIES | Max retry attempts after the first request. Defaults to 2; set 0 to disable retries.
KAGI_HIDDEN_PARAMS | Comma-separated search params to hide from the LLM-facing schema.
Hideable search params:
workflow, extract_count, limit, include_domains, exclude_domains, time_relative, after, before, file_type, lens_idExample:
KAGI_HIDDEN_PARAMS="extract_count,after,before,time_relative,include_domains,exclude_domains"Local Development
git clone https://github.com/kagisearch/kagimcp.git
cd kagimcp
uv syncRun locally over stdio:
KAGI_API_KEY= uv run kagimcpRun with streamable HTTP transport:
KAGI_API_KEY= uv run kagimcp --http --host 0.0.0.0 --port 8000Self-Hosting
HTTP mode is multi-tenant: each request supplies its API key via the
Authorization: Bearer header instead of a server-wide env var, so one
instance can serve multiple users. The repo ships a Dockerfile that installs a pinned kagimcp from PyPI and
runs it in HTTP mode. The container respects $PORT so it works on any
platform that injects one (Railway, Render, Cloud Run, Fly.io, etc.).
Build and run locally:
docker build -t kagimcp-hosted .
docker run --rm -p 8000:8000 kagimcp-hostedSmoke test:
curl -sL http://127.0.0.1:8000/mcp -X POST \
-H "authorization: Bearer $KAGI_API_KEY" \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'To bump the version in production, edit the pin in the Dockerfile and redeploy.
Debugging
Inspect the published package:
npx @modelcontextprotocol/inspector uvx kagimcpInspect a local checkout:
npx @modelcontextprotocol/inspector uv --directory /ABSOLUTE/PATH/TO/kagimcp run kagimcpThe inspector is usually available at http://localhost:5173.
Prerelease Instructions
If using a prerelease build, the same installation instructions apply, but use uvx --prerelease allow --from kagimcp==1.0.0rc2 kagimcp instead of uvx kagimcp (replace 1.0.0rc2 with whatever version you're wanting to install).
Similar MCP
Based on tags & features
Trending MCP
Most active this week