Unified History MCP
Click on "Install 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., "@Unified History MCPsearch all domains for 'error' in last 7 days"
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.
Unified History MCP
Config-driven MCP server for cross-domain full-text search across agent session logs, meeting transcripts, and notification files.
Quick Start
# Install from source (PyPI package coming soon)
pip install git+https://github.com/jmars/unified-history-mcp.git
# Create a config file at ~/.config/unified-history-mcp/config.toml
# or use the example as a starting point:
cp config.example.toml ~/.config/unified-history-mcp/config.toml
# Start the server
unified-history-mcpAdd to your MCP client configuration:
{
"mcpServers": {
"unified-history": {
"command": "unified-history-mcp"
}
}
}Related MCP server: Unified History MCP
Configuration
Configuration is loaded from the first existing location:
$UNIFIED_HISTORY_CONFIGenvironment variable~/.config/unified-history-mcp/config.toml./unified-history.toml(current working directory)
Domain Configuration
Each [domains.X] section defines a searchable domain:
Field | Type | Default | Description |
| string | required | Root directory for this domain's files |
| string |
| Glob pattern for file discovery |
| string |
|
|
| string[] |
| Allowed extensions (e.g. |
| string |
| Extractor: |
| string | (extractor) | Renderer override |
| string |
| Human label: "session", "transcript", etc. |
| string |
| Path or name of the FST indexer binary |
| string | (dir) | Override for index directory |
| string | — | JSON field for date extraction (jsonl only) |
| string[] |
| Supported filters: |
Global Configuration
Section | Field | Description |
|
| Path to command history file |
|
| Path to runtime log file |
MCP Tools
search(domain, query, ...)
Full-text search with FST fast path and regex fallback.
Parameter | Type | Default | Description |
| string |
| Domain or |
| string |
| Search text or regex pattern |
| int |
| Maximum total matches |
| string | — | Start date (YYYY-MM-DD) |
| string | — | End date (YYYY-MM-DD, inclusive) |
| bool |
| Treat query as regex |
| int |
| Surrounding context lines per match |
| bool |
| Case-sensitive matching |
| int |
| Max matches from any single file |
| string | — | [sessions] Filter by role: user, assistant, tool |
| string | — | [transcripts] Filter by speaker name |
list_domain(domain, date_from, date_to, max_results)
List available files in a domain with metadata.
Parameter | Type | Default | Description |
| string | — | Domain to list |
| string | — | Start date (YYYY-MM-DD) |
| string | — | End date (YYYY-MM-DD, inclusive) |
| int |
| Maximum entries to show |
read(domain, id, max_entries, role, speaker)
Read entries from a domain file.
Parameter | Type | Default | Description |
| string | — | Domain |
| string | — | File/directory name or unique prefix |
| int |
| Maximum entries (newest first) |
| string | — | [sessions] Filter by role |
| string | — | [transcripts] Filter by speaker name |
summary(domain, id)
Get the AI-generated summary for a domain entry.
Parameter | Type | Description |
| string | Domain (sessions, transcripts) |
| string | File/directory name or unique prefix |
rebuild(domain)
Rebuild FST indexes for configured domains.
Parameter | Type | Default | Description |
| string |
| Domain or |
search_history(query, max_results, regex, case_sensitive)
Search the command history file.
Parameter | Type | Default | Description |
| string | — | Search text or regex pattern |
| int |
| Maximum matches |
| bool |
| Treat query as regex |
| bool |
| Case-sensitive matching |
search_log(query, max_results, regex, case_sensitive, level)
Search the runtime log file.
Parameter | Type | Default | Description |
| string | — | Search text or regex pattern |
| int |
| Maximum matches |
| bool |
| Treat query as regex |
| bool |
| Case-sensitive matching |
| string | — | Filter by log level |
How It Works
Configuration — TOML file defines domains, their directories, extractors, and renderers.
Domain Discovery — Files are discovered via glob patterns with extension filtering.
Fast Path (FST) — If the optional
fst-indexerbinary is installed and indexes are built (via therebuildtool), searches use the blazing-fast FST index.Slow Path (Regex) — Falls back to line-by-line regex scanning across files when FST is unavailable.
Extractors — Produce text entries for FST indexing from different file formats (JSONL, TXT, Tactiq transcripts, notifications).
Renderers — Format entries for human-readable display in search results, listings, and read output.
Development
git clone https://github.com/jmars/unified-history-mcp.git
cd unified-history-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytestContributing
Contributions are welcome! See CONTRIBUTING.md for guidelines on setting up the dev environment, running tests, and submitting pull requests.
License
MIT — see LICENSE.
Available Tools
7 toolslist_domainA
List available files in a domain with metadata and summaries.
Args: domain: Domain to list (sessions, transcripts, notifications) date_from: Optional start of date range (YYYY-MM-DD) date_to: Optional end of date range (YYYY-MM-DD, inclusive) max_results: Maximum entries to show (default 50)
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| date_to | No | ||
| date_from | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description bears full responsibility for disclosing safety and side effects. The verb 'List' clearly implies a read-only operation, and the parameters are documented, but there is no explicit statement about permissions, return format beyond 'metadata and summaries', or any additional behavioral traits. With no annotations, the description offers only the basic expectation of a non-mutating listing operation.
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 single purpose sentence followed by a cleanly formatted Args block. There is no redundancy or filler. The front-loaded purpose makes the tool's intent immediately clear.
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 listing tool with an output schema present, the description covers the essential aspects: purpose and parameters. It does not mention sorting or pagination, but the output schema likely handles return structure. The main gap is the lack of usage guidance, which is already penalized in the usage guidelines dimension. Overall, the description is sufficiently complete for the tool's simplicity.
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 has zero descriptions, but the description adds meaningful semantics for every parameter. It enumerates allowed values for 'domain', specifies the date format and inclusivity for 'date_from' and 'date_to', and explains 'max_results' with its default. This fully compensates for the schema's lack of documentation.
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 opens with a clear, specific verb-resource pair: 'List available files in a domain with metadata and summaries.' This distinguishes it from sibling tools like search or read, which focus on content retrieval rather than enumeration. The domain values (sessions, transcripts, notifications) further clarify the resource 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 description provides no explicit guidance on when to choose list_domain over the sibling tools (search, read, summary, rebuild, search_history, search_log). The presence of the domain argument implies usage, but there is no mention of alternatives or exclusions. For example, it does not say 'Use this to enumerate files; use search to find specific content.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readB
Read entries from a domain file.
Args: domain: Domain (sessions, transcripts, notifications) id: File/directory name or unique prefix max_entries: Maximum entries to return, newest first (default 50) role: [sessions] Filter by role: user, assistant, tool speaker: [transcripts] Filter by speaker name
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| role | No | ||
| domain | Yes | ||
| speaker | No | ||
| max_entries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It mentions 'newest first' and default max_entries, but does not state that this is a safe read-only operation, how prefixes are matched, or any error/edge-case behavior. The description adds only minimal behavioral context.
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 one-sentence summary plus a concise, well-structured argument list. Each line provides necessary information with no redundancy or filler. The format is easy to scan and front-loads the purpose.
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 adequately covers parameter meanings for a tool with moderate complexity and an output schema. However, it lacks usage context, behavioral caveats, and explicit differentiation from siblings, leaving overall completeness somewhat shallow.
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 0% description coverage, so the parameter documentation in the description is essential. It explains each parameter with domain-specific details (e.g., role is for sessions, speaker for transcripts) and notes defaults and ordering behavior. This adds significant meaning beyond the bare schema.
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 'Read entries from a domain file', which is a specific verb and resource. It conveys the core action and target, but does not explicitly differentiate from siblings like 'search' or 'list_domain', leaving some ambiguity about when 'read' is the right choice.
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 no guidance on when to use this tool vs alternatives. It only documents parameters, with no mention of use cases, prerequisites, or exclusions. Sibling tools are not referenced or contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rebuildA
Rebuild FST indexes for configured domains.
Args: domain: Domain to rebuild, or "all" for all configured domains
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It discloses that the tool rebuilds (a mutation), but fails to mention side effects, potential downtime, whether the operation is reversible, or performance implications. This is insufficient for an agent to assess the risk of invocation.
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 with a clear Args section, front-loaded with the purpose. No redundant information.
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 is simple with one parameter, but the description lacks behavioral disclosures and usage guidance. It could be considered sufficient for a trivial tool, but the lack of side-effect documentation is a notable gap. The presence of an output schema aids but is not shown.
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 no descriptions, and the description compensates by explaining the 'domain' parameter: 'Domain to rebuild, or "all" for all configured domains.' This adds crucial meaning, clarifying the default value and the special 'all' option, which is essential 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 the specific verb 'Rebuild' and identifies the resource 'FST indexes' for 'configured domains', clearly distinguishing it from sibling tools like search, read, and list_domain. The action is unambiguous and not a tautology.
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 does not provide explicit guidance on when to use this tool versus alternatives. It implies usage for rebuilding indexes but does not mention exclusions or preconditions. The one-line purpose is clear, but there is no direction about when a rebuild is necessary or how to check current index state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search across domains with FST-backed full-text search.
Domains: sessions — Vibe coding session conversations transcripts — Meeting transcripts (supports speaker filter) notifications — Teams notification logs all — Search across all three domains at once (default)
Args: domain: Domain to search, or "all" for cross-domain (default: all) query: Search text (or regex pattern if regex=True) max_results: Maximum total matches to return (default 20) date_from: Optional start of date range (YYYY-MM-DD) date_to: Optional end of date range (YYYY-MM-DD, inclusive) regex: If True, treat query as a regex pattern context_lines: Lines of surrounding context per match (default 2) case_sensitive: If True, match case-sensitively (default False) max_matches_per_file: Max matches from any single file (default 5) role: [sessions] Filter by role: user, assistant, tool speaker: [transcripts] Filter by speaker name
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| query | No | ||
| regex | No | ||
| domain | No | all | |
| date_to | No | ||
| speaker | No | ||
| date_from | No | ||
| max_results | No | ||
| context_lines | No | ||
| case_sensitive | No | ||
| max_matches_per_file | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the search mechanism (FST-backed), domain definitions, and detailed parameter behaviors (regex, case_sensitive, role, speaker). However, it does not mention limitations or edge cases like what happens when using domain-specific filters with incompatible domains, or how results are ranked.
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 well-structured with clear sections for purpose, domains, and arguments. It is front-loaded with the core statement, and every line adds value. The length is justified because it documents 11 parameters with no schema descriptions.
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 is complex with 11 parameters and multiple domains, and the description covers all of them thoroughly. The existence of an output schema means return values need not be described. The only notable gap is the lack of guidance on combining domain-specific filters with incompatible domains, which leaves some ambiguity.
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 has 0% description coverage, so the description's Args section is essential. It covers all 11 parameters with plain-language explanations, defaults, and domain-specific hints (e.g., role for sessions, speaker for transcripts). This fully compensates for the schema's lack of descriptions.
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 opens with a clear statement 'Search across domains with FST-backed full-text search,' and then enumerates the specific domains (sessions, transcripts, notifications) and 'all' option. This makes the tool's purpose unmistakable and differentiates it from siblings like search_history and search_log.
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 implicit context about what domains are searched, but it does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or when-not-to-use. The sibling tools search_history and search_log are not referenced, so usage guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_historyA
Search the Vibe command history (vibehistory file).
Args: query: Search text (or regex pattern if regex=True) max_results: Maximum matches to return (default 30) regex: If True, treat query as a regex pattern case_sensitive: If True, match case-sensitively (default False)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| regex | No | ||
| max_results | No | ||
| case_sensitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, what side effects (if any) exist, or any details about the return behavior beyond the parameters. Since it only lists arguments and omits behavioral traits, transparency is weak.
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 opens with a clear one-sentence purpose followed by a structured argument list. Each argument explanation is short and directly to the point, with no wasted words. This is an efficient format for a tool with four parameters.
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 output schema exists (so return values are covered), the description lacks behavioral context such as whether the search is read-only, any sorting or result limitations beyond max_results, or the nature of the vibehistory file. It is minimally viable but leaves gaps in usage context and behavioral expectations.
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 0% description coverage, but the description thoroughly explains each parameter (query, max_results, regex, case_sensitive) with meanings and defaults. It clarifies the regex behavior ('treat query as a regex pattern') and case sensitivity defaults, adding significant value beyond the raw schema.
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 function: 'Search the Vibe command history (vibehistory file).' This uses a specific verb ('search') and resource ('Vibe command history'), and the parenthetical identifies the exact file. This distinguishes it from siblings like search_log, which targets logs, and generic search, by focusing on the history file.
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 context is clear: it is for searching command history. However, there is no explicit guidance on when to use this tool versus alternatives like 'search' or 'search_log'. No exclusions or alternative suggestions are provided, so the usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_logA
Search the Vibe runtime log (vibe.log).
Args: query: Search text (or regex pattern if regex=True) max_results: Maximum matches to return (default 30) regex: If True, treat query as a regex pattern case_sensitive: If True, match case-sensitively (default False) level: Filter by log level: WARNING, INFO, ERROR, DEBUG
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| query | Yes | ||
| regex | No | ||
| max_results | No | ||
| case_sensitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It lists parameters but does not describe return behavior, error handling, whether the operation is read-only, or operational constraints (e.g., log rotation, permissions). This leaves a behavioral gap.
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: a one-sentence purpose followed by a clean parameter list. Every line adds value, and the format is front-loaded with the tool's purpose.
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?
With an output schema present and all parameters documented, the description is mostly complete for a log-search tool. It lacks usage guidance and some behavioral context but covers the essential invocation details.
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?
Despite 0% schema description coverage, the description provides explicit meaning for all five parameters (query, max_results, regex, case_sensitive, level) including defaults and filtering behavior, fully compensating for the schema.
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 opens with a specific verb and resource: 'Search the Vibe runtime log (vibe.log).' This clearly identifies the tool's function and distinguishes it from generic 'search' or 'search_history' siblings.
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 usage when searching the Vibe log, but it does not explicitly say when to prefer this over sibling tools like 'search' or 'read', nor does it mention exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summaryA
Get the AI-generated summary for a domain entry.
Args: domain: Domain (sessions, transcripts) id: File/directory name or unique prefix
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only states 'Get', which implies a read operation, but does not explicitly confirm it is non-destructive or mention any side effects such as triggering summary generation if not already cached. No details about rate limits, permissions, or potential delays are provided.
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 minimal and front-loaded with the core purpose, followed by concise parameter explanations. There is no fluff; every sentence earns its place. The use of an Args block is clean and readable.
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 presence of an output schema covers return values, so the description need not explain them. For a simple getter tool with two parameters, the description is mostly complete. However, it lacks context about how 'summary' differs from 'read' or 'search', and does not address edge cases like missing summaries. This prevents a perfect score.
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 0%, so the description must compensate. It does so by defining 'domain' with example values ('sessions, transcripts') and clarifying 'id' as 'File/directory name or unique prefix.' This adds meaning beyond the bare schema and is genuinely helpful 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 clearly states the tool's function: 'Get the AI-generated summary for a domain entry.' This is a specific verb+resource pair and differentiates it from siblings like 'read' (which likely retrieves raw content) and 'search' (which looks for entries). The resource ('AI-generated summary') and scope (domain entry) are unambiguous.
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 no guidance on when to use this tool versus alternatives. It does not mention that this is the appropriate tool for retrieving summaries, nor does it exclude cases where 'read' or 'search' would be preferable. No contextual cues about preconditions or selection criteria are offered.
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.
7 tool updates
v0.1.0- First observed
list_domain - First observed
read - First observed
rebuild - First observed
search - First observed
search_history - First observed
search_log - First observed
summary
TDQS
Scored across 7 tools
Most tools are clearly distinct: list_domain enumerates files, read retrieves entries, summary provides AI-generated overviews, and rebuild manages indexes. The three search-related tools (search, search_history, search_log) could cause some confusion, but their descriptions clearly separate domain search from specific-file searches.
Naming conventions are mixed: some tools use single verbs (search, read, summary, rebuild) while others use verb_noun patterns (list_domain, search_history, search_log). 'summary' is a noun rather than an imperative verb, breaking the expected pattern. Overall, the names are readable but not uniformly styled.
With 7 tools, the server is well-scoped for its purpose of providing unified search and read access to historical data. Each tool serves a distinct function without unnecessary bloat, and the count is appropriate for the domain.
The tool set covers the core lifecycle for a read-only history server: searching, listing, reading, and summarizing entries, plus index maintenance. The only notable gap is that the summary tool does not support the notifications domain, and there is no explicit tool for configuring domains (though rebuild handles index updates).
Maintenance
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
Agent-driven search: build, import, tune, search, and score result quality — all over MCP.
MCP server for searching Airweave collections with natural language queries.
Verified business OSS MCP for search, RSS, crawling, documents, browser, media and transcription.
Related MCP Servers
AlicenseBqualityCmaintenanceMCP server that turns any audio or video source into structured, searchable intelligence for agents, enabling download, transcription, semantic search, speaker identification, and more.225MIT- AlicenseAqualityBmaintenanceConfig-driven MCP server for cross-domain full-text search across agent session logs, meeting transcripts, and notification files.71MIT
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for Elasticsearch log querying. Enables natural language search, filtering, context retrieval, and aggregation of logs.-
- FlicenseNot gradedqualityBmaintenanceMCP server that indexes local Claude Code transcripts and provides keyword, phrase, semantic, and date-range search, plus full context/session recall.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/palimpsest-labs/unified-history-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server