Unified History MCP
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"
}
}
}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.
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