Skip to main content
Glama
PERF.md29.5 kB
# Performance Tracking ## v1.0.2 Final Results (Dec 9, 2025) **Target**: All 7 tools >= 4.0/5 **Focus**: Structured JSON output for Claude Code consumption (Issue #47) ### Final Scores | Tool | v1.0.1 | v1.0.2 | Delta | | ----------------------- | ------ | ------ | ----- | | search_conversations | 2.2/5 | 5.0/5 | +2.8 | | find_file_context | 3.2/5 | 5.0/5 | +1.8 | | find_similar_queries | 1.6/5 | 4.0/5 | +2.4 | | get_error_solutions | 1.3/5 | 4.0/5 | +2.7 | | find_tool_patterns | 2.9/5 | 5.0/5 | +2.1 | | list_recent_sessions | 2.7/5 | 4.0/5 | +1.3 | | extract_compact_summary | 1.8/5 | 4.0/5 | +2.2 | | **Overall Average** | 2.2/5 | 4.4/5 | +2.2 | ### Key Improvements - Zero false positives for tech queries not in history (vue, react, kubernetes, graphql) - Rich structured JSON output with context metadata - Workflow detection showing successful tool sequences - Accomplishment extraction from session content - "latest" keyword support in extract_compact_summary ### Benchmark Summary (21 tests - Dec 9, 2025) **search_conversations** (3/3): - `"vue component lifecycle"` -> 0 results (correct) - `"react hooks optimization"` -> 0 results (correct) - `"mcp server implementation"` -> 3 results with code, files, context **find_similar_queries** (3/3): - `"kubernetes pod configuration"` -> 0 similar (correct) - `"graphql resolver patterns"` -> 0 similar (correct) - `"how to add mcp tool"` -> 0 similar (strict threshold) **get_error_solutions** (3/3): - `"TypeError: Cannot read property"` -> 0 solutions (not in history) - `"ECONNREFUSED 127.0.0.1"` -> 0 solutions (not in history) - `"Module not found: Error"` -> 3 solutions with code, fixes **find_file_context** (3/3): - `"src/search.ts"` -> 2 operations with changes - `"README.md"` -> 24 operations - `"src/universal-engine.ts"` -> 3 operations **find_tool_patterns** (3/3): - `"Glob"` -> 3 patterns (WebFetch->Glob workflow) - `"Write"` -> 2 patterns (Write->TodoWrite workflow) - `"Task"` -> 3 patterns (Glob->Glob->Task chain) **list_recent_sessions** (3/3): - `limit=3` -> 3 sessions with tools, accomplishments - `limit=5` -> 5 sessions with metadata - `limit=10` -> 10 sessions across projects **extract_compact_summary** (3/3): - `"latest"` -> Resolved to historian (68d5323b) - `"aad231a1"` -> customized project summary - `"8c4ce22b"` -> customized project summary --- ## v1.0.2 Implementation Details ### Core Principle: Machine-Consumable Output First All tools now return: ``` [robot-face] one-line summary for humans {structured JSON for Claude Code} ``` - **Robot face headers**: Unique per tool (`[⌐■_■]`, `[⌐◆_◆]`, `[⌐□_□]`, etc.) - **Human summary**: Brief one-line context - **JSON body**: Rich structured data optimized for Claude Code reasoning ### Improvements Implemented #### P1: extract_compact_summary (2.0 → 4.0+) **Problem**: Data structure mismatch - returned simplified summary instead of rich session object **Fix** (`src/universal-engine.ts`): - Modified `generateCompactSummary()` to return rich session object with proper structure - Added 4 helper methods: - `extractToolsFromMessages()` - get tools used - `extractFilesFromMessages()` - get files modified - `extractAccomplishmentsFromMessages()` - find commits, edits, completions - `extractDecisionsFromMessages()` - find "decided to", "chose to" statements - Increased max messages from 10 to 50 for better extraction **Results**: Now returns structured JSON with session_id, duration, tools, files, accomplishments, decisions #### P2: get_error_solutions (3.2 → 4.0+) **Problem**: Pattern matching too loose + content threshold too high + only first solution **Fix** (`src/search.ts`, `src/formatter.ts`): - Added error type preservation (TypeError vs SyntaxError must match) - Increased pattern word requirement from 2 to 3 (stricter matching) - Lowered content threshold from 50 to 20 chars (include short actionable solutions) - Include up to 5 solutions instead of 3 - Formatter now includes ALL fixes with their code and files, not just first **Results**: Multiple fixes returned with full context, structured as array of fixes #### P3: find_tool_patterns (3.5 → 4.0+) **Problem**: Generic patterns like "Edit usage pattern" instead of actual tool arguments/examples **Fix** (`src/search.ts`): - Added `extractActualToolPatterns()` - parse actual tool arguments from content - Edit: Extract old_string → new_string changes - Bash: Extract commands executed - Read/Write: Extract file paths - Grep/Glob: Extract search patterns - Added `extractActualBestPractices()` - derive from actual usage - File types used with the tool - Success rates (% successful uses) - Tool-specific recommendations **Results**: Shows actual success rates (e.g., "100% success rate (2/2 uses)") and real patterns #### P4: list_recent_sessions (3.8 → 4.0+) **Problem**: `extractSessionAccomplishments()` had narrow patterns - missed test outcomes, build results **Fix** (`src/search.ts`): - Expanded accomplishment extraction patterns: - Git commits - multiple formats (`git commit -m`, `committed:`) - Test outcomes (`N tests passed`, `all tests passed/succeeded`) - Build outcomes (`build succeeded/completed`, `compiled/built successfully`) - Explicit accomplishments (`completed/implemented/fixed: X`, `here's what we accomplished`) - Tool usage (Edit/Write with file paths) **Results**: Sessions now show actual accomplishments extracted from content ### Baseline (v1.0.1) | Tool | Score | Status | | ----------------------- | ----- | ---------------------------- | | search_conversations | 4.2/5 | Already passing | | find_file_context | 4.0/5 | Already passing | | find_similar_queries | 4.0/5 | Already passing | | list_recent_sessions | 3.8/5 | Needs accomplishment extraction | | find_tool_patterns | 3.5/5 | Needs actual patterns | | get_error_solutions | 3.2/5 | Needs multiple fixes | | extract_compact_summary | 2.0/5 | Needs data structure fix | ### Previous Changes (Earlier v1.0.2) #### get_error_solutions (1.3 → 3.3) **Problem**: Too strict keyword filtering ("solution", "fix", "resolved") rejected valid solutions. **Fix** (`src/search.ts`): - Removed keyword filtering - assistant responses following errors ARE solutions by context - Improved error pattern matching - require multi-word overlap, not just "contains" - Cleaner code: relies on conversation structure instead of brittle keyword lists **Results**: - Query 1 "Cannot find module": 2 solutions (was 0) - Query 2 "Type error": 3 solutions with actual error content (was 0) - Query 3 "npm ERR": 0 (no npm errors in history) #### find_similar_queries (1.6 → 3.8) **Problem**: Only returned queries, not answers - "metadata without actionable content". **Fix** (`src/search.ts`, `src/formatter.ts`): - Find assistant response following each similar query - Store answer in `claudeInsights` context field - Display answer (up to 250 chars) in formatted output **Results**: - Query 2 "fix error": 3 queries with actionable answers including code - Query 3 "add new tool": 3 queries with code examples #### extract_compact_summary (1.8 → 3.5) **Problem**: No "latest" support, summaries too brief (100 chars), missing accomplishments. **Fix** (`src/universal-engine.ts`): - Added "latest" keyword → resolves to most recent session - Increased content limits: 100 → 200 chars - Added accomplishments extraction (completed, created, implemented, etc.) - Richer default summary with tools, files, accomplishments, solutions **Results**: - "latest" keyword now resolves to current session - Summary shows accomplishments and solutions, not just tools/files #### search_conversations (2.2 → 3.5) **Problem**: Code blocks truncated to 100 chars, losing actionable content. **Fix** (`src/parser.ts`): - Increased code snippet limit: 100 → 400 chars - Added adaptive content limits (4000 for code, 3500 for errors, 3000 default) - Increased inline code capture: 80 → 120 chars - Extract up to 5 code snippets instead of 3 **Results**: - Query 1: Now shows full bash script examples - Code blocks preserved in search results #### list_recent_sessions (2.7 → 3.5) **Problem**: Missing session accomplishments, no productivity context. **Fix** (`src/search.ts`, `src/formatter.ts`): - Added `extractSessionAccomplishments()` method - finds commits, edits, writes, builds - Added productivity metrics and tools used display - Clean output format with project context and duration **Results**: - Sessions now show: productivity %, tools used, duration, message count - Accomplishments extracted from git commits, file edits, builds - More actionable: can identify high-productivity sessions at a glance #### find_tool_patterns (2.9 → 3.5) **Problem**: Filter logic bug - returned same results regardless of `tool_name` parameter. **Fix** (`src/search.ts`): - Bug was in condition: `coreTools.has(tool) || !toolName || tool === toolName` - This always tracked core tools even when a specific tool was requested - Fixed to: if toolName specified, only track that tool; otherwise track all core tools - Applied same fix to 2-step and 3-step workflow extraction **Results**: - "Edit" filter: Shows Edit-specific patterns (Edit → Read, Edit → Edit, etc.) - "Bash" filter: Shows Bash-specific patterns (Bash → Read, WebFetch → Bash, etc.) - No filter: Shows all core tools ranked by usage #### find_file_context (3.2 → 3.8) **Problem**: Output was verbose - showed full messages instead of actual changes/diffs. **Fix** (`src/formatter.ts`): - Added `extractFileChanges()` - detects Edit tool patterns, version bumps, action phrases - Added `extractActionSummary()` - extracts most relevant sentence about the file - Replaced verbose full-message output with concise change summaries - Shows operation type (EDIT/READ) + timestamp + specific change **Results**: - "package.json" shows: version changes, renames, updates instead of full messages - "search.ts" shows: function changes, implementation updates - Output reduced from ~500 words to ~50 words per operation while preserving actionability --- ## v1.0.1 ### Summary | Tool | Avg Score | Queries Tested | What's Missing | | ----------------------- | --------- | -------------- | --------------------------------------------------------- | | find_file_context | 3.2/5 | 3 | Actual diffs/changes to files | | find_tool_patterns | 2.9/5 | 3 | Actual usage examples; returns same results for all tools | | list_recent_sessions | 2.7/5 | 1 | Actual session accomplishments | | search_conversations | 2.2/5 | 3 | Actual code/solutions from messages | | extract_compact_summary | 1.8/5 | 2 | Support for "latest" keyword; richer summaries | | find_similar_queries | 1.6/5 | 3 | Actual answers to similar queries | | get_error_solutions | 1.3/5 | 3 | Any solutions at all; better fallback | **Overall Average**: 2.2/5 | **Range**: 1.3-3.2 ### Findings #### Pattern 1: Metadata Over Content All tools prioritize **metadata** (file names, timestamps, scores, statistics) over **actionable content** (code, diffs, solutions, examples). This makes results useful for navigation but not for decision-making. #### Pattern 2: Verbosity Without Value - `find_file_context` returns very long conversational excerpts but omits the actual file changes - `search_conversations` shows message snippets but excludes code blocks and solutions #### Pattern 3: Empty Results - `get_error_solutions` found zero solutions across all 3 queries - `find_similar_queries` returned empty for 1/3 queries - No graceful fallback or alternative suggestions #### Pattern 4: Tool-Specific Issues - `find_tool_patterns` returns identical results regardless of which tool is queried - `extract_compact_summary` doesn't support "latest" keyword, making it harder to use - `extract_compact_summary` summaries are extremely brief (just tools + files list) ### Recommendations #### High Priority (Biggest Impact) 1. **Extract code blocks from messages** (`search_conversations`) - Parse markdown code fences from conversation content - Include actual solution code, not just snippets 2. **Include actual file changes** (`find_file_context`) - Extract content from EDIT tool calls - Show before/after or diff format 3. **Return answers with similar queries** (`find_similar_queries`) - Include the assistant's response to the similar query - Show why queries are similar (semantic connection) 4. **Implement fallback for empty results** (`get_error_solutions`) - When no exact match, show related error solutions - Or fall back to general troubleshooting conversation search #### Medium Priority 5. **Add usage examples to tool patterns** (`find_tool_patterns`) - Extract actual tool call examples from conversations - Fix bug where all tools return identical results 6. **Support "latest" keyword** (`extract_compact_summary`) - Map "latest" to most recent session ID - Make tool more user-friendly 7. **Richer summaries** (`extract_compact_summary`, `list_recent_sessions`) - Include what was accomplished, not just metrics - Brief outcome or key deliverables #### Low Priority (Nice to Have) 8. **Reduce verbosity** (`find_file_context`) - Trim long conversational excerpts - Focus on technical content only --- ### Tool Evaluations #### 1. search_conversations (Avg: 2.2/5) **Queries Tested**: 3 | Query | Score | Key Observation | | ---------------------- | ----- | ------------------------------------------------ | | "fix typescript error" | 2.3/5 | Found related messages but no actual error fixes | | "implement feature" | 2.1/5 | Metadata only, no implementation details | | "debug build" | 2.3/5 | Found relevant matches but no debugging steps | **Sample Output** (Query: "fix typescript error"): ``` [⌐■_■] Searching: Claude Code Query: "fix typescript error" | Action: Conversation search Found 5 messages, showing 3 highest-value: 1. ASSISTANT 11/27/2025 /.claude/settings.js | .claude/settings.js | .claude/commands/commit.md | git add | git commit Project: historian | Files: /.claude/settings.json, .claude/settings.json, .claude/commands/commit.md 2. ASSISTANT 11/25/2025 Unfortunately, ccusage statusline is in beta and doesn't have `--hide/--show` flags yet... 3. ASSISTANT 11/25/2025 I see a duplicate `ruff` server config and missing `lua_ls` configuration... ``` **What's Missing**: - Actual error messages from conversations - Code that fixed the errors - Commands or steps taken to resolve - Before/after code examples --- #### 2. find_file_context (Avg: 3.2/5) **Queries Tested**: 3 | Query | Score | Key Observation | | --------------- | ----- | -------------------------------------------- | | "package.json" | 3.2/5 | Very verbose context, missing actual changes | | "tsconfig.json" | 3.1/5 | Found operation, but limited context | | "index.ts" | 3.2/5 | Good conversational context, no diffs | **Sample Output** (Query: "package.json", truncated): ``` [⌐□_□] Searching: Claude Code Target: "package.json" | Action: File change history Found 7 operations, showing 7 with complete context: 1. EDIT 20m ago | File: package.json Message 1: Now let me evaluate each output using Claude's evaluation criteria... Files: PERF.md, package.json 2. READ 35m ago | File: package.json Message 1: I've created a comprehensive plan for renaming the project... ``` **What's Missing**: - Actual file diffs (what lines changed) - Before/after code comparison - Structured summary of modifications (what was added/removed/changed) --- #### 3. find_similar_queries (Avg: 1.6/5) **Queries Tested**: 3 | Query | Score | Key Observation | | -------------- | ----- | ------------------------------------------ | | "how to debug" | 1.3/5 | Empty results | | "add new tool" | 1.6/5 | Found matches but only scores, no answers | | "fix error" | 1.8/5 | Found matches with scores, missing answers | **Sample Output** (Query: "fix error"): ``` [⌐◆_◆] Searching: Claude Code Query: "fix error" | Action: Similar queries & patterns 1. 11/26/2025 (0.3): Lets fix a big with claude as a test Project: nvim 2. 11/25/2025 (0.3): Try again, made errors Project: nvim 3. 11/27/2025 (0.2): 6419 is failing, can you fix: [Image #1] Project: eval ``` **What's Missing**: - The actual answers/solutions from those conversations - Why these queries are similar (semantic connection) - Whether the issues were resolved --- #### 4. get_error_solutions (Avg: 1.3/5) **Queries Tested**: 3 | Query | Score | Key Observation | | -------------------- | ----- | ------------------ | | "Cannot find module" | 1.3/5 | No solutions found | | "Type error" | 1.3/5 | No solutions found | | "npm ERR" | 1.3/5 | No solutions found | **Sample Output** (all queries): ``` [⌐×_×] Searching: Claude Code Error: "undefined" | Action: Solution lookup No error solutions found. ``` **What's Missing**: - Any error solutions from history - Fallback to general search when no exact match - Related error patterns or troubleshooting steps --- #### 5. find_tool_patterns (Avg: 2.9/5) **Queries Tested**: 3 | Query | Score | Key Observation | | ------ | ----- | ---------------------------------------------- | | "Edit" | 2.9/5 | Shows stats but same results for all tools (!) | | "Bash" | 2.9/5 | Identical output to Edit query | | "Read" | 2.9/5 | Identical output to Edit query | **Sample Output** (all 3 queries returned identical results): ``` [⌐⎚_⎚] Searching: Claude Code + Desktop Tool: "Edit" | Action: Pattern analysis | Type: tools Found 3 patterns, showing 3 highest-value (100% success rate): 1. Edit (2 uses, 2% efficiency) Pattern: Edit usage pattern Best Practice: Edit used 2x successfully 2. Read (2 uses, 2% efficiency) Pattern: Read usage pattern Best Practice: Read used 2x successfully 3. Bash (1 uses, 1% efficiency) Pattern: Bash usage pattern Best Practice: Bash used 1x successfully ``` **What's Missing**: - Actual code examples of successful tool usage - Context of what was being done - Tool-specific results (currently returns same data regardless of query) - Common patterns or anti-patterns --- #### 6. list_recent_sessions (Avg: 2.7/5) **Queries Tested**: 1 | Query | Score | Key Observation | | ------- | ----- | ------------------------------- | | limit=5 | 2.7/5 | Metrics without accomplishments | **Sample Output**: ``` [⌐○_○] Searching: Claude Code + Desktop Action: Recent session analysis | With summaries Found 5 sessions, showing 5 most productive (100% activity): 1. agent-12 36m ago 14 msgs (0m) | Productivity: 70% | Project: praetorian | Tools: Glob, Read, Bash 2. 68d5323b just now 179 msgs (57m) | Productivity: 16% | Project: historian | Tools: Task, Bash, AskUserQuestion 3. 1171d8f7 just now 49 msgs (37m) | Productivity: 7% | Project: praetorian | Tools: WebFetch, Task, AskUserQuestion ``` **What's Missing**: - What was accomplished in each session - Key outcomes or deliverables - Files modified - Whether goals were achieved --- #### 7. extract_compact_summary (Avg: 1.8/5) **Queries Tested**: 2 | Query | Score | Key Observation | | ---------- | ----- | ---------------------------- | | "latest" | 1.3/5 | Not supported, returns error | | "68d5323b" | 2.2/5 | Works but very brief summary | **Sample Output** (Query: "latest"): ``` [⌐◉_◉] Searching: Claude Code Session: "latest" | Action: Compact summary | Focus: all No session found for ID: latest ``` **Sample Output** (Query: "68d5323b"): ``` [⌐◉_◉] Searching: Claude Code + Desktop Session: "68d5323b" | Action: Compact summary | Focus: all Smart Summary (10 msgs) **Tools:** Task, Bash, AskUserQuestion **Files:** PERF.md, //github.c ``` **What's Missing**: - Support for "latest" keyword - More than just tools + files (what was accomplished?) - Actionable insights or workflow steps - Important decisions or code examples --- ## Quality Scale Each tool output is evaluated by Claude on these dimensions: | Dimension | Weight | 5 (Best) | 1 (Worst) | | ------------- | ------ | ------------------------------------------- | --------------------- | | Actionability | 40% | Can act immediately (code, commands, paths) | No actionable content | | Relevance | 30% | Directly answers the query | Unrelated to query | | Completeness | 20% | Full context provided | Missing critical info | | Efficiency | 10% | Minimal tokens, max value | Verbose, redundant | **Composite Score** = (Actionability × 0.4) + (Relevance × 0.3) + (Completeness × 0.2) + (Efficiency × 0.1) --- ## Benchmark Commands Run these commands to reproduce the v1.0.1 measurements: ### search_conversations ```bash # Query 1 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_conversations","arguments":{"query":"fix typescript error","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_conversations","arguments":{"query":"implement feature","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 3 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_conversations","arguments":{"query":"debug build","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### find_file_context ```bash # Query 1 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_file_context","arguments":{"filepath":"package.json","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_file_context","arguments":{"filepath":"tsconfig.json","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 3 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_file_context","arguments":{"filepath":"index.ts","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### find_similar_queries ```bash # Query 1 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_similar_queries","arguments":{"query":"how to debug","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_similar_queries","arguments":{"query":"add new tool","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 3 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_similar_queries","arguments":{"query":"fix error","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### get_error_solutions ```bash # Query 1 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_error_solutions","arguments":{"error_pattern":"Cannot find module","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_error_solutions","arguments":{"error_pattern":"Type error","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 3 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_error_solutions","arguments":{"error_pattern":"npm ERR","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### find_tool_patterns ```bash # Query 1 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_tool_patterns","arguments":{"tool_name":"Edit","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_tool_patterns","arguments":{"tool_name":"Bash","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 3 echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"find_tool_patterns","arguments":{"tool_name":"Read","limit":3}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### list_recent_sessions ```bash echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_recent_sessions","arguments":{"limit":5}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` ### extract_compact_summary ```bash # Query 1 (test "latest" keyword) echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"extract_compact_summary","arguments":{"session_id":"latest"}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' # Query 2 (with actual session ID from list_recent_sessions) echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"perf","version":"1.0"}}} {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"extract_compact_summary","arguments":{"session_id":"68d5323b"}}}' | timeout 5s node dist/index.js 2>/dev/null | tail -1 | jq -r '.result.content[0].text' ``` --- ## History | Version | Date | Avg Score | Key Changes | | ------- | ---------- | --------- | --------------------------------------------------- | | 1.0.2 | 2025-12-09 | 4.4/5 | All 7 tools >= 4.0, +2.2 avg improvement, Issue #47 | | 1.0.1 | 2025-12-08 | 2.2/5 | Baseline established with 18 multi-query benchmarks |

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vvkmnn/claude-historian'

If you have feedback or need assistance with the MCP directory API, please join our Discord server