MCP Server · Gated Beta
Narrative context for AI agents.
WolfTone tracks the competing narratives in the news coverage of an issue. Its MCP server hands that to an agent as sixteen tools: which narratives are live on a topic, how each one frames it, how much of the coverage it holds, and whether a draft is about to land on one.
Where a narrative-intelligence vendor's MCP server returns a risk label for a text or an image, this one hands over the structure: the competing frames, their mass, and their history. Access is a gated beta for design partners.
One call
An agent asks about a topic and gets the narratives back as structured frames, not a sentiment score. Each frame names who is involved, where and when, what the tension is, and what response the narrative points toward; beside it sit how much attention the narrative commands, how much evidence carries it, and how many outlets that evidence spans (counted over the evidence still retained, so after a purge it can be narrower than the lifetime evidence count). One result, with illustrative values:
narrative_context(topic="AI safety regulation", limit=3, api_key="<your key>"){
"topic": "AI safety regulation",
"count": 1,
"narratives": [
{
"id": "a3f8b2c1",
"label": "Industry self-regulation push",
"story": "Industry groups urged regulators to adopt voluntary standards before legislating",
"frame": {
"who": "Tech industry leaders",
"where": "Silicon Valley",
"when": "Post-AGI announcement era",
"tension": "AI safety regulation is too slow",
"response": "Industry self-governance via standards bodies"
},
"relevance": 0.91,
"attention_mass": 4.28,
"evidence_count": 47,
"distinct_sources": 19,
"source_diversity": 0.40,
"status": "active"
}
]
}The tools
All sixteen registered tools, each with the status our own serviceability audit gives it. Nothing here is hidden behind a demo build.
Ask what is live
Retrieval over the active narratives: what the coverage of an issue is made of right now.
get_zeitgeistworkingThe top active narratives by coverage mass, with the field's entropy: how concentrated or fragmented the whole picture is.
narrative_contextprovenA topic in, the competing narratives on it out: each as a one-line story and a structured frame (who, where, when, the tension, the response) with relevance, attention mass, evidence count and source diversity.
follow_scentexperimentalRanks narratives against a query by a foraging-rate heuristic: similarity times mass, boosted for recency and discounted by size. It does not measure whether a narrative is still yielding new material.
Check a draft
Pre-flight for an agent that publishes: does this text land on a live narrative, and how big is it?
check_cognitive_safetyworkingDraft text in, the nearest live narrative out, with its similarity and mass, and a flag when the mass is high enough to matter.
decompose_narrativeworkingAny text to a single five-dimension frame. It does not search the narrative index, but the server it runs in still starts against its database.
classify_signalexperimentalDecomposes an external signal into the same frame space and says what the stream would do with it (absorb, seed or resurrect) with the deciding similarity, against the configured threshold: a deployment that adapts its live threshold per tick can classify borderline signals differently, and the result says so. Nothing is persisted. For agent-to-agent interop.
Follow one narrative
History and composition for a narrative an agent already holds the id of.
get_narrative_trajectoryworkingThe narrative's current state: status, mass now, when it was first and last seen, its frame, and the member events still retained, each with its timestamp and source. Retention purges old members, so the list can be shorter than the lifetime count. For the mass history, see get_mass_snapshots.
narrative_provenanceworkingWhich outlets carried the narrative first and which picked it up later, in order of arrival, grouped by source stratum. Arrival, not authorship: a backfill can reorder it, and where old members have been purged it is the earliest retained arrival, not the first over the narrative's lifetime.
get_mass_snapshotsworkingThe narrative's mass as a time series between two dates: how it moved.
get_article_amplitudeworkingHow widely one article was carried within the dedup window, or the same for a narrative's retained articles, loudest first, up to a limit (50 by default) with a flag when more exist.
get_endogeneityexperimentalA Hawkes branching ratio: how much of the narrative's activity is self-sustaining rather than driven from outside.
get_regime_eventsexperimentalChange-points in the whole field's entropy, from a CUSUM scan. Field-level, not per narrative, and unvalidated.
check_resurrection_riskexperimentalQueries the shadow index of dormant narratives: is this text waking one up?
Scope to a partner
A feed is a partner's own slice of the engine, provisioned from a scoped corpus into an isolated store.
create_feedearlyAllocates a feed and its store. Off by default: it creates a database, so an operator turns it on deliberately.
list_feedsearlyThe feeds registered to the caller.
query_feedearlyA narrative_context-style answer confined to one feed's store: the frame and the scores, without the story line. Today a feed is a snapshot of what was provisioned, not a live view.
- proven
- the embedding matching behind it, run offline rather than through this tool, found the right narrative for 8 of 10 reviewed market questions (the two misses were caught in review), and the check is written up
- working
- implemented and tested; not separately validated
- early
- works, with the limits named beside it
- experimental
- exposed for interop; treat the numbers as unvalidated
How it runs
- Standard MCP, stdio transport. Your MCP client spawns the server as a subprocess: Claude Desktop, Cursor, or your own agent through the MCP SDK. There is no WolfTone-specific client.
- It runs beside your data. The server is a process next to the PostgreSQL database that holds the narrative state; the client that spawns it supplies the connection. Beside the SaaS default, the engine's Helm chart ships two restricted postures for the rest of the stack: sovereign, with in-region models and database and egress allow-listed, and air-gapped, with local models in the cluster and zero egress. The chart carries the MCP image too, off by default, because an in-cluster MCP server needs a stdio-to-HTTP gateway that you supply.
- Calls are audited. With authentication on, which the beta runs with, each call carries an API key per caller and a rate limit per key, and each call that reaches the engine writes an audit entry chaining a
caller_idthrough agent-to-agent calls. A call rejected on its arguments returns before the entry; without authentication, calls log as anonymous.
A client configuration, once a checkout and its database are in place. The client starts the server with only the environment you give it here, so the database connection goes in env, beside any key your configured model provider reads. WOLFTONE_ENV names the deployment posture: unset, the server refuses any database outside your own machine, so a remote one needs prod (or gov / airgapped for a restricted deployment).
{
"mcpServers": {
"wolftone": {
"command": "uv",
"args": [
"run", "--project", "/path/to/wolftone", "--extra", "mcp",
"python", "-m", "services.mcp.server"
],
"env": {
"DATABASE_URL": "postgresql://user:password@host:5432/wolftone",
"WOLFTONE_ENV": "prod"
}
}
}
}What it does not do yet
- It is not real time. Ingestion runs as a daily batch, so the index a call reaches can be up to about a day behind the wire.
- Text tools take seconds. Any tool that matches free text against the index runs extraction and embedding in the request path; decompose_narrative runs the extraction alone unless you ask for the vector. Fine for checking a draft; not for a bid-time call.
- Nothing pushes. There is no subscription or alert primitive. An agent that wants to watch a narrative polls its trajectory.
- The experimental tools are unvalidated. They are exposed so agents can interoperate with them, and labelled so nobody mistakes them for the proven core.
Access
WolfTone is a research project, and the MCP server is in a gated beta. We are onboarding a small number of design partners: teams building agents that publish, respond or monitor, who need narrative context rather than sentiment. Tell us the issue you work on and what your agent does with the answer.
The server is built for narrative awareness: knowing which frames a draft touches and how large they are. It is not offered for tuning persuasion against a narrative.
Request Access