Server definition
- Hash
- sha256:55e20660f0003891a7e4944f007d72a33078f0c6b2a6ed0b415e0454d5cba612
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "Pure Report provides politically-neutral, bias-scored news. Every article is rewritten to strip loaded language; the 0-100 bias score rates the ORIGINAL source reporting (0 = wire-neutral, 100 = advocacy), NOT the returned rewrite, which is neutral by design. Stories are clustered into events; each event carries a verification-gated neutral account, a framing spectrum showing how left/center/right outlets covered it, and receipts (verbatim source quotes). Use search_news for topics/keywords (each result lists the event(s) it belongs to), trending_events for what's active now, get_event for a full neutral writeup, compare_coverage for cross-outlet framing, and get_article to fetch one rewritten article by id. Bug reports or tool requests: [email protected].",
"tools": [
{
"description": "How Pure Report works — the bias scale, neutralization method, the two-gate verification for event accounts, lean labeling, coverage scope (topic list), and the support contact. Call this to cite the source or explain its methodology to a user.",
"inputSchema": {
"properties": {
"article_id": {
"description": "Optional context for the report.",
"type": "integer"
},
"event_slug": {
"description": "Optional context for the report.",
"type": "string"
},
"report_body": {
"description": "Optional. The detail needed to act.",
"type": "string"
},
"report_kind": {
"description": "Optional, defaults to bug.",
"enum": [
"bug",
"dx",
"data_error",
"data_gap",
"feature",
"question",
"other"
],
"type": "string"
},
"report_subject": {
"description": "Optional. Providing this (with report_body) files feedback and returns a ref under \"filed\" — use only if submit_feedback is missing from your tools.",
"type": "string"
}
},
"type": "object"
},
"name": "about_pure_report",
"outputSchema": {
"properties": {
"bias_scale": {
"type": "string"
},
"coverage_scope": {
"type": "object"
},
"filed": {
"type": [
"object",
"null"
]
},
"freshness": {
"type": "string"
},
"lean_labeling": {
"type": "string"
},
"name": {
"type": "string"
},
"neutralization": {
"type": "string"
},
"reporting_problems": {
"type": "string"
},
"reporting_problems_if_submit_feedback_is_missing": {
"type": "string"
},
"support": {
"type": "string"
},
"verification_gate": {
"type": "string"
},
"website": {
"type": "string"
},
"what_it_is": {
"type": "string"
}
},
"required": [
"bias_scale",
"support"
],
"type": "object"
}
},
{
"description": "Look up feedback you filed with submit_feedback, using the ref it returned (e.g. PR-7F3K2Q). Returns the current status (open, answered, closed) and the operator's reply once one exists. Replies are written by a human and are not immediate — poll sparingly, on the order of hours or days, not seconds.",
"inputSchema": {
"properties": {
"ref": {
"description": "The ref from submit_feedback, e.g. 'PR-7F3K2Q'.",
"type": "string"
}
},
"required": [
"ref"
],
"type": "object"
},
"name": "check_feedback",
"outputSchema": {
"properties": {
"kind": {
"type": "string"
},
"message": {
"type": "string"
},
"ref": {
"type": "string"
},
"replied_at": {
"type": [
"string",
"null"
]
},
"reply": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string"
},
"subject": {
"type": "string"
},
"submitted_at": {
"type": [
"string",
"null"
]
}
},
"required": [
"ref",
"status"
],
"type": "object"
}
},
{
"description": "Show how outlets across the political spectrum framed one event: a per-outlet bias-score spectrum and, where they editorialized, the verbatim framing quotes grouped by left/center/right. The core 'compare the coverage' view — use it to detect slant and consensus.",
"inputSchema": {
"properties": {
"slug": {
"description": "Event slug from trending_events or a search_news result.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "compare_coverage",
"outputSchema": {
"properties": {
"framing_spectrum": {
"type": [
"object",
"null"
]
},
"how_each_side_framed_it": {
"type": [
"object",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"slug",
"url"
],
"type": "object"
}
},
{
"description": "Fetch one article by id: neutral rewritten title + body, a bias_score for the ORIGINAL source (not the rewrite), source, extracted entities, and the events it belongs to.",
"inputSchema": {
"properties": {
"article_id": {
"description": "Numeric article id (from search_news results).",
"type": "integer"
}
},
"required": [
"article_id"
],
"type": "object"
},
"name": "get_article",
"outputSchema": {
"properties": {
"bias_score": {
"type": [
"number",
"null"
]
},
"content": {
"type": [
"string",
"null"
]
},
"entities": {
"type": [
"object",
"array",
"null"
]
},
"events": {
"type": "array"
},
"id": {
"type": "integer"
},
"published_at": {
"type": [
"string",
"null"
]
},
"source_name": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"summary": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"url"
],
"type": "object"
}
},
{
"description": "Get the full neutral writeup of one news event by slug: a verification-gated account (lede, what-we-know bullets with verbatim source receipts, single-source attributed items) plus a coverage census (how many outlets by political lean, earliest report). If no gated account exists yet, the coverage census is still returned.",
"inputSchema": {
"properties": {
"slug": {
"description": "Event slug from trending_events or a search_news result, e.g. \"tyler-robinson-trial-for-charlie-kirk-murder\".",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_event",
"outputSchema": {
"properties": {
"account": {
"type": [
"object",
"null"
]
},
"account_note": {
"type": [
"string",
"null"
]
},
"article_count": {
"type": [
"integer",
"null"
]
},
"coverage": {
"type": "object"
},
"coverage_report": {
"type": [
"object",
"null"
]
},
"first_seen": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
},
"status": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"slug",
"coverage",
"url"
],
"type": "object"
}
},
{
"description": "Search Pure Report's neutral, bias-scored news. Returns articles rewritten to remove loaded language; bias_score (0-100) rates the ORIGINAL source reporting before neutralization (0 = wire-neutral, 100 = advocacy), NOT the returned rewrite, which is neutral by design. Each result also lists the event(s) it belongs to — pass an event slug to get_event for the neutral writeup or compare_coverage for cross-outlet framing. Ranked by relevance and recency.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max results to RETURN, 1-40 (default 15). Does not affect total_matches, which always reports how many articles matched.",
"type": "integer"
},
"offset": {
"description": "Skip this many matches — page through results beyond the 40-row limit. The response echoes offset/returned/next_offset; next_offset is null on the last page.",
"type": "integer"
},
"published_after": {
"description": "Only articles published on/after this date. 'YYYY-MM-DD' or full ISO. Use with published_before to bound a period, e.g. coverage during June.",
"type": "string"
},
"published_before": {
"description": "Only articles published on/before this date. 'YYYY-MM-DD' or full ISO.",
"type": "string"
},
"query": {
"description": "Keywords or phrase, e.g. \"Iran sanctions\" or \"2026 election\".",
"type": "string"
},
"topic": {
"description": "Optional topic-slug filter. An unrecognized value searches all topics and returns a warning.",
"enum": [
"politics",
"business",
"world",
"technology",
"health",
"science",
"justice",
"defense",
"climate-energy",
"media",
"education",
"culture",
"sports",
"local",
"opinion",
"real-estate"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_news",
"outputSchema": {
"properties": {
"applied_topic": {
"type": [
"string",
"null"
]
},
"next_offset": {
"type": [
"integer",
"null"
]
},
"offset": {
"type": "integer"
},
"query": {
"type": "string"
},
"result_composition": {
"description": "Factual description of what the returned set is ABOUT. Search is lexical, so every query term appears in every result; this reports whether a term is the SUBJECT (title/entities/lede) or only a body mention, plus the entity distribution. Measurements only — no verdict.",
"type": "object"
},
"results": {
"items": {
"properties": {
"bias_score": {
"type": [
"number",
"null"
]
},
"events": {
"items": {
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"id": {
"type": "integer"
},
"published_at": {
"type": [
"string",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"summary": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"returned": {
"type": "integer"
},
"total_matches": {
"description": "TOTAL articles matching the query, independent of `limit` — not the number returned. len(results) < total_matches means more exist.",
"type": "integer"
},
"warning": {
"type": "string"
}
},
"required": [
"query",
"total_matches",
"results"
],
"type": "object"
}
},
{
"description": "Report a problem or request to Pure Report's operator and get a tracking ref back. Use this when the data looks wrong — a bias score or outlet lean that doesn't match the source, an event cluster mixing unrelated stories, a missing neutral writeup, a broken article — or to ask a methodology question or request a capability. Include the article_id or event_slug you were looking at; that context is what makes a report actionable. A human reads these: replies take time and are not guaranteed. Call check_feedback with the returned ref to read the reply.",
"inputSchema": {
"properties": {
"article_id": {
"description": "Optional article the report concerns.",
"type": "integer"
},
"body": {
"description": "The detail needed to act: what you expected, what you got, and how to reproduce it. Max 12000 chars.",
"type": "string"
},
"category": {
"description": "bug = broken or erroring; dx = developer-experience friction; data_error = wrong/miscategorised data; data_gap = missing coverage or field; feature = a capability request; question = methodology or usage; other. Defaults to bug.",
"enum": [
"bug",
"dx",
"data_error",
"data_gap",
"feature",
"question",
"other"
],
"type": "string"
},
"event_slug": {
"description": "Optional event slug the report concerns.",
"type": "string"
},
"kind": {
"description": "DEPRECATED alias for category; still accepted.",
"enum": [
"bug",
"dx",
"data_error",
"data_gap",
"feature",
"question",
"other"
],
"type": "string"
},
"subject": {
"description": "One line, max 200 chars.",
"type": "string"
}
},
"required": [
"subject",
"body"
],
"type": "object"
},
"name": "submit_feedback",
"outputSchema": {
"properties": {
"how_to_check": {
"type": "string"
},
"message": {
"type": "string"
},
"ref": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"ref",
"status"
],
"type": "object"
}
},
{
"description": "List the news events with the most current coverage activity. Each event clusters many outlets' articles about one story and includes has_account (boolean): true means get_event returns a full verification-gated writeup, false means only the coverage census is available yet. Returns slugs to pass to get_event / compare_coverage.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max events, 1-25 (default 10).",
"type": "integer"
}
},
"type": "object"
},
"name": "trending_events",
"outputSchema": {
"properties": {
"events": {
"items": {
"properties": {
"article_count": {
"type": [
"integer",
"null"
]
},
"first_seen": {
"type": [
"string",
"null"
]
},
"has_account": {
"type": "boolean"
},
"name": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"required": [
"events"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:55e20660f0003891a7e4944f007d72a33078f0c6b2a6ed0b415e0454d5cba612 | sha256sum