# Chronicle (pypi · chronicle-context)

Local screen and activity knowledge graph, served as context to computer-use agents.

- Trust score: 80/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `chronicle-context`: 80/100 (this document), [markdown](https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context.md), [page](https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context)

## Channel facts

- Registry: `pypi`
- Package: `chronicle-context`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it.
  - 0 of 15 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to aniketxdey/chronicle).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1943 tokens (~69/item across 28 items; 25 tools + 3 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 87/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 61% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 27 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Chronicle MCP server?

Chronicle runs locally as a PyPI package, launched with uvx chronicle-context mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add aniketxdey-chronicle -- uvx chronicle-context mcp
```

### Cursor

```json
{
  "mcpServers": {
    "aniketxdey-chronicle": {
      "command": "uvx",
      "args": [
        "chronicle-context",
        "mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "aniketxdey-chronicle": {
      "command": "uvx",
      "args": [
        "chronicle-context",
        "mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add aniketxdey-chronicle -- uvx chronicle-context mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aniketxdey-chronicle": {
      "type": "local",
      "command": [
        "uvx",
        "chronicle-context",
        "mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add aniketxdey-chronicle --command uvx --arg chronicle-context --arg mcp
```

### Hermes

```yaml
mcp_servers:
  aniketxdey-chronicle:
    command: "uvx"
    args: ["chronicle-context", "mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "aniketxdey-chronicle": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "chronicle-context",
        "mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add aniketxdey-chronicle -t stdio -c uvx -a chronicle-context mcp
```

### Other

```json
{
  "mcpServers": {
    "aniketxdey-chronicle": {
      "command": "uvx",
      "args": [
        "chronicle-context",
        "mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 80, +16)

- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Schema quality: 1264 → 1943
- [functional regression] Capabilities: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Stability: unverified → 0.07
- [functional] Package version: 0.2.0 → 0.3.0

### 2026-11-02 (score 64)

First indexed and scored.

## MCP tools (25)

### `list_harnesses` (~33 tokens)

List harnesses

The agent harnesses the user has built from their recordings, each for a line of work. Call this first.

### `get_harness` (~38 tokens)

Get harness

One harness: its AGENTS.md, which says how to use it, and the list of its files.

Input parameters:

- `id` (integer, required)

### `read_harness_file` (~65 tokens)

Read harness file

One file in a harness: AGENTS.md, a context file, or a workflow, with its small knowledge graph as text.

Input parameters:

- `id` (integer, required)
- `path` (string, required): A path from get_harness, like contexts/researching-companies.md.

### `search_harness_graph` (~48 tokens)

Search harness graph

Search a harness's knowledge graph engine: entities across its recordings, and the low-level system events that mention the words.

Input parameters:

- `id` (integer, required)
- `query` (string, required)

### `get_context_file` (~41 tokens)

Get context file

One context file: standing instructions for this kind of work, the workflows it refers to, and its knowledge graph as text.

Input parameters:

- `id` (integer, required)

### `get_workflow` (~47 tokens)

Get workflow

One workflow: when to run it, its inputs, the steps in order, what to confirm with the person first, and its knowledge graph as text.

Input parameters:

- `id` (integer, required)

### `get_graph` (~77 tokens)

Get knowledge graph

The knowledge graph of a recording, context file, or workflow, as nodes and edges in JSON or readable text.

Input parameters:

- `format` (string): Default md, which uses fewer tokens.
- `id` (integer): The recording, context file, or workflow id. Omit with kind recording for all history.
- `kind` (string, required)

### `get_context` (~200 tokens)

Get computer context

Context pack for a computer-use agent: what is on screen now, recent activity, habitual app/window transitions, the knowledge-graph entities relevant to the task, and cited evidence. Call this before acting.

Input parameters:

- `max_nodes` (integer): Graph nodes to include (4-80, default 24).
- `minutes` (integer): Only consider the last N minutes.
- `preset` (string): The kind of work, when one fits: general (General), data-analysis (Data analysis), job-applications (Applying to jobs), coding (Software development), research (Research), writing (Writing), meeting-…
- `session_id` (integer): Recording session id. Omit to use all history.
- `task` (string): What you are about to do, in plain words. Focuses the graph and evidence.

### `search_history` (~87 tokens)

Search history

Full-text search over captured screen text, system events, transcripts, and memories.

Input parameters:

- `app_name` (string)
- `content_type` (string)
- `end_time` (string)
- `limit` (integer): 1-50, default 10.
- `query` (string, required)
- `start_time` (string): ISO timestamp or relative like '2h ago'.

### `query_graph` (~79 tokens)

Query knowledge graph

Find knowledge-graph entities by text and/or kind, ranked by time spent and frequency.

Input parameters:

- `kind` (string)
- `limit` (integer): 1-100, default 20.
- `query` (string): Words to match against entity labels.
- `session_id` (integer): Recording session id. Omit to use all history.

### `get_entity` (~64 tokens)

Get graph entity

One knowledge-graph entity with its neighbors, relations, and evidence frames. Accepts an id like 'ticket:bill-142' or a label.

Input parameters:

- `id` (string, required)
- `session_id` (integer): Recording session id. Omit to use all history.

### `graph_summary` (~44 tokens)

Graph summary

Counts by entity kind, the top entities of each kind, and the most common transitions.

Input parameters:

- `session_id` (integer): Recording session id. Omit to use all history.

### `list_tasks` (~121 tokens)

List tasks

What the user was doing, as a timeline of tasks (e.g. 'researching Forbes AI 50 · Crusoe', 4m) segmented from screen activity by topic. Each task has start/end, a verb, top terms, a topic cluster shared with other stints on the same topic, the pages and entities involved, and evidence frame ids.

Input parameters:

- `session_id` (integer): Recording session id. Omit to use all history.
- `since` (string): Only tasks ending after this ISO timestamp or relative time like '2h ago'.

### `get_frame` (~59 tokens)

Get frame

One captured frame: app, window, URL, text, nearby events. With include_image=true, also the screenshot.

Input parameters:

- `frame_id` (integer, required)
- `include_image` (boolean): Attach the screenshot (JPEG or PNG) when one exists.

### `activity_summary` (~45 tokens)

Activity summary

Time per app, top windows, meetings, and a short narrative for a time range (default today).

Input parameters:

- `end_time` (string)
- `start_time` (string)

### `list_sessions` (~31 tokens)

List recordings

Recording sessions with status, duration, frame and event counts, and top apps.

Input parameters:

- `limit` (integer)

### `start_recording` (~128 tokens)

Start recording

Record the screen and system events (app switches, window focus, URLs, clipboard, idle) for a preset duration such as '5m', '30m', or '2h'. The graph for the session is built when it ends.

Input parameters:

- `duration` (string): How long to record, e.g. '10m', '1h30m'. Omit for until stopped.
- `interval_secs` (integer): Seconds between samples (1-600, default 5).
- `label` (string): What is being recorded, e.g. 'filing an expense report'.

### `stop_recording` (~43 tokens)

Stop recording

Stop the running recording (or the given one) and build its knowledge graph.

Input parameters:

- `session_id` (integer): Recording session id. Omit to use all history.

### `rebuild_graph` (~44 tokens)

Rebuild graph

Rebuild the knowledge graph for all history or one session from the stored frames and events.

Input parameters:

- `session_id` (integer): Recording session id. Omit to use all history.

### `graph_review` (~88 tokens)

Review graph for curation

One batch of the knowledge graph with the rules and op schemas for curating it yourself. Use with graph_apply when the user wants their graph organized, including when Chronicle has no model of its own.

Input parameters:

- `batch` (integer): Batch to read, from 0. The reply says how many there are.
- `session_id` (integer): Recording session id. Omit to use all history.

### `graph_apply` (~81 tokens)

Apply graph curation

Apply curation ops from graph_review to the local graph. Each op is checked, rejected ops come back with the reason, and tune_graph with reset=true removes them all.

Input parameters:

- `ops` (array, required): Ops as {name, arguments}, using the schemas graph_review returns.
- `session_id` (integer): Recording session id. Omit to use all history.

### `tune_graph` (~144 tokens)

Tune graph with an LLM

Have the configured LLM (see Settings > Model or CHRONICLE_LLM) review the heuristic graph and patch it: add real-world entities, typed relations, and activity summaries, merge duplicates, clean labels, drop noise. Patches survive rebuilds; reset=true removes them. Off unless an LLM provider is configured.

Input parameters:

- `force` (boolean): Ignore the response cache and the up-to-date check.
- `reset` (boolean): Remove all LLM patches for the scope instead of tuning.
- `rounds` (integer): Review passes (1-5, default 2).
- `session_id` (integer): Recording session id. Omit to use all history.

### `list_meetings` (~24 tokens)

List meetings

Meetings with speakers and transcript segments.

Input parameters:

- `limit` (integer)

### `search` (~29 tokens)

Search (connector)

Search Chronicle history and the knowledge graph. Returns ids to pass to fetch.

Input parameters:

- `query` (string, required)

### `fetch` (~42 tokens)

Fetch (connector)

Fetch the full record for an id returned by search (frame:N, audio:N, event:N, memory:N, node:<id>).

Input parameters:

- `id` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context#diagnostics

## Score history

- 2026-11-05: 80
- 2026-11-04: 80
- 2026-11-03: 64
- 2026-11-02: 64

## Common questions

### What is the Chronicle MCP server?

Chronicle is an MCP server listed in the public MCP registry as io.github.aniketxdey/chronicle. Local screen and activity knowledge graph, served as context to computer-use agents. This page covers its PyPI package (chronicle-context).

### Is the Chronicle MCP server safe to use?

Chronicle scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Chronicle MCP server expose?

Chronicle exposes 25 tools: list_harnesses, get_harness, read_harness_file, search_harness_graph, get_context_file, and 20 more. Their descriptions and schemas cost roughly 1,702 tokens of context every time the server is loaded.

### Is the Chronicle MCP server still maintained?

Chronicle is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Chronicle MCP server under?

Chronicle declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the Chronicle MCP server?

VerifyMCP ran 16 checks on Chronicle, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- PyPI project: https://pypi.org/project/chronicle-context/
- Socket report: https://socket.dev/pypi/package/chronicle-context
- Repository: https://github.com/aniketxdey/chronicle
- Changelog RSS feed: https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context.xml
- Changelog JSON feed: https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context.json
- HTML version of this page: https://verifymcp.io/servers/aniketxdey-chronicle/chronicle-context
