Unified full-text search across Claude Code / Codex / Cursor CLI / Antigravity CLI chat history
Three read-only tools with well-structured schemas and clear descriptions. All tools have proper input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (search_history, list_sessions, get_session). Descriptions are substantive (100-200 chars), explaining what, when, and how. Parameters include type info and constraints (e.g., limit capped at 100, ISO 8601 format for dates). Output schemas are TypedDict-documented in code. However, error handling guidance is minimal, no recovery hints for common failures (e.g., 'session not found'). Tool annotations (READ_ONLY) are present and correct. Missing: per-parameter validation rules in descriptions, explicit enum constraints for 'source' and 'role' parameters, and error response documentation.
Return the body of one session. Pass an id returned by search_history or list_sessions. Long conversations are truncated, so advance offset to read on.
List conversation sessions, newest first. Can be filtered by project, machine or time range.
Full-text search over past chat history, returning an excerpt around each match. Queries of 3+ characters use the full-text index; shorter ones fall back to a substring search automatically. Pass part of a project path as cwd to restrict the search to that project.
Error handling lacks recovery guidance. No descriptions of what happens when session_id is invalid, search returns zero results, or database is unavailable. LLMs cannot self-correct without actionable error messages.
'source' and 'role' parameters accept free-form strings instead of enums. Description lists valid values ('claude-code / codex / cursor-cli / antigravity-cli' and 'user / assistant / system / tool') but no enum constraint. LLMs may hallucinate invalid values.
Parameter descriptions lack explicit format/constraint details. 'since' and 'until' state 'ISO 8601' but no pattern or example. 'limit' says 'capped at 100' but no minimum stated. Descriptions should include ranges and formats inline.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Output schema documentation is code-only (TypedDict in mcp_server.py). No inline descriptions of SearchResult, SessionInfo, or Turn fields. LLMs cannot see field meanings without reading Python source.
search_history returns 'mode' field ('fts' vs 'like') and 'note' field that are implementation details. These add noise and don't help the LLM reason about results. Consider stripping or documenting their purpose.