Two tools is the entire surface and the split between them is the point: results come back numbered so a reference to one of them survives into the next turn, and the chosen URL is then fetched as markdown rather than being reasoned about from a snippet. Filters that normally live in search-operator syntax — include_domains, exclude_domains, file_type, before and after — are ordinary parameters here, so a model can narrow its own query instead of rephrasing it.
Two tools over the Kagi Search and Kagi Extract APIs: a numbered result set, and the full content of a page as markdown.
- Web results from the Kagi Search API, numbered so a later message can refer to a result by its number
- Query scoping by time — after, before, or a relative window — and by included or excluded domains, file type and lens
- A result limit and an extract count set on the same call
- Any URL fetched and converted to markdown through the Kagi Extract API
KAGI_API_KEY for a Kagi account, and uv with a Python available (UV_PYTHON).
One command plus a key — uvx kagimcp, then supply credentials
