cowork-history
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cowork-historyFind my conversation about debugging payment webhooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
mdfindVector 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.
Option 2: Via uvx (Recommended for CLI)
uvx cowork-historyOption 3: Via pip
pip install cowork-historyOption 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 |
| Search conversations using hybrid search (FTS + Spotlight + vector) |
| List recent conversations, optionally filtered by project |
| Get full content of a specific conversation by session ID |
| List all projects with conversation history |
| Get statistics and search capability status |
| Rebuild index and optionally generate embeddings |
Ollama Setup (for Vector Search)
Tool | Description |
| Check system requirements for Ollama |
| Install Ollama via Homebrew (macOS) |
| Install Ollama via direct download (no Homebrew) |
| Check Ollama status and embedding model availability |
Search Modes
The cowork_history_search tool supports multiple search modes:
Mode | Description |
| Uses all available methods, best results |
| Full-text search only (fastest) |
| macOS Spotlight only |
| Semantic similarity only (requires Ollama) |
| 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 projectEnabling Vector Search
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-textThen 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 server URL |
|
| Ollama embedding model |
Troubleshooting
No conversations found
Make sure
~/.claude/directory existsCheck that you have conversation history (use Claude Code or Cowork first)
Verify the MCP server is properly configured
Vector search not available
Check Ollama is installed:
ollama --versionCheck Ollama is running:
curl http://localhost:11434/api/tagsCheck model is available:
ollama listPull 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 matchingCheck
cowork_history_statsto 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_serverTesting with MCP Inspector
npx @modelcontextprotocol/inspector uvx cowork-historyLicense
MIT License - see LICENSE file for details.
Available Tools
10 toolscowork_history_getGet Conversation DetailsARead-onlyIdempotent
Get full content of a specific conversation by session ID.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ConversationsARead-onlyIdempotent
List recent Claude conversations from the index, sorted by modification time.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ProjectsBRead-onlyIdempotent
List all projects with conversation history, showing reconstructed paths.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 IndexAIdempotent
Rebuild the conversation index and optionally generate embeddings.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_searchSearch ConversationsARead-onlyIdempotent
Search Claude conversation history using hybrid search.
Combines FTS5 full-text search, macOS Spotlight content indexing, and optional vector similarity (requires Ollama). Supports natural language, keywords, and "exact phrases".
Examples:
"authentication bug" - finds conversations mentioning both words
"how to deploy" - semantic search finds related discussions
project:"my-app" query:"database" - filter by project
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds meaningful context about the search mechanism: it combines FTS5 full-text search, macOS Spotlight indexing, and optional vector similarity requiring Ollama. This goes beyond the annotations by explaining how the search works and its dependency on external components, without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It includes useful examples that illustrate query patterns without being verbose. The structure is clear, with a brief mechanism explanation followed by examples, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core search behavior, supported query types, and the dependency on Ollama for vector search. However, it does not explain the different search modes (auto, fts, spotlight, vector, hybrid) or the behavior when Ollama is not available. Given there is an output schema, return values are handled, but the description misses some operational details that would be useful for a tool with this level of complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is reported as 0%, and the tool description only mentions 'project' and 'query' in examples without defining their semantics. It does not explain 'mode', 'limit', or 'response_format'. Although the schema itself provides descriptions for most parameters, the description fails to add meaningful guidance beyond what the schema already contains, especially for the 'mode' and 'limit' parameters which lack detailed explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search Claude conversation history using hybrid search.' It specifies a specific verb (Search), resource (Claude conversation history), and method (hybrid search), distinguishing it from sibling tools like cowork_history_list and cowork_history_get, which are for listing and retrieving rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives examples of different query types (natural language, keywords, exact phrases, and filters) which implies usage context, but it does not explicitly state when to prefer this tool over alternatives such as cowork_history_list or cowork_history_get. There is no mention of alternatives or exclusions, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cowork_history_statsGet StatisticsBRead-onlyIdempotent
Get statistics about conversation history and search capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force_refresh | No | Force refresh the cached status (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model to pull (default: nomic-embed-text) | nomic-embed-text |
| install | No | Install Ollama via Homebrew (requires Homebrew) | |
| pull_model | No | Pull the embedding model (nomic-embed-text) | |
| start_service | No | Start Ollama as a background service via brew services |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model to pull (default: nomic-embed-text) | nomic-embed-text |
| install | No | Download and install Ollama to ~/Applications (no sudo needed) | |
| pull_model | No | Pull the embedding model (nomic-embed-text) | |
| start_service | No | Start Ollama server (ollama serve) in background |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v1.0.0- First observed
cowork_history_get - First observed
cowork_history_list - First observed
cowork_history_projects - First observed
cowork_history_reindex - First observed
cowork_history_search - First observed
cowork_history_stats - First observed
history_ollama_status - First observed
history_setup_ollama - First observed
history_setup_ollama_direct - First observed
history_system_check
TDQS
Scored across 10 tools
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 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.
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.
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
Related MCP Connectors
Search your knowledge bases from any AI assistant using hybrid RAG.
Search and read your Laxis meeting transcripts, AI summaries, and participants from Claude.
Read-only search of your Sortio knowledge graph (files and entities) for Claude and ChatGPT.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables 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.-
- AlicenseNot gradedqualityCmaintenanceEnables 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 npm28MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving Claude Code conversation history via hybrid semantic and keyword search, allowing the agent to access its own past interactions.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching and browsing past Claude Code conversations directly from within an active Claude session, with full-text search and cost tracking.MIT