Kagi MCP server providing access to Kagi Search and Extract APIs
Kagi MCP presents a single, well-engineered search tool with comprehensive parameter documentation and clear descriptions. The tool follows strong naming conventions ('kagi_search_fetch' is action-verb, domain-specific), has a detailed description that explains when to use it, and exposes an exceptionally rich parameter schema with proper typing, constraints, and per-parameter descriptions. All parameters include clear documentation of format, constraints, and usage context. Output structure is implicit in the implementation but not explicitly documented. No significant composition issues exist (single tool, read-only safety). Schema completeness is excellent, every parameter has type, constraints (min/max/enum), and descriptive text. Error handling is present in the code (proper exception handling, trace suffix formatting) but error guidance text is not explicitly documented in tool descriptions. No security issues detected, API key is handled server-side via Authorization header, not exposed as a parameter.
Fetch web results for a query using the Kagi Search API. Use for general search and when the user explicitly tells you to 'fetch' results/information. Results are numbered so that a user may refer to a result by a specific number.
Output schema not explicitly documented. The tool description and schema define inputs well but do not describe the structure of returned results (result array format, fields per result, pagination structure).
Error guidance not included in tool description. While the code handles errors gracefully (ApiException handling, trace formatting), the tool description does not advise the LLM on recovery actions (e.g., 'If no results, try a broader query' or 'API timeouts indicate high load; retry with smaller limit').
Parameter relationship documentation could be clearer. The 'lens_id' parameter is documented as mutually exclusive with 'include_domains', 'exclude_domains', 'time_relative', and 'file_type', but this constraint is buried in the lens_id description rather than prominently stated. LLMs may miss this and pass conflicting parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | A | 86 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |