Wire the historical-event explorer into Claude via the Model Context Protocol so an AI can read events, traverse relationships, and write reports.
This site ships with an MCP server (mcp/server.js) that exposes the same SQLite database the timeline reads from. Pointing Claude at it gives the model 12 tools — search, fetch, traverse, subgraph extraction, report-context formatting — plus a write_report prompt template and every topic-pack JSON file as a browsable resource.
From the repo root:
npm install
npm run mcp
You should see [mcp] historical-event-explorer ready on stdio. Hit Ctrl-C — you don't run it manually; Claude launches it. This was just a sanity check.
| Mode | When to use |
|---|---|
| Remote (HTTP) | The hosted instance (this site) exposes MCP over HTTP at /mcp. Use this if you don't have the repo checked out locally — works from anywhere with a token. See below. |
| Local (stdio) | You have the repo cloned and want Claude to spawn the server directly. No network, no auth. See below. |
Endpoint:
https://hts.michiganpublic.tech/mcp
Auth: bearer token. If you're the operator, fetch it from the cluster:
kubectl -n hts get secret hts-secrets -o jsonpath='{.data.admin-token}' | base64 -d
Otherwise ask the deployer for it. Then:
claude mcp add --transport http historical-events https://hts.michiganpublic.tech/mcp \
--header "Authorization: Bearer YOUR_TOKEN_HERE"
Add to claude_desktop_config.json under mcpServers:
{
"mcpServers": {
"historical-events": {
"transport": {
"type": "http",
"url": "https://hts.michiganpublic.tech/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}
}
add_event, delete_event, add_relationship) edit the live database. Treat the token like a database password.
Replace the path with the absolute path to mcp/server.js in your local checkout.
claude mcp add historical-events node /absolute/path/to/historical_data_visualization/mcp/server.js
Open your Claude Desktop config (Settings → Developer → Edit Config, or directly):
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd the historical-events entry under mcpServers (replace the path):
{
"mcpServers": {
"historical-events": {
"command": "node",
"args": ["/absolute/path/to/historical_data_visualization/mcp/server.js"]
}
}
}
Save, fully quit Claude Desktop, and reopen it. The hammer/plug icon should show historical-events connected.
In a new chat, ask Claude something like:
list_topics)build_report_context with topic epstein-network- at 1 hop and write me a 600-word report."jr-confirmed-chief-2005 and vra-shelby-county-v-holder-2013."flock- subgraph at 2 hops and tell me what kinds of organizations show up most often in the relationships."Or if your client surfaces MCP prompts, pick the write_report prompt directly and pass a topic — Claude will receive a pre-formatted briefing and produce a report in one round trip.
list_topics — discover which subjects (id-prefixes) the dataset covers, with counts and sample titles.list_events — filter by category, date range, query, tags, or id-prefix.get_event — one event with its inbound + outbound relationships.get_events_bulk — fetch many events by id in one call.find_related — one-hop neighbors of an event.find_path — shortest relationship chain between two events.get_subgraph — N-hop subgraph from a seed (events + the relationships among them).build_report_context — same as get_subgraph but pre-formatted as a Markdown briefing for direct paste into a model prompt.stats — counts by category and era, time range, totals.add_event / add_relationship — write operations on the local SQLite DB (additive only — no delete_event; deletion is disabled at every layer including the database itself). Be careful exposing even additive write tools to an AI you don't trust.The server also exposes every topic-pack JSON file under data/ as a readable MCP resource (history://data/<file>.json) plus the app config (history://config), so a client can browse the raw seeds. And there's one templated prompt — write_report — taking topic, angle, and hops arguments; it returns a user-message with the briefing already inlined.
add_event, delete_event, add_relationship) lands in the same SQLite file the site reads from. Treat it as you would a writable database connection.
node is on your PATH for the shell Claude spawns. On macOS, Claude Desktop sometimes doesn't inherit your shell PATH — give the full path (e.g. /usr/local/bin/node or /opt/homebrew/bin/node) instead of bare node.data/events.db from the JSON files; after that it's fast. If it never finishes, run npm run seed manually and check the output.data/ directory.npm run mcp in a terminal and paste JSON-RPC calls into stdin to interact directly. Logs go to stderr.