context-archive
Captures and searches local Arc browsing history as a Chromium-family browser, discovering all profiles containing a history database and preserving raw records, schemas, and source-linked events.
Captures and searches local Safari browsing history, including the main history database and supported Safari/container profile roots, preserving raw records, schemas, observation history, and source-linked events.
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., "@context-archivesearch my browsing history for python tutorials"
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.
Context Archive
A local macOS evidence archive for agents: Knowledge activity and the history databases of Safari, Chrome, Dia, and Arc, behind one CLI and read-only stdio MCP.
The collector preserves every observed table, column, blob, and revision in the selected databases. Searchable events are rebuildable interpretations with links to original rows. It does not capture screenshots, keystrokes, page contents, cookies, or passwords. Collection uploads nothing, opens no listening port, and requires no model or API key.
Install
Requires macOS. Clone and install:
git clone https://github.com/urcades/context-archive.git && cd context-archive && ./install.shOr, from an existing checkout:
./install.shThe installer uses uv, managed Python 3.12, and the committed dependency lock. It installs a non-editable runtime outside the checkout and a per-user LaunchAgent for five-minute collection. Installation starts collection unless --no-start is passed. The project source alone does not start anything.
./install.sh --no-start # prepare runtime and disabled LaunchAgent
./install.sh --codex # also register the stdio MCP with CodexRuntime, configuration, archive, and logs live under ~/Library/Application Support/ContextArchive/. Set CONTEXT_ARCHIVE_HOME to an absolute alternate directory. The original Knowledge Archive and Browser History Receiver repositories/services are independent and are not changed.
Full Disk Access may be required for Safari and Knowledge. The installer/doctor prints the permission executable: grant it access under System Settings → Privacy & Security → Full Disk Access. The actual launch command retains the virtual-environment executable so dependencies remain available. An interpreter upgrade may require a new grant.
CA_ROOT="${CONTEXT_ARCHIVE_HOME:-$HOME/Library/Application Support/ContextArchive}"
CA="$CA_ROOT/runtime/bin/context-archive"
"$CA" doctor
"$CA" statusInteractive readability is not proof of background access. After intentionally starting the service, inspect launchctl print gui/$(id -u)/local.context-archive, the collector logs, and a newly successful capture in status. An idle service between scheduled runs is normal. Missing/unreadable profiles and failed captures appear in diagnostics.
Related MCP server: sqlite-mcp-local
Preserve existing archives first
Import Knowledge history before starting native collection for the matching store. Its old observation history cannot safely be appended behind newer native snapshots; that case is rejected atomically with an explanation. Existing input archives are read-only and remain untouched.
./install.sh --no-start
"$CA" import knowledge "/path/to/KnowledgeArchive/data/archive.sqlite3"
"$CA" import browser "/path/to/browser-history.jsonl"
"$CA" install # explicitly enable background collection after importsKnowledge imports retain schemas, revisions, blobs, deletions, observation times, and legacy ID mappings. Repeating an import adds only unseen captures. A matching native Knowledge store continues the same evidence history.
Browser JSONL imports retain every original line, including malformed lines and unknown fields. Malformed lines are reported; valid records are still imported. Identical visits on different lines remain distinct. Reimporting the same artifact adds no visits; a verified complete-line prefix of an appended file at the same path is reused. Rewritten/truncated files or an extended unterminated line form a separate artifact lineage. Such imported records may overlap: provenance remains explicit rather than guessed away.
Legacy browser records contain selected visit fields, not full source databases. legacy_visit fidelity distinguishes these from new raw_database captures. The old receiver did not persist all origin metadata; imports do not invent it.
Discovery and configuration
Each cycle discovers Knowledge and browser profiles again. Safari includes its main history database and supported Safari/container profile roots; Chromium-family browsers include all profiles containing a history database under their known roots. Full profile identifiers survive discovery. Canonical aliases are deduplicated. Sources found only after an earlier visit timestamp are still fully scanned, so older history arriving through Safari sync is captured.
Optional config.json under the runtime root:
{
"sources": [
{"path": "/absolute/path/to/History.db", "adapter": "safari", "browser": "Safari", "profile": "custom-profile"}
],
"exclusions": ["/absolute/path/to/excluded-profile/*"]
}Explicit paths supplement discovery. Supported adapters are knowledge, safari, and chromium; legacy_browser is used by imports. Exclusions match absolute path globs. Use --config /absolute/config.json for a separate configuration.
Safari sync can bring mobile browsing into these local databases. Completeness means everything observed in readable databases on this Mac, not a guarantee of complete iCloud history or all mobile activity. Raw origin metadata is preserved without claiming it identifies an iPhone, iPad, or this Mac. Private browsing, upstream retention, sync delays, and missed capture windows remain outside that guarantee.
CLI and MCP
All query commands emit JSON and accept --params with the same arguments as the corresponding MCP tool. --archive PATH and --config PATH can precede or follow the command. Command --help lists the underlying parameter signature.
"$CA" capture
"$CA" timeline --params '{"start":"2026-01-01T00:00:00Z","end":"2026-01-02T00:00:00Z","limit":50}'
"$CA" search --params '{"text":"research","browser":"Safari"}'
"$CA" get-record --params '{"version_id":1}'
"$CA" app-usage-summary --params '{"start":"2026-01-01T00:00:00Z","end":"2026-01-02T00:00:00Z"}'
"$CA" domain-summary --params '{"fidelity":"raw_database"}'
"$CA" query --params '{"sql":"SELECT table_name, count(*) FROM records GROUP BY table_name"}'
"$CA" mcpMCP tool | Result |
| Capture health, discovery failures, source identities and fidelity |
| Source-linked events; indexed literal-token search over URL, title, domain, app and kind |
| Original row fields and binary values in bounded chunks |
| Bounded plist/JSON interpretation; original bytes remain retrievable |
| Captured schemas and bounded read-only SQL |
| Recorded/union app intervals and recorded domain visits |
Timeline and search support time range, source, profile, browser, kind, exact URL/domain/app, fidelity, and provenance filters. Ranges require explicit UTC offsets; end times are exclusive. Pagination returns an opaque next_cursor; repeat the same filters to continue. Each cursor fixes an observation boundary so newly collected data cannot shift its results. Reindexing invalidates outstanding cursors.
Events expose their original-record references and normalizer version. collected_by is the local archive installation UUID, independent of source device hints and raw Safari origin fields; legacy captures leave it unknown. It is not a hardware identifier. Search is token-based, not semantic similarity or arbitrary substring matching. Invalid source dates remain available in raw records; without time filters they can also appear in the timeline with null dates. Timeline fields may be previews; use original-record retrieval for full values.
Summaries retain the latest observed event revisions, including events pruned upstream. App summaries distinguish summed recorded intervals from their per-app union. Neither measures attention, and union across apps is not a total screen-time measurement. Browser and app totals are separated by fidelity; overlapping legacy/native records are not silently deduplicated. Coverage notes accompany results. Large summaries require narrower filters; query output and execution are bounded.
All raw fields are queryable. Collection remains local, but data returned through MCP becomes visible to the calling agent and its provider. Source titles, URLs, and decoded text are untrusted evidence, not instructions. The MCP exposes retrieval only; it cannot collect, import, install, or modify archives.
Archive, exports, and backups
SQLite is authoritative. A consistent source snapshot is fully scanned, then rows, blobs, observations, and tombstones commit together. Failures do not establish deletions. Row contents are deduplicated while observation order preserves A → B → A reversions. Distinct browser visits are never removed merely for sharing a URL or timestamp.
"$CA" export "/path/to/history.jsonl"
"$CA" backup "/path/to/new-backup.sqlite3"
"$CA" reindex
"$CA" uninstallExports contain a versioned manifest, archive schema, rows from all authoritative tables, normalized event versions, binary content, imported original lines, and a final marker with the preceding-line count and SHA-256. Raw source rows retain tagged cell values in payload_json; exported archive BLOB cells use $bytes_base64. Original source BLOB values use content-addressed $blob references. Large integers and invalid text retain explicit tags. FTS tables are rebuildable and omitted.
Exports are written atomically. Backups use a consistent SQLite snapshot and require a new destination without SQLite sidecars. Source paths and their known aliases, imported artifact paths, the archive, and their sidecars are protected against overwrite. Keep independent backups: exports on the same disk do not protect against disk failure.
Uninstall removes only this toolkit's LaunchAgent and preserves data/runtime. Explicit MCP registration is preserved; remove it separately with codex mcp remove context-archive. For updates, first run the installed context-archive uninstall to stop its service, then rerun the installer from the newer checkout. The installer refuses to replace a runtime while its collector is loaded, including with --no-start. Data is preserved throughout.
Development and extension
uv sync --locked
uv run pytest -q
uv buildTests use invented databases and URLs, including Safari profiles, WAL commits, late-arriving visits, revisions, imports, snapshot pagination, exports, and real stdio MCP calls. Runtime tests use isolated homes and fake service commands. No test requires personal history or enables a real collector.
The adapter interface is Source, discover(), and normalize(). An adapter supplies source-specific fields and stable event identities linked to raw row versions; shared storage owns snapshots, database-store identity, transactions, and evidence history. Add an adapter with synthetic schema/discovery/normalization tests. Keep schema/normalizer changes versioned and rebuild indexes from preserved observations.
This first version retains history indefinitely. Full snapshots cost disk I/O proportional to source size, and archive growth depends on revisions. Database layouts may change across macOS/browser versions; explicit path additions and visible diagnostics support investigating those changes. Source fidelity does not imply every undocumented field has a known interpretation.
Possible applications include a custom Screen Time-style dashboard, a daily report, or reconstructing a research session from source-linked events. No report automation or inferred session/project model is included.
License
MIT. Knowledge Archive and Browser History Receiver informed this implementation; the original projects remain independent.
Correlate activity across sources
episodes, projects, and project-timeline are available through both the JSON CLI and read-only MCP. They add explanations above the evidence archive; they do not modify collected records or require a model.
context-archive episodes --params '{"start":"2026-09-07T00:00:00-04:00","end":"2026-09-14T00:00:00-04:00"}'Episodes group event onsets within a five-minute gap, with at most one hour between the first and last onset by default. Change gap_seconds and max_span_seconds to explore different grouping assumptions. An app interval beginning before the requested range is clipped to the range for grouping; its original timestamps remain in the event. A long interval never bridges otherwise separate episodes. span_seconds measures first-to-last onset, not active time or website dwell time.
Each episode returns its events, raw evidence references, and distinct lanes for source, collecting installation, and provenance. A lane is not an inferred originating device. Safari sync and imported browsing remain visibly separate, even when their timestamps are close. Temporal proximity alone does not establish shared intent, attention, or causation.
For explicit project or subject associations, create a local JSON definition:
{
"id": "example-project",
"name": "Example project",
"rules": [
{"field": "url", "operator": "prefix", "value": "https://github.com/example/project"},
{"field": "title", "operator": "contains", "value": "Example project"}
]
}context-archive put-project /path/to/project.json
context-archive projects
context-archive project-timeline --params '{"project_id":"example-project","start":"2026-09-07T00:00:00-04:00","end":"2026-09-14T00:00:00-04:00"}'
context-archive episodes --params '{"project_id":"example-project","start":"2026-09-07T00:00:00-04:00","end":"2026-09-14T00:00:00-04:00"}'Rules are OR alternatives and literal, case-sensitive matches. Supported fields/operators: url exact/prefix; title exact/contains; domain, app_id, source_id, and profile exact. URL prefixes respect /, ?, and # boundaries, so /project does not match /project-other. Anchoring a shared app or domain may associate unrelated activity; use specific URLs or titles where possible. Events can match several projects, and every match names its project and zero-based rule indexes. These associations are user-authored interpretations, not verified work duration or exclusive classifications.
put-project atomically replaces the definition with the same ID. Set "enabled": false to disable it. Definitions are stored in an optional projects table inside the archive, survive reindexing, and are included in backups and JSONL exports made by this version. No personal definitions ship in the source. Reading an older archive requires no migration; the optional table is created only by the explicit editor. MCP cannot edit the registry.
Correlation queries require an explicit timezone-aware range of at most 31 days. They support source_id, profile, kind, fidelity, and provenance filters. Pagination fixes the capture boundary and rejects cursors after registry edits or reindexing. Episodes are assembled before pagination, so page boundaries do not split a group. Queries exceeding 10,000 events, 20 MB of input payloads, five seconds of scanning, or the response budget fail explicitly: narrow the range/filter, or use the existing paginated timeline for individual events. Invalid dates remain available as original evidence but cannot participate in temporal grouping.
Available Tools
14 toolsapp_usage_summaryDRead-only
App usage summary; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| app_id | No | ||
| browser | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false. The description adds only the word 'bounded,' which suggests a limit on results but does not explain pagination, rate limits, or output format. This is minimal added value beyond the annotations, with no contradiction.
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 short sentence, which is front-loaded but severely under-specified for a tool with 9 parameters. It is not effectively concise because it omits critical information, making it inadequate rather than concise.
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 complexity (9 optional parameters, no output schema, no parameter descriptions), the description is completely inadequate. It provides no information about what the summary contains, how filters behave, or what the response looks like, leaving the agent with no guidance for correct invocation.
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% – the schema provides no descriptions for any of the 9 parameters (start, end, limit, app_id, browser, profile, fidelity, source_id, provenance). The description also fails to explain any of these parameters, offering no semantic meaning to guide the agent.
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 states 'App usage summary; bounded read-only archive retrieval,' which gives a verb (retrieval) and resource (app usage summary) but lacks specificity about what constitutes the summary or how it differs from similar siblings like domain_summary or query. It is not a tautology but remains vague.
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 any conditions, exclusions, or sibling tools, leaving the agent to infer usage solely from the name and the read-only annotation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_blobCRead-only
Decode blob; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'read-only' is redundant. It adds 'bounded' which hints at limit/offset behavior, and 'archive retrieval' provides context about the data source. However, it does not disclose error behavior, pagination semantics, or what exactly 'decode' entails. With annotations covering safety, the description adds marginal value.
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 with zero waste. It immediately states the verb and resource, then adds a concise qualifier. It earns every word and is appropriately brief for a simple tool.
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 tool with no output schema and three parameters, the description is insufficient. It does not clarify what a blob is, what 'decode' produces, how hash relates to a blob, or the meaning of limit/offset. Given the sibling 'get_blob', the agent may confuse the two. The description lacks critical information needed to call the tool correctly.
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 three parameters (hash, limit, offset). The term 'bounded' vaguely suggests limit/offset, but the agent receives no clarity on what 'hash' refers to, what units limit/offset use, or their effect. The description fails to compensate for the lack of schema 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 states 'Decode blob; bounded read-only archive retrieval' – a clear verb ('decode') and resource ('blob') with a clarifying qualifier ('bounded read-only archive'). It distinguishes from the sibling 'get_blob' by implying decoding rather than raw retrieval, though it does not explicitly name an alternative. This is clear but not maximally differentiated.
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 offers no guidance on when to use this tool versus siblings like 'get_blob', 'search', or 'query'. There is no mention of conditions or exclusions. The phrase 'bounded read-only' implies a read-only context, but it does not specify when to choose this over other retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_schemaCRead-only
Describe schema; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'read-only'. It adds 'bounded' to hint at limit/offset behavior, which is useful context not in annotations. However, it does not disclose what the schema content looks like or what the response contains.
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 short sentence, which is concise and front-loaded. However, the phrase 'bounded read-only archive retrieval' is awkward and only loosely connected to the act of describing a schema. It is not verbose, but it could be clearer without adding length.
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 no output schema and no parameter descriptions. The description does not explain what the returned schema looks like, how limit/offset affect it, or what 'schema' means in this context. An agent lacks key information to correctly interpret the tool's output or know what to expect.
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 for the undocumented limit and offset parameters. 'Bounded' is a weak hint that these parameters control the result size, but it does not explain that limit/offset are for pagination or how they affect the returned schema. The description is insufficient for an agent to understand parameter semantics.
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 states a specific verb and resource: 'Describe schema'. It adds 'bounded read-only archive retrieval' which clarifies the operation is read-only and paginated. However, it does not differentiate from siblings like get_record or query, and 'schema' is not explicitly tied to the archive context.
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 such as query or get_record. There are no stated use cases, prerequisites, or conditions that would help an agent choose this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_summaryCRead-only
Domain summary; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| domain | No | ||
| browser | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose readOnlyHint=true and destructiveHint=false, and the description's 'read-only' simply repeats that. The word 'bounded' adds a small behavioral expectation of limited scope, but there is no detail on pagination, truncation, rate limits, or how bounds are applied, so the added transparency is minimal but not contradictory.
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 text is short, but it achieves brevity by omitting necessary information. 'Domain summary' is redundant with the tool name, and 'read-only' duplicates the annotation, leaving the description as an under-specified fragment rather than a concise, information-dense explanation.
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 tool with 9 parameters, no output schema, and no parameter descriptions, this definition is far too thin. An agent cannot know what a domain summary represents, which arguments to supply, what the return value looks like, or how to select appropriate values for filters like fidelity or provenance.
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 9 optional parameters with zero descriptions, and the tool description names none of them. 'Bounded' weakly suggests that start/end/limit control scope, but fidelity, source_id, provenance, browser, profile, and domain are left entirely unexplained, so the description does not compensate for the 0% schema description coverage.
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 names a generic operation, 'bounded read-only archive retrieval,' so it is not a pure tautology, but it never explains what a 'domain summary' actually contains or how it differs from siblings like search, query, timeline, or app_usage_summary. The purpose remains vague: an agent can tell it retrieves something from an archive, but not what makes this summary distinct or what output to expect.
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?
There is no guidance about when to use domain_summary versus alternatives, no exclusions, and no mention of prerequisites. With 14 sibling tools and no selection criteria, an agent has no basis to choose this tool over search, query, or app_usage_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
episodesCRead-only
Temporal groups within a timezone-aware window, with source lanes and evidence. Not dwell time or causal links. Narrow the window if a budget is exceeded.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| kind | No | ||
| limit | No | ||
| start | Yes | ||
| cursor | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| project_id | No | ||
| provenance | No | ||
| gap_seconds | No | ||
| max_span_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds some behavioral context: results are timezone-aware, grouped into temporal groups, and include source lanes and evidence, and there is a budget-related constraint. However, 'budget' is undefined, and the description does not clarify ordering, pagination, or how grouping thresholds like gap_seconds/max_span_seconds affect 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 short and the main concept is placed first, which is good. However, it relies on unexplained jargon ('source lanes', 'evidence', 'budget') and the final sentence is more of an imperative than a clear specification. It is concise but not optimally structured for comprehension.
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?
This is a 12-parameter tool with no output schema and no per-parameter descriptions, so the description carries a large burden. It does not explain return shape, pagination, parameter semantics, or how the grouping thresholds work. An agent cannot reliably call this tool correctly from the provided definition alone.
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 for 12 undocumented parameters. It only hints at a time window (start/end) through 'timezone-aware window' and at a limit concept through 'budget', but it does not explain kind, fidelity, profile, source_id, project_id, provenance, gap_seconds, max_span_seconds, or cursor. This is far below what is needed for an agent to choose and fill parameters correctly.
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 identifies a distinct resource ('temporal groups within a timezone-aware window, with source lanes and evidence') and explicitly excludes dwell time and causal links, which gives some conceptual separation from siblings. However, it lacks an explicit verb like 'return' or 'list', and 'temporal groups' is vague without knowing the domain. It does not clearly differentiate from similar sibling tools like timeline or project_timeline.
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 one actionable usage rule: narrow the window if a budget is exceeded. It also negatively scopes the tool by saying it is not dwell time or causal links, which helps avoid misuse. But it does not state when to prefer this tool over siblings such as timeline, query, or project_timeline, nor does it describe prerequisites or contexts where this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blobCRead-only
Get blob; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's 'read-only' adds no new information. The term 'bounded' hints at pagination (limit/offset) but is too vague to disclose actual behavior like error handling or data size limits. With annotations present, the bar is lower, but the description adds minimal 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?
One short sentence is technically concise, but it is under-specification rather than effective conciseness. There is no front-loading of key information beyond the name, and the structure offers no scannable detail for the agent.
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 tool with 3 parameters, no output schema, and a sibling decode_blob, the description is grossly incomplete. It does not define what a blob is, what 'archive' refers to, how to obtain a hash, or what the response contains. An agent cannot reliably use this tool without external knowledge.
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 explain parameters. It does not mention 'hash', 'limit', or 'offset' at all. The word 'bounded' vaguely implies limits, but the agent gets no guidance on what 'hash' identifies or how pagination works. This is a significant gap.
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 verb 'Get' and resource 'blob' clearly state the action, and 'bounded read-only archive retrieval' hints at scope. However, it does not differentiate from siblings like decode_blob or search, leaving the agent to guess which tool fits a given need.
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 on when to use this tool versus alternatives. It never mentions decode_blob for decoding or search/query for broader retrieval. The agent must infer usage from context, which is weak for a tool with a sibling named decode_blob.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordBRead-only
Get record; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| version_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not required to repeat safety. It adds context by mentioning 'bounded' (implying limit/offset behavior) and 'archive retrieval,' which goes beyond the annotations. No contradiction with 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 with no filler. It is appropriately concise for the limited content it provides, though the brevity contributes to the lack of substantive detail.
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 three parameters, no output schema, and zero parameter descriptions in the schema, the description leaves critical gaps. The agent does not learn what version_id refers to, how limit/offset behave, or what the return format is. Annotations cover safety but not operational details, so the description is far from complete for safe and correct invocation.
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 makes no mention of the three parameters (version_id, limit, offset). The agent receives no guidance on what these mean or how to use them. The description entirely fails to compensate for the lack of parameter 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 states a specific verb (get) and resource (record), and adds context with 'bounded read-only archive retrieval.' It is clear what the tool does, though it does not explicitly differentiate from sibling tools like get_blob. The word 'bounded' hints at pagination but leaves some ambiguity about the exact record type.
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 for read-only archive access but does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The 'bounded' and 'read-only' cues provide some guidance but leave the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projectsARead-only
Read explicit project rules. Rule matches are associations, not proof of work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The sentence 'Rule matches are associations, not proof of work' adds an important behavioral caveat beyond the annotations, telling the agent how to interpret results correctly.
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 the main purpose front-loaded and a critical caveat in the second sentence. Every word earns its place; no fluff 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 low-complexity, read-only, zero-parameter tool, the description provides the essential purpose and a key interpretation caveat. It could elaborate on what 'project rules' encompass, but the core requirements for correct invocation are met.
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 the schema covers all aspects (100% coverage). The description adds no parameter-specific meaning because there are none to document, matching the baseline for 0 params.
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 states a specific action ('Read') and resource ('explicit project rules'), making the core purpose clear. It does not explicitly name sibling tools for differentiation, but the phrasing distinguishes it from tools like project_timeline or status.
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 used when one needs to read explicit project rules, but provides no explicit when/when-not guidance or alternatives. It does not mention how it relates to sibling tools, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_timelineCRead-only
Find events associated by explicit project rules; each match explains its rule indexes and links to evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| kind | No | ||
| limit | No | ||
| start | Yes | ||
| cursor | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| project_id | Yes | ||
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by saying each match exposes rule indexes and evidence links, but it does not address pagination, cursor/limit behavior, or what 'explicit project rules' means operationally.
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 purposeful sentence with no filler, and it front-loads the core action before the output detail. It could be slightly clearer in phrasing, but it is appropriately concise for its size.
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?
A 10-parameter tool with no output schema and no parameter descriptions requires far more context than this. The single sentence gives a useful output hint but leaves required date-range semantics, filtering options, pagination, and sibling-tool selection entirely undocumented.
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 compensate. It never clarifies the meaning of required parameters like project_id, start, and end, nor optional filters like kind, source_id, profile, fidelity, or provenance. The agent is left to infer all parameter semantics from bare property names.
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 states a specific verb ('Find') and resource ('events') and adds distinctive detail: matches explain their rule indexes and link to evidence. It is clear on its own, but it does not explicitly distinguish itself from siblings like timeline, search, or query, so it stops just short of a top score.
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?
There is no guidance about when to use this tool versus related tools such as timeline, search, or query. The phrasing implies a project-rule-focused lookup, but no conditions, exclusions, or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryCRead-only
Query; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| limit | No | ||
| offset | No | ||
| parameters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'read-only' matches them without contradiction. The 'bounded' qualifier adds a small signal that query limits apply, but the description does not disclose query semantics, allowed SQL statements, rate limits, or error 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 compact and front-loaded, with no filler words. However, 'Query;' largely repeats the tool name, and the fragment structure leaves out useful segmentation that a fuller description could provide.
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?
This is a generic query tool with 4 parameters, no schema descriptions, and no output schema, yet the entire description is one short phrase. It leaves SQL dialect, return shape, pagination semantics, accepted statement types, and relationship to sibling tools unexplained, so it is not complete enough for reliable invocation.
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 mention sql, limit, offset, or parameters at all. The agent is left to infer what the required 'sql' string should contain, how 'parameters' bind, and how limit/offset behave.
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 phrase 'bounded read-only archive retrieval' identifies the domain (archive) and the general action (retrieval), so the description is not empty. However, it reads as a noun phrase rather than a concrete statement of what the tool executes, and it does not mention SQL or distinguish this tool from siblings like 'search' or 'get_record'.
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 when-to-use guidance, no alternatives, and no exclusions. 'Read-only' implies the tool is safe for retrieval, but it does not explain why an agent should choose this tool over the sibling tools such as search, describe_schema, or get_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchCRead-only
Search; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| url | No | ||
| kind | No | ||
| text | Yes | ||
| limit | No | ||
| start | No | ||
| app_id | No | ||
| cursor | No | ||
| domain | No | ||
| browser | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds 'bounded' and 'archive' context, implying constrained result sets and an archive-scoped read operation. It does not disclose pagination behavior, cursor semantics, or how filters are applied, but it is consistent with 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 extremely short and front-loaded, but it is under-specified rather than genuinely concise. A four-word clause cannot carry the necessary behavioral and parameter context for a tool of this complexity.
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 14 parameters, no output schema, and no parameter explanations, the description is far from complete. It gives no sense of return values, pagination, filter semantics, or how to distinguish this tool from its siblings. The read-only annotation helps with safety but not with correct invocation.
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 carries full responsibility for explaining any of the 14 parameters, yet it names none. Even the single required parameter 'text' is not described. This is a critical gap for an agent trying to construct a valid call.
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 names a verb ('Search') and a broad resource ('archive'), and adds useful qualifiers ('bounded read-only'). However, it does not specify what exactly is searched, what is returned, or how it differs from sibling tools like 'query' or 'get_record'.
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?
There is no guidance about when to use this tool versus alternatives such as 'query', 'get_record', or 'timeline'. No exclusions or selection conditions are provided. The read-only hint already comes from annotations, so the description adds no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourcesCRead-only
Sources; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds 'bounded' and 'archive' context, implying pagination and historical data, but doesn't disclose behavior like return format, sorting, or what 'sources' means. It's not contradictory but adds limited value beyond 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?
It's a single concise sentence with no filler, and the key qualifiers ('bounded', 'read-only', 'archive') are front-loaded. It is efficient but perhaps too terse to convey enough meaning. Still, for conciseness it earns a high score on efficiency.
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 simple pagination parameters and no output schema, description should clarify what 'sources' are, the return format, and how to use it. It does none of these, leaving an agent uncertain about the tool's purpose and expected behavior. Incomplete for correct invocation.
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 description should compensate by explaining limit and offset. It only says 'bounded', hinting at pagination but not explicitly describing the parameters, their defaults, or how they affect results. This is insufficient for a tool with undocumented 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?
Description says 'Sources; bounded read-only archive retrieval.' It identifies a resource (sources) and states it is an archive retrieval with pagination and read-only access. However, it doesn't specify what 'sources' refers to or exactly what retrieval operation is performed (list? get all?), and it doesn't differentiate from siblings like 'search' or 'query'.
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 on when to use this tool versus alternatives. It mentions 'bounded read-only archive retrieval' but doesn't state scenarios, prerequisites, or exclusions. It doesn't reference other tools, leaving an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusCRead-only
Status; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the 'bounded' qualifier and 'archive' scope, but does not disclose pagination behavior, ordering, result shape, or any archive-specific constraints, so it adds only modest value beyond 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 text is front-loaded and brief, with no filler. It is not merely a tautology, but it is so abbreviated that it sacrifices useful detail, making it minimally acceptable rather than well-rounded.
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 tool with no output schema and 0% parameter coverage, the description leaves too much open: what 'status' means, what kind of archive is retrieved, how results are ordered, and why it should be preferred over overlapping siblings. The simple parameter list does not compensate for this absence.
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 explain limit and offset, but it only says 'bounded.' An agent cannot tell what the values mean, what defaults do, or how pagination behaves.
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 identifies a read-only archive-retrieval operation with bounded results, so an agent can infer the tool's basic function. However, 'Status' is not elaborated and nothing distinguishes this from siblings like query, timeline, or get_record, all of which could be archive retrievals.
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 when-to-use guidance is given, and no alternatives or exclusions are named despite a large sibling set (query, search, timeline, episodes, get_record). The only hint is that this is bounded and read-only, which is not enough to choose it over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timelineCRead-only
Timeline; bounded read-only archive retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| url | No | ||
| kind | No | ||
| limit | No | ||
| start | No | ||
| app_id | No | ||
| cursor | No | ||
| domain | No | ||
| browser | No | ||
| profile | No | ||
| fidelity | No | ||
| source_id | No | ||
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description's 'read-only' simply repeats the annotation, and 'bounded' only vaguely hints at limits/pagination without explaining what bound applies or what the tool returns.
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 short and avoids wasted words, but it is under-specification rather than genuine conciseness. 'Timeline;' repeats the tool name, and the remaining fragment does not earn its place because it omits essential operational guidance.
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 13 parameters, no output schema, and no explanation of return values, pagination behavior, or archive scope, this description is far from complete. An agent cannot reliably invoke or interpret this tool from the information provided.
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 contains no parameter information. With 13 parameters, mostly untyped nullable strings, the description fails entirely to clarify what start, end, kind, cursor, fidelity, provenance, or the other parameters mean.
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 identifies a resource ('archive') and an action ('retrieval') and adds 'bounded read-only,' so it is not a pure tautology. However, it never defines what 'timeline' means in this system or what kinds of records it returns, and it does nothing to distinguish itself from siblings like project_timeline, episodes, query, or search.
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?
There is no guidance about when to use this tool versus any alternative. Sibling tools such as project_timeline, search, and episodes suggest overlapping capabilities, but the description provides no selection criteria or exclusions.
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.
14 tool updates
v0.2.0- First observed
app_usage_summary - First observed
decode_blob - First observed
describe_schema - First observed
domain_summary - First observed
episodes - First observed
get_blob - First observed
get_record - First observed
project_timeline - First observed
projects - First observed
query - First observed
search - First observed
sources - First observed
status - First observed
timeline
TDQS
Scored across 14 tools
Many tools share the exact same description prefix 'bounded read-only archive retrieval,' making it difficult to distinguish e.g. search from query, or timeline from episodes from project_timeline. A few tools are clearer, but the set has notable overlapping retrieval purposes.
Naming is inconsistent: single-word nouns like 'status' and 'sources' sit alongside verb-prefixed names like 'get_record' and 'decode_blob,' compound nouns like 'app_usage_summary,' and multiword names like 'project_timeline.' No consistent verb_noun or noun_noun convention is maintained.
Fourteen tools is within a reasonable range for an archive-retrieval server. The count feels slightly padded because several tools may overlap, but it is not excessive or clearly under-scoped.
The tool set covers core retrieval operations, schema introspection, blob decoding, and timeline/summary views, which is plausible for a read-only archive. However, there are gaps such as no obvious listing/enumeration of available sources or archives, and the relationship between query, search, and get_record is unclear enough to create potential dead ends.
Maintenance
Related MCP Connectors
Read-only MCP access to authorized Vocci sessions, notes, files, and memory search.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables querying macOS Screen Time data to retrieve app usage, hourly breakdown, and custom SQL queries through MCP.2MIT
- FlicenseNot gradedqualityBmaintenanceEnables read-only querying of a local SQLite database via MCP, with tools to list tables, retrieve schema, and execute SELECT/WITH/EXPLAIN queries.-
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to read and search macOS Messages history through a read-only MCP interface.-
- FlicenseNot gradedqualityCmaintenanceEnables querying enterprise records and retention policies from any MCP client over stdio, with read-only tools for searching records, fetching retention verdicts, identifying archival candidates, summarizing departments, forecasting retentions, and viewing audit history.-