MCP server for full-text and semantic search over Claude Code transcripts with embedding-based retrieval, session management, and LLM usage analytics
Strong foundation with 13 well-named tools, comprehensive descriptions (avg 180 chars), and complete input schemas with type definitions. All tools follow verb_noun naming (keyword_search, semantic_search, etc.). Descriptions clearly state WHAT each tool does and WHEN to use it. Parameters are typed and mostly described. However, output schemas are not documented in the source code, LLMs cannot see what fields to expect from responses. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Some parameter descriptions lack format/constraint details (e.g., date_from/date_to format unspecified).
Compares transcript files discovered on disk against what's tracked in the index, flagging anything pending re-ingest.
Environment and index health check beyond status()/coverage(): Python/dependency/sqlite-extension checks, db integrity, embedding backlog, and cost-anomaly alerts (today's spend vs 7-day average, expensive sessions). With fix=True, also attempts auto-repairs: backfill if the index is empty, drain the embedding backlog, quarantine+rebuild a corrupt db. Use this when the server is registered but searches return nothing.
Full-fidelity (untruncated) conversation context surrounding a search result -- pass a chunk_id from a search result, or a message_uuid. before/after are each capped at 100 messages.
All conversation content within a date range, without needing a keyword -- e.g. 'what did I work on last Tuesday'. limit is capped at 500.
Full untruncated dump of a single session's conversation.
LLM token usage and cost breakdown, grouped by "model" (default), "session", or "day". Answers "what did I spend today" / "which sessions were expensive". limit is capped at 500.
Output schemas not documented. LLMs cannot see what fields search results, session objects, or status responses contain. This forces agents to guess field names and risks extraction errors.
Missing tool annotations. Tools marked as READ_ONLY, WRITE, or DESTRUCTIVE in comments but not exposed via readOnlyHint/destructiveHint in schema. Agents cannot distinguish safe from risky operations.
Date parameters (date_from, date_to) lack format specification. Descriptions do not state ISO 8601 format, range constraints, or examples. LLMs may pass invalid date strings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Combined keyword + semantic search (reciprocal-rank fusion), then reranked by signal/recency by default. Default choice when you're not sure whether a literal or a meaning-based match is more likely to find what you're after. limit is capped at 500; offset pages past it.
Full-text keyword/phrase search over your Claude Code transcripts. Quote the query (e.g. '"exact phrase"') for phrase search. If a strict search finds nothing, fuzzy_fallback retries once with typo'd terms corrected against the indexed vocabulary (results carry fuzzy_corrected_query when this kicks in). limit is capped at 500; offset pages past it.
List Claude Code sessions, most recent first, optionally filtered by project (substring match) and/or date range. limit is capped at 500; offset pages past it.
Delete chunks and LLM-call records older than older_than_days (falls back to TRANSCRIPT_SEARCH_RETENTION_DAYS if unset; raises if neither is given), optionally scoped to a project. dry_run=True (the default) only reports what would be deleted -- pass dry_run=False to actually delete. Deleted content will NOT reappear on a later reindex()/backfill even if its source file is unchanged, since the ingestion cursor already passed those lines; files/sessions bookkeeping is left untouched.
Manually trigger re-indexing of transcript files, optionally scoped to a project (substring match) or a specific session_id. Goes through the same write queue as the background watcher.
Meaning-based search over your Claude Code transcripts -- finds relevant content even without literal keyword overlap. limit is capped at 500; offset pages past it.
Indexer status: files/sessions/chunks tracked, embedding coverage, last run.
No error handling guidance. Tools return dict/list but no documentation of error cases, recovery steps, or actionable error messages. Agents cannot self-correct on failures.
Destructive tool 'prune' lacks confirmation/dry-run safeguard in schema. dry_run defaults to true (safe), but no explicit confirmation pattern documented. Agents could accidentally delete data.