Skip to main content
Glama
jhammant
by jhammant

Claude History MCP

An MCP server that makes your Claude Code conversation history searchable and proactively useful. Indexes all past sessions with hybrid BM25 + TF-IDF search, extracts knowledge (decisions, solutions, error fixes), and auto-injects project context at session start.

What it does

Claude Code stores full conversation transcripts as JSONL files in ~/.claude/projects/. This MCP server indexes them and provides 6 tools:

Tool

Purpose

search_history

Full-text search across all conversations with filter syntax

find_solutions

Find how you fixed errors/problems before

get_session_summary

Structured summary of any session

list_projects

List all projects with session counts and dates

find_patterns

Discover recurring topics, workflows, and issues

get_project_context

Full project context (recent sessions, decisions, knowledge)

cloud_sync_push

Push knowledge and sessions to cloud server

cloud_sync_pull

Pull knowledge and sessions from cloud server

cloud_sync_status

Check cloud sync configuration and connection

Key features

  • Hybrid search: BM25 (keyword precision) + TF-IDF (semantic recall) fused with Reciprocal Rank Fusion

  • Filter syntax: project:name, before:7d, after:2024-01-15, tool:Bash

  • Knowledge extraction: Automatically extracts decisions, solutions, and error→fix patterns from conversations

  • Proactive context: Session-start hook injects relevant project history into new sessions

  • Incremental indexing: File watcher detects new/changed sessions and re-indexes automatically

  • Fast: Index build ~9s for 170 sessions, searches <200ms

Related MCP server: MemoCall

How it works

┌──────────────────────────────────────────────────────┐
│                  ClaudeHistoryMCP                     │
├──────────────┬───────────────┬───────────────────────┤
│  MCP Server  │  /claude-history  │  SessionStart Hook │
│  (6 tools)   │  Skill            │  (auto-context)    │
├──────────────┴───────────────┴───────────────────────┤
│              Hybrid Search Engine                     │
│          BM25 (keywords) + TF-IDF (semantic)         │
├──────────────────────────────────────────────────────┤
│  Indexing Pipeline  │  Knowledge Layer  │  Summaries  │
├──────────────────────────────────────────────────────┤
│  JSONL Parsers  │  File Watcher  │  Document Store    │
└──────────────────────────────────────────────────────┘
         ↕                    ↕
~/.claude/history.jsonl    ~/.claude/projects/*/*.jsonl

Search engine

  1. Tokenizer: lowercase → strip markdown → split → remove stop words → Porter stem → bigrams

  2. BM25: Inverted index for keyword precision (Okapi BM25, k1=1.2, b=0.75)

  3. TF-IDF: Sparse vectors + cosine similarity for semantic recall

  4. Fusion: Reciprocal Rank Fusion (RRF) combining both rankings

  5. Boosting: recency (7d=1.2x, 30d=1.1x) + project-match (1.3x if cwd matches)

Knowledge extraction

When sessions end (file stops changing for 5+ minutes), the system automatically extracts:

  • Decisions: "decided to", "going with", "chose" patterns

  • Solutions: "fixed", "solved", "the issue was" patterns

  • Error fixes: error → resolution sequences

Data storage

Runtime data stored at ~/.claude-history-mcp/:

~/.claude-history-mcp/
  index.msgpack               # Serialized search index
  knowledge.json              # Extracted knowledge entries
  summaries/{sessionId}.json  # Cached session summaries
  meta.json                   # Last-indexed timestamps

Installation

git clone https://github.com/jhammant/ClaudeHistoryMCP.git
cd ClaudeHistoryMCP
npm install
npm run build

1. Build the search index

npm run build-index

This parses all your Claude Code conversation history and builds the search index. Takes ~10 seconds for ~170 sessions.

2. Register the MCP server

claude mcp add claude-history -- node "/path/to/ClaudeHistoryMCP/dist/index.js"

3. Install the session-start hook and skill (optional)

npm run install-hook

This registers a SessionStart hook in ~/.claude/settings.json that auto-injects project context, and installs the /claude-history skill.

Add the following to your global ~/.claude/CLAUDE.md to ensure Claude proactively uses history tools:

## Claude History MCP

When the `claude-history` MCP is available, use it proactively:

- **Session start**: Use `get_project_context` to check for prior decisions, patterns, and recent session summaries for the current project
- **Debugging**: Use `find_solutions` to search history for past fixes before starting from scratch
- **Context questions**: When the user asks "have we done X before", "what did we decide", or similar — use `search_history` to find relevant past conversations
- **Patterns**: Use `find_patterns` to identify recurring workflows or issues when relevant

Without this, Claude has access to the tools but may not always think to reach for them.

5. Configure cloud sync (optional)

To sync knowledge across devices or share with a team, set up ClaudeHistory Cloud:

export CLAUDE_HISTORY_API_URL=https://your-server.com
export CLAUDE_HISTORY_API_KEY=your-api-key
export CLAUDE_HISTORY_TEAM_ID=optional-team-uuid  # for team sync

Then use the cloud_sync_push and cloud_sync_pull tools to sync.

Usage

Via MCP tools (automatic)

Once registered, Claude Code can use the tools directly:

User: "Have I dealt with this ECONNREFUSED error before?"
Claude: [calls find_solutions with "ECONNREFUSED"]
→ Shows past solutions from your history

Via the /claude-history skill

/claude-history docker network error          # General search
/claude-history --solutions ECONNREFUSED      # Find past error fixes
/claude-history --summary                     # Summarize last session
/claude-history --patterns                    # Discover recurring patterns
/claude-history --context                     # Get full project context
/claude-history --projects                    # List all projects

Filter syntax

Queries support inline filters:

search_history("docker error project:ghostty after:7d")
search_history("authentication tool:Bash before:2024-06-01")
search_history("deployment project:myapp after:30d")
  • project:name — filter to a project (partial match)

  • before:date / after:date — date filter (ISO or relative: 7d, 1w, 1m, 1y)

  • tool:name — filter to sessions using a specific tool

Session-start hook

When you start a new Claude Code session, the hook automatically outputs:

[ClaudeHistory] Previous context for myproject:
- Last session (2 days ago): Fixed Docker networking — switched to host networking
- Key decision: Use systemd timer instead of cron for scheduling
- Solution found: CORS issue resolved by adding proxy config

Project structure

src/
  index.ts                    # MCP server entry (stdio transport)
  server.ts                   # Tool registration via McpServer + zod
  config.ts                   # Paths, constants, defaults
  parsers/
    history-parser.ts         # Parse ~/.claude/history.jsonl
    session-parser.ts         # Stream-parse session JSONL files
    content-extractor.ts      # Extract text from message content arrays
  indexing/
    index-manager.ts          # Orchestrate indexing, persistence, incremental updates
    bm25.ts                   # BM25 inverted index (Okapi BM25)
    tfidf.ts                  # TF-IDF vectors + cosine similarity
    tokenizer.ts              # Tokenize, stem, stop words, bigrams
    document-store.ts         # Store indexed document chunks + metadata
  search/
    search-engine.ts          # Hybrid search: BM25 + TF-IDF + RRF fusion
    query-processor.ts        # Parse query syntax (project:, before:, after:)
    result-ranker.ts          # Score fusion, recency/project boost, dedup
  knowledge/
    knowledge-store.ts        # Persist extracted knowledge entries
    session-summarizer.ts     # Generate session summaries (heuristic, no LLM)
    knowledge-extractor.ts    # Extract decisions, solutions, error fixes
  sync/
    cloud-client.ts           # HTTP client for ClaudeHistory Cloud API
    sync-state.ts             # Track last sync timestamps
  watcher/
    file-watcher.ts           # Debounced fs.watch on conversation files
    incremental-indexer.ts    # Diff mtimes, re-index only changed files
  tools/                      # One file per MCP tool handler
  hooks/
    session-start-hook.ts     # Auto-inject project context on session start
  utils/
    stemmer.ts                # Inline Porter stemmer (no deps)
    path-encoder.ts           # Encode/decode Claude's project path format
    cache.ts                  # LRU cache
  cli/
    build-index.ts            # Build the full search index
    install.ts                # Install hook + skill
commands/
  claude-history.md           # /claude-history skill definition
tests/                        # Unit + integration tests (82 tests)

Dependencies

Minimal — only 2 runtime dependencies:

  • @modelcontextprotocol/sdk — MCP protocol

  • msgpackr — efficient index serialization

  • zod — schema validation (peer dep of MCP SDK)

Porter stemmer and stop words are implemented inline.

Development

npm run dev          # Run with tsx (no build needed)
npm run build        # Compile TypeScript
npm test             # Run tests
npm run test:watch   # Watch mode
npm run build-index  # Rebuild the search index

License

MIT

Available Tools

9 tools
cloud_sync_pullA

Pull knowledge entries and session summaries from the cloud server. Merges with local data without duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoPull all entries regardless of last sync time (default: false)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It discloses one key behavior—merging with local data without duplicates—which implies a mutation, but it does not clarify side effects such as overwriting local changes, network dependencies, or failure behavior. This is partial transparency, not sufficient for a fully informed agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main action and outcome. It contains no unnecessary words or repetition, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple, it has no output schema and no annotations. The description explains the action and merge behavior but does not specify what the agent receives after the call (e.g., a summary, count, or confirmation). This ambiguity about the return value is a notable gap for a sync operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the 'force' boolean parameter with 100% coverage, so the description does not need to explain it. The description does not mention the parameter, but the schema already provides adequate meaning, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('pull'), the resource ('knowledge entries and session summaries'), and the source ('cloud server'). This distinguishes it from sibling tools like cloud_sync_push and cloud_sync_status by explicitly describing the sync direction and content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for syncing from cloud to local, but it does not explicitly state when to use it versus alternatives such as cloud_sync_push or cloud_sync_status. No exclusions or alternative tool recommendations are provided, leaving the usage context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cloud_sync_pushA

Push local knowledge entries and session summaries to the cloud server. Only pushes entries newer than the last sync.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoPush all entries regardless of last sync time (default: false)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden. It discloses a key behavior: incremental sync (only newer entries). However, it does not mention potential side effects like overwriting cloud data, failure modes, authentication requirements, or whether the operation is idempotent. This is partial transparency, enough for an average score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and destination, followed by the key behavioral constraint. No redundant or filler words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers the primary action and main behavioral nuance. It lacks return value details but that is not critical for a push operation. The sibling tools provide additional context, making this sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 'force' 100% with a clear description. The tool description adds context by indicating the default behavior (only newer) which relates to force, but it does not explain the parameter itself beyond what the schema provides. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Push local knowledge entries and session summaries to the cloud server.' The verb 'Push' is specific, and the resource/destination are explicit. The added clause about only pushing entries newer than the last sync distinguishes it from sibling tools like cloud_sync_pull and cloud_sync_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (push vs pull) but does not explicitly state when to use this tool over alternatives or mention exclusions. The 'only newer' behavior hints at the force parameter but gives no direct guidance on when to use force or how this tool compares to cloud_sync_pull.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cloud_sync_statusA

Check cloud sync configuration and connection status. Shows whether sync is configured, last sync times, and connection health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It adequately describes what information is shown, but does not disclose whether the check is live, cached, or if there are any side effects. It remains somewhat vague on operational behavior beyond listing outputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first sentence immediately states the action and resource, and the second provides additional detail on outputs. Very efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description fully covers what the tool does and what it returns. It mentions configuration status, last sync times, and connection health, which is sufficient for an agent to understand the tool's purpose and expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema covers all of them (none). Per the baseline rule for 0 params, a score of 4 is appropriate. The description adds no parameter-specific meaning because none exist, but it does clarify what the tool reports.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: checking cloud sync configuration and connection status, with specific output details (configured, last sync times, connection health). This distinguishes it from sibling tools like cloud_sync_pull and cloud_sync_push, which perform actions rather than status checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the tool name and sibling names (status vs. pull/push), but the description does not explicitly state when to use this tool over alternatives. No exclusions or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_patternsA

Discover recurring patterns in conversation history: common topics, frequent workflows, repeated issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoType of patterns to find (default: all)
projectNoLimit to a specific project

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full disclosure burden, but it only states the purpose ('Discover recurring patterns') and does not mention whether the tool is read-only, what it returns, or any side effects. This is insufficient for a tool with no annotation safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core action and examples, with no wasted words. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the schema fully documents the two optional parameters and the purpose is clear, the description omits any mention of the output format or behavioral boundaries (e.g., scope of conversation history). Given the simplicity of the tool and no output schema, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter names and a clear enum, so the description adds no additional parameter meaning. The baseline score of 3 applies as the schema already handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Discover' and resource 'conversation history', and lists concrete pattern types (topics, workflows, issues), making its purpose distinct from siblings like search_history or find_solutions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case (finding recurring patterns) but does not provide explicit guidance on when to use this tool versus alternatives such as search_history or find_solutions. No exclusions or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_solutionsA

Search past conversations for solutions to errors or problems. Prioritizes results containing fix/resolution language.

ParametersJSON Schema
NameRequiredDescriptionDefault
technologyNoOptional technology context (e.g., 'docker', 'typescript', 'react')
error_or_problemYesThe error message, problem description, or issue to find solutions for

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It openly states that results are prioritized by fix/resolution language, which is a key behavioral trait. It also implicitly conveys a read-only operation through 'search'. It does not disclose return format or limitations, but the core seeking and ranking behavior is transparent enough for this simple search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the main action ('Search past conversations') and adds a valuable ranking note in the second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain return values. It does not mention what the tool returns (e.g., snippets, conversation references, ranked list). It also does not clarify the scope of 'past conversations' (e.g., user-scoped vs. workspace-wide). This makes it incomplete for an agent that needs to consume the output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and both parameters (error_or_problem and technology) are already described in the schema. The tool description adds no additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches past conversations for solutions to errors or problems, using the specific verb 'search' and identifying the resource. It distinguishes itself from sibling tools like search_history by focusing specifically on solution-finding, and the additional note about prioritizing fix/resolution language further clarifies its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when you have an error or problem and need solutions from past conversations. However, it does not explicitly mention alternatives or exclusions, such as when to use search_history or find_patterns instead, which would elevate it to a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_contextA

Get comprehensive context for a project: recent sessions, key topics, common tools, and patterns. Useful for session-start context injection.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoDetail level (default: normal)
projectNoProject name or path. Defaults to current working directory.

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only lists what the tool returns, not whether it is read-only, whether it requires authentication, or any side effects. For a 'get' tool, it should explicitly state it does not modify anything, but that is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose and followed by a usage note. Every word earns its place; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description should explain the return format and any behavioral details. It lists the content components but does not specify how 'depth' affects results, what 'recent' means, or whether the operation is safe/read-only. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage, documenting both 'depth' (with enum and default) and 'project' (with description). The description adds no parameter-specific meaning beyond what the schema already states, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get comprehensive context for a project' and enumerates the specific components (recent sessions, key topics, common tools, patterns). This distinguishes it from siblings like search_history or get_session_summary by emphasizing comprehensiveness and aggregation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear usage context: 'Useful for session-start context injection.' This tells the agent when to invoke the tool. It does not explicitly mention alternatives or exclusions, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_summaryA

Get a structured summary of a conversation session. Provide either a session ID or project name (returns most recent session).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name or path. Returns summary of most recent session.
session_idNoSpecific session UUID

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that using project name returns the most recent session, which is useful behavioral context. But it does not describe return format, error handling, or confirm read-only safety, leaving gaps for a retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the purpose and immediately provides the key usage instruction. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, so the description should elaborate on what a 'structured summary' contains or how to interpret the result. It also doesn't address edge cases like missing session or invalid project name. For a simple retrieval tool with two optional params, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, giving baseline 3. The description adds value by explaining the 'either/or' relationship between session_id and project, and the fallback to most recent session, which is not fully captured in the schema's independent property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a structured summary of a conversation session, with a specific verb and resource. It distinguishes from siblings like get_project_context by focusing on session summary rather than project context, and explicitly mentions the input modes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving session summaries, and gives parameter guidance (provide session ID or project name). However, it does not state when to choose this over sibling tools or mention any exclusion conditions, so usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA

List all projects that have Claude Code conversation history, with session counts and activity dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
sort_byNoSort order (default: recent)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of transparency. It clearly indicates a read-only listing and describes what is returned (session counts, activity dates). However, it does not mention permissions, performance, or that it excludes projects without history, though that is implied by the phrasing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the action ('List all projects') and immediately provides the key context (which projects, what info is included), making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only one optional parameter and no output schema. The description covers the core purpose and return content adequately. It could explicitly state that projects without history are excluded and mention sorting options, but the schema covers sorting and the restriction is implied, leaving only minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single optional parameter sort_by, including an enum description. The description adds no additional meaning to the parameter, but the schema already fully documents its semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the exact resource: 'projects that have Claude Code conversation history'. It also mentions the included information (session counts and activity dates), which clearly distinguishes it from sibling tools like search_history or find_solutions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you want an overview of projects with conversation history, but it does not explicitly state when to use this tool versus alternatives. Sibling tools exist, but there is no mention of when to choose this over search_history or find_solutions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_historyA

Search past Claude Code conversations. Supports filter syntax: project:name, before:date, after:date, tool:name. Dates can be relative (7d, 30d, 1w) or ISO (2024-01-15).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results (default: 20, max: 100)
queryYesSearch query. Can include filters like project:myapp before:7d
projectNoFilter to a specific project name or path
include_contextNoInclude surrounding message context (default: false)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It reveals supported filter syntax and date parsing rules (relative and ISO), which adds useful context. However, it does not describe the return format, sorting, pagination, or any side effects, leaving the agent partially uncertain about what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core purpose in the first sentence and syntax details in the second. No wasted words, information density is high, and the structure front-loads the main verb and object.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters, no output schema, and no annotations, so the description must provide adequate context. It covers query syntax well but omits details about return values, how limit and include_context affect results, and when to use this over get_session_summary. This gap prevents full autonomy for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description enriches the meaning of the query parameter by detailing filter syntax (project:, before:, after:, tool:) and date formats. This goes beyond the schema's example and clarifies how to construct complex queries, adding direct value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact function: 'Search past Claude Code conversations.' This is a specific verb+resource pair that clearly distinguishes it from sibling tools like find_solutions or get_session_summary, which target different content. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains supported filter syntax but offers no guidance on when to use this tool versus alternatives. It does not mention situations where a sibling tool would be more appropriate, such as when needing a summarized session or searching for solutions. No when-to-use recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedcloud_sync_pull
    • First observedcloud_sync_push
    • First observedcloud_sync_status
    • First observedfind_patterns
    • First observedfind_solutions
    • First observedget_project_context
    • First observedget_session_summary
    • First observedlist_projects
    • First observedsearch_history

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: search_history queries conversations broadly, find_solutions zeroes in on fixes, find_patterns aggregates trends, and get_session_summary/get_project_context serve different retrieval needs. The main potential confusion is between search_history and find_solutions, but descriptions and result prioritization mitigate it.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (search_history, list_projects, get_session_summary), with cloud_sync_* as a clear module prefix for push/pull/status. The naming is uniform and predictable.

Tool Count5/5

Nine tools is well within the ideal 3-15 range, and each tool addresses a distinct aspect of conversation history management (search, summary, context, patterns, sync). The count feels neither sparse nor bloated for the server's scope.

Completeness4/5

The toolset covers core workflows: searching history, retrieving summaries, building project context, detecting patterns, and cloud sync with push/pull/status. Minor gaps exist—such as no tool for deleting or explicitly exporting history—but these are likely outside the primary purpose and easily worked around.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/jhammant/ClaudeHistoryMCP'

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