Skip to main content
Glama
egoughnour

cowork-history

by egoughnour

Cowork History MCP

An MCP (Model Context Protocol) server for searching and browsing your Claude conversation history stored in ~/.claude/. Works with both Claude Code and Cowork conversations.

Features

  • Hybrid Search - Combines multiple search methods for best results:

    • SQLite FTS5 - Fast full-text search with BM25 ranking

    • macOS Spotlight - Leverages system content indexing via mdfind

    • Vector Embeddings - Semantic similarity search (optional, requires Ollama)

  • Smart Path Reconstruction - Recovers actual filesystem paths via probing (not heuristic guessing)

  • Persistent Index - SQLite database with incremental updates for fast queries

  • Ollama Setup Tools - Automated installation and configuration for embeddings

Related MCP server: Memex

Installation

Option 1: Claude Desktop (One-Click Install)

Download cowork-history.mcpb from the latest release and double-click to install.

uvx cowork-history

Option 3: Via pip

pip install cowork-history

Option 4: Manual Configuration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "cowork-history": {
      "command": "uvx",
      "args": ["cowork-history"],
      "env": {
        "OLLAMA_URL": "http://localhost:11434",
        "EMBEDDING_MODEL": "nomic-embed-text"
      }
    }
  }
}

Quick Start

Once installed, Claude can search your conversation history:

"What did we discuss about authentication last week?"
"Find the conversation where we debugged the payment webhook"
"Show me my conversations in the my-project folder"

Available Tools

Search & Browse

Tool

Description

cowork_history_search

Search conversations using hybrid search (FTS + Spotlight + vector)

cowork_history_list

List recent conversations, optionally filtered by project

cowork_history_get

Get full content of a specific conversation by session ID

cowork_history_projects

List all projects with conversation history

cowork_history_stats

Get statistics and search capability status

cowork_history_reindex

Rebuild index and optionally generate embeddings

Tool

Description

history_system_check

Check system requirements for Ollama

history_setup_ollama

Install Ollama via Homebrew (macOS)

history_setup_ollama_direct

Install Ollama via direct download (no Homebrew)

history_ollama_status

Check Ollama status and embedding model availability

Search Modes

The cowork_history_search tool supports multiple search modes:

Mode

Description

auto (default)

Uses all available methods, best results

fts

Full-text search only (fastest)

spotlight

macOS Spotlight only

vector

Semantic similarity only (requires Ollama)

hybrid

Explicit combination with ranking

Search Examples

"authentication bug"           → finds conversations with both words
"how to deploy"                → semantic search finds related discussions
"\"exact phrase\""             → exact phrase matching
project:"my-app" "database"    → filter by project

Vector search provides semantic similarity matching (finding related concepts even without exact keywords). It requires Ollama with an embedding model.

Quick Setup

Ask Claude to set it up for you:

"Set up Ollama for vector search"

Or manually:

# Install Ollama (macOS)
brew install ollama

# Start Ollama service
brew services start ollama

# Pull the embedding model
ollama pull nomic-embed-text

Then generate embeddings:

"Rebuild the history index with embeddings"

How It Works

Indexing

The server maintains a SQLite database at ~/.claude/.history-index/conversations.db with:

  • FTS5 virtual table for fast full-text search

  • Conversation metadata (session ID, project, timestamps, topic)

  • Full content for comprehensive search

  • Path cache for reconstructed paths

  • Embeddings table for vector search (optional)

The index updates automatically when you search (if >5 minutes old) or you can force a rebuild with cowork_history_reindex.

Environment Variables

Variable

Default

Description

OLLAMA_URL

http://localhost:11434

Ollama server URL

EMBEDDING_MODEL

nomic-embed-text

Ollama embedding model

Troubleshooting

No conversations found

  1. Make sure ~/.claude/ directory exists

  2. Check that you have conversation history (use Claude Code or Cowork first)

  3. Verify the MCP server is properly configured

Vector search not available

  1. Check Ollama is installed: ollama --version

  2. Check Ollama is running: curl http://localhost:11434/api/tags

  3. Check model is available: ollama list

  4. Pull embedding model: ollama pull nomic-embed-text

Search not finding expected results

  • Try natural language queries (semantic search is more flexible)

  • Use mode: "fts" for exact phrase matching

  • Check cowork_history_stats to see which search backends are active

Development

Running locally

# Clone the repository
git clone https://github.com/egoughnour/cowork-history
cd cowork-history

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest tests/

# Run the server directly
python -m src.cowork_history_server

Testing with MCP Inspector

npx @modelcontextprotocol/inspector uvx cowork-history

License

MIT License - see LICENSE file for details.

Available Tools

10 tools
cowork_history_getGet Conversation DetailsA
Read-onlyIdempotent

Get full content of a specific conversation by session ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds minimal behavioral context (e.g., 'full content' suggests a complete payload), but it does not disclose anything else like pagination or rate limits. Given the annotations, a score of 3 is appropriate.

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 directly states the tool's purpose. No filler or redundant wording; every word 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 read-only tool with an output schema, the description is reasonably complete in conveying core behavior. However, it lacks guidance on optional parameters and does not explicitly state when to prefer this over sibling tools. Still, the presence of output schema and annotations reduces the burden, making this adequate.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions the primary parameter 'session ID' but leaves response_format, include_thinking, and include_tool_calls without explanation. The schema provides enum/default values, but the description does not help an agent decide among the optional parameters.

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 'Get full content of a specific conversation by session ID,' which is a specific verb-resource pair. It distinguishes from sibling tools like cowork_history_list and cowork_history_search by emphasizing 'specific conversation' and 'full 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 use when you have a session ID and want full conversation content, but it does not explicitly mention alternatives or when not to use this tool. No exclusions or separate guidance is provided, leaving the usage inference to the agent.

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

cowork_history_listList Recent ConversationsA
Read-onlyIdempotent

List recent Claude conversations from the index, sorted by modification time.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is clear. The description adds behavioral context by stating the data source ('from the index') and the sorting order ('by modification time'), which goes beyond the structured annotations.

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, front-loaded sentence that conveys the core function efficiently with no filler or redundant content.

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

Completeness2/5

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

While the description states the basic purpose, it omits parameter semantics and fails to clarify usage relative to sibling tools. The presence of an output schema helps, but input parameters are undocumented, making the description insufficient for nuanced use cases like filtering by project.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the parameters (limit, project, response_format). An agent cannot infer the meaning of 'project' or 'response_format' from either the schema or the description, leaving a significant gap for correct invocation.

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 a clear verb ('List') and specifies the resource ('recent Claude conversations from the index') plus ordering ('sorted by modification time'). This distinguishes it from sibling tools like search/get, which perform different operations.

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 viewing recent conversations but gives no explicit guidance on when to choose it over sibling tools such as cowork_history_search or cowork_history_get. There are no exclusions or alternative references.

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

cowork_history_projectsList ProjectsB
Read-onlyIdempotent

List all projects with conversation history, showing reconstructed paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds a small bit of context about 'reconstructed paths', but no further behavioral traits like pagination, performance, or response details are disclosed.

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, focused sentence with no unnecessary words. It front-loads the core action ('List all projects') and includes a meaningful detail ('reconstructed paths'), 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?

Given the simple one-parameter tool, strong annotations, and existing output schema, the description is largely sufficient. It clearly identifies the resource and the special aspect of conversation history, though it could benefit from a brief note on when to use this over sibling tools.

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

Parameters2/5

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

The schema description coverage is 0%, and the description gives no information about the response_format parameter or how to control output. The schema itself defines the enum and default, but the description adds no value toward parameter understanding.

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

Purpose4/5

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

The description clearly states the tool lists all projects with conversation history and reconstructed paths, making the purpose specific. While it distinguishes from siblings by focusing on 'projects', it does not explicitly contrast with other cowork_history_* tools like search or get.

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?

No guidance is provided on when to use this tool versus alternatives such as cowork_history_search or cowork_history_list. The description simply states what it does without any contextual usage direction or exclusions.

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

cowork_history_reindexRebuild IndexA
Idempotent

Rebuild the conversation index and optionally generate embeddings.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, and the description adds the optional embedding behavior but nothing else. The word 'rebuild' might carry a destructive connotation, but annotations counter that; no further side effects or dependencies (e.g., Ollama requirement for embeddings) are disclosed in the description beyond the schema.

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 is front-loaded with the primary action and qualified with the optional part. No wasted words or redundancy.

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?

For a one-parameter tool with an output schema and annotations, the description is functional but somewhat underspecified. It does not mention the relationship to other tools (e.g., Ollama status/setup for embedding generation) or any post-condition behavior. The existence of sibling tools like history_ollama_status suggests that prerequisite context could be helpful, but it's not critical for basic use.

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 description mentions 'optionally generate embeddings', which aligns with the boolean parameter in the schema. However, it does not name the parameter or explain the 'requires Ollama' condition already noted in the schema. Since the schema provides a clear description, the baseline is 3, and the tool description adds only marginal value here.

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 a specific verb ('Rebuild') and resource ('conversation index'), clearly distinguishing this from sibling tools like search, list, or stats. It also mentions the optional embedding generation, which immediately conveys the tool's scope.

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 purpose implies the tool is used when the index needs rebuilding, but there is no explicit guidance on when to use it versus alternatives. The context of sibling Ollama/setup tools suggests related workflows, but the description doesn't mention prerequisites or cases where this should be avoided.

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

cowork_history_statsGet StatisticsB
Read-onlyIdempotent

Get statistics about conversation history and search capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal context about what the statistics concern (conversation history and search capabilities) but doesn't disclose additional behavioral traits like performance implications or return format details, which is acceptable given annotation coverage.

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

Conciseness4/5

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

The description is a single concise sentence with no wasted words. It could be more informative while still remaining concise, but the current structure is 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?

The tool has an output schema and safety annotations, reducing the burden on the description. However, the description is vague about what statistics are returned, how to control the response format, and when to use this tool over siblings. It is minimally adequate but leaves clear gaps.

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

Parameters2/5

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

The schema has one required nested parameter 'params' with an optional response_format enum, but the description provides zero parameter semantics. With 0% schema description coverage, the description should compensate but doesn't, leaving the agent to infer how to use the parameter.

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

Purpose4/5

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

The description clearly states it 'gets statistics' about conversation history and search capabilities, which is a specific verb and resource. However, it doesn't distinguish itself from sibling tools like cowork_history_list or cowork_history_get, so sibling differentiation is missing.

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?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention that it's for aggregate statistics rather than raw data, nor does it reference any sibling tools or exclusion scenarios.

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

history_ollama_statusA

Check Ollama server status and available models.

Returns whether Ollama is running and if the embedding model is available. Use to check if semantic/vector search is available.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_refreshNoForce refresh the cached status (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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. It does disclose the main behavior: returns whether Ollama is running and if the embedding model is available. However, it does not mention that the status is cached by default or that force_refresh controls staleness—this is only in the parameter schema, not the main description.

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 concise and front-loaded: the first sentence states the core purpose, the second states what it returns, and the third gives a usage recommendation. Every sentence earns its place without redundancy.

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 simple status-checking tool with one optional parameter and an output schema, the description is complete: it clearly states what the tool does, what it returns, and when to use it. The output schema covers the return structure, so the description does not need to elaborate further.

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 schema covers 100% of parameter information, including a description for force_refresh ('Force refresh the cached status'). The tool description itself does not add parameter semantics, but since the schema fully documents the parameter, the baseline 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 uses a specific verb and resource: 'Check Ollama server status and available models.' It clearly states what the tool does, distinguishes it from sibling tools like history_setup_ollama and history_system_check by focusing on status/availability, and explicitly mentions the key outputs (running status and embedding model availability).

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 provides clear guidance: 'Use to check if semantic/vector search is available.' This indicates when to invoke the tool. It does not explicitly name alternative tools or exclusions, but the sibling context and clear 'use to' framing give adequate direction without confusion.

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

history_setup_ollamaA

Install Ollama via Homebrew (macOS).

Requires Homebrew pre-installed. Uses 'brew install' and 'brew services'. PROS: Auto-updates, pre-built binaries, managed service. CONS: Requires Homebrew, may prompt for sudo on first install.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel to pull (default: nomic-embed-text)nomic-embed-text
installNoInstall Ollama via Homebrew (requires Homebrew)
pull_modelNoPull the embedding model (nomic-embed-text)
start_serviceNoStart Ollama as a background service via brew services

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries full responsibility for disclosing behavior. It reveals that the tool runs 'brew install' and 'brew services', and may prompt for sudo, which is helpful. However, it does not disclose other behavioral aspects such as whether it pulls a model, modifies system state beyond installation, or the effects of different flag combinations. The pros/cons list adds context but not exhaustive transparency.

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 concise and well-structured: a one-line summary, a prerequisite statement, a command detail, and a pros/cons list. Every sentence provides useful information without redundancy, and the most critical information (what it does) is front-loaded.

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 description gives a good high-level overview but does not explain how the boolean flags (install, pull_model, start_service) interact or what the default behavior (all false) would do. This could lead to confusion about invoking the tool with no arguments. However, since the schema details each parameter and an output schema exists, the description is not severely incomplete.

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 covers 100% of the parameters with descriptions, so the description does not need to compensate. The text mentions using 'brew install' and 'brew services', which loosely maps to the install and start_service parameters, but it does not add additional semantic detail beyond what the schema already provides. Baseline 3 applies.

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

Purpose4/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: 'Install Ollama via Homebrew (macOS).' This is a specific verb (Install) plus resource (Ollama via Homebrew). However, it does not explicitly differentiate from the sibling tool history_setup_ollama_direct, though the mention of Homebrew implies the distinction.

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 provides a clear prerequisite ('Requires Homebrew pre-installed') and notes a limitation ('may prompt for sudo on first install'). It implies when to use the tool (when Homebrew is available) but does not mention alternatives like history_setup_ollama_direct or state when not to use it, leaving the guidance incomplete.

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

history_setup_ollama_directA

Install Ollama via direct download (macOS).

Downloads from ollama.com to ~/Applications. PROS: No Homebrew needed, no sudo required, fully headless. CONS: Manual PATH setup, no auto-updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel to pull (default: nomic-embed-text)nomic-embed-text
installNoDownload and install Ollama to ~/Applications (no sudo needed)
pull_modelNoPull the embedding model (nomic-embed-text)
start_serviceNoStart Ollama server (ollama serve) in background

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It discloses installation location and that no sudo is required, plus cons about PATH and updates. However, it omits other behavioral traits such as idempotence, error handling, or prerequisites like internet connectivity.

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 compact, front-loaded with the core purpose, and uses a clear PROS/CONS structure that wastes no words. Every sentence conveys useful context.

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?

Given the tool's moderate complexity and presence of an output schema, the description covers the primary install behavior and trade-offs. It could mention how the optional actions (pull model, start service) relate to the install, but those are already documented in the schema.

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%, so differences in parameter behavior (install, pull_model, start_service) are already explicit in the schema. The description adds minimal beyond schema, only reinforcing the install path.

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 identifies a specific action—'Install Ollama via direct download (macOS)'—and distinguishes it from sibling history_setup_ollama by specifying the download source and target folder (~/Applications), making its scope evident.

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 PROS/CONS lists provide implicit guidance for when to choose this method (no Homebrew, no sudo, headless) and when not (manual PATH setup, no auto-updates), though it doesn't explicitly name a sibling alternative.

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

history_system_checkA

Check if system meets requirements for Ollama embeddings.

Verifies: macOS, Apple Silicon (M1/M2/M3/M4), RAM, Homebrew. Use before attempting Ollama setup.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior3/5

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

The description discloses the specific system components checked (macOS, Apple Silicon, RAM, Homebrew), offering useful context. However, with no annotations, it does not explicitly state whether the tool is read-only, what output format to expect, or any potential side effects, leaving some ambiguity about its behavior.

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 primary purpose, and lists the checks in a compact list format. No redundant words or unnecessary details.

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 simple, zero-parameter tool with an output schema, the description covers all essential information: what it checks, when to use it, and its relationship to setup. The output schema presumably handles return values, so no further description is needed.

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, so there is no parameter schema to clarify. The description adds context about the tool's purpose, which is sufficient. Baseline of 4 applies as there are no parameters.

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 a specific verb ('Check') and identifies the exact resource ('system meets requirements for Ollama embeddings'), listing the specific attributes verified. This clearly distinguishes it from sibling setup and status tools by focusing on pre-installation verification.

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

Usage Guidelines5/5

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

The description explicitly states 'Use before attempting Ollama setup,' providing direct when-to-use guidance. This differentiates it from the setup and status sibling tools, making the alternative clear.

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.

  1. 10 tool updatesv1.0.0
    • First observedcowork_history_get
    • First observedcowork_history_list
    • First observedcowork_history_projects
    • First observedcowork_history_reindex
    • First observedcowork_history_search
    • First observedcowork_history_stats
    • First observedhistory_ollama_status
    • First observedhistory_setup_ollama
    • First observedhistory_setup_ollama_direct
    • First observedhistory_system_check

TDQS

B3.4/5.0

Scored across 10 tools

Disambiguation3/5

Most tools are distinct, but history_setup_ollama_direct and history_setup_ollama overlap as two installation methods for the same software. history_system_check and history_ollama_status are also somewhat related, though they check different aspects. Descriptions help clarify, but some ambiguity remains.

Naming Consistency2/5

Naming is inconsistent: tools use two different prefixes (history_ vs cowork_history_) and mix verb-first (setup_ollama, search) with noun-first (system_check, ollama_status) patterns. This makes the tool set feel disjointed and harder to predict.

Tool Count4/5

10 tools is within a reasonable range, but four of them are dedicated to Ollama setup/status, which is an optional dependency. This makes the set slightly heavier than necessary, though each tool still serves a distinct purpose.

Completeness4/5

The core history tools cover search, list, get, projects, stats, and reindex, providing solid lifecycle coverage for querying and maintaining conversation history. Minor gaps exist, such as lack of delete or export functionality, but they are not critical for the primary use case.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables comprehensive search and analysis of Claude Code conversation history using full-text search, optional semantic vector search, and conversation management tools. Provides fast SQLite-based indexing with role-based filtering, project organization, and hybrid search capabilities combining keyword and semantic matching.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and retrieving Claude Code conversation history that would otherwise expire after 30 days. Supports full-text search, semantic search, and session management with automatic backup of all conversations.
    5 npm
    28
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and retrieving Claude Code conversation history via hybrid semantic and keyword search, allowing the agent to access its own past interactions.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and browsing past Claude Code conversations directly from within an active Claude session, with full-text search and cost tracking.
    MIT