Skip to main content
Glama

NewsMCP

check_coverage

Read-only

Judge how widely and how independently a claim has been reported.

Answers "is this real?" rather than returning a list. Reports the number of INDEPENDENT newsrooms — outlets that reported it themselves — separately from the number of domains that carried it, which includes syndication. A story on 200 domains from 3 newsrooms is one story reprinted, not 200 confirmations.

Because upstream clustering splits a story across languages, this totals the likely variants of the same story and presents that total as an upper bound, listing what was combined so the caller can check it is really one story.

Input Schema

NameRequiredDescriptionDefault
claimYesThe claim or headline to check, phrased in the words a headline would use. Matched literally against headlines and summaries, not by meaning, so "atomic arsenal" will not find stories about nuclear weapons.
days_backNoHow far back to look, in days. Defaults to 14. Clamped down to whatever the caller's plan allows, with a note saying so.
response_formatNomarkdown (default), text, or json. Pass the format the user asked for rather than reformatting afterwards.markdown

Output Schema

NameRequiredDescriptionDefault
notesYesQuery-normalization and plan-clamping notes to relay verbatim.
matchedYesWhether any story matched the claim text in the window.
variantsYesAnchor story first, then its likely variants.
anchor_newsroomsYesIndependent newsrooms for the best-corroborated matching story.
total_matching_storiesYes
combined_newsrooms_upper_boundYesSum across clustered variants of the same story — an upper bound, not a confirmed count.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / api_key
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Optional NewsMCP API key for this call; forwarded upstream as x-api-key. Only one request may be in flight at a time, so never call in parallel."
      -}
    • removedInput schema / properties / llm_model
      Removed value: -{
      -  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
      -  "type": "string"
      -}
  2. Changed1 schema field changed
    • addedInput schema / properties / llm_model
      Added value: +{
      +  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "description": "Corroboration verdict for a claim.",
      +  "properties": {
      +    "anchor_newsrooms": {
      +      "description": "Independent newsrooms for the best-corroborated matching story.",
      +      "type": "integer"
      +    },
      +    "combined_newsrooms_upper_bound": {
      +      "description": "Sum across clustered variants of the same story — an upper bound, not a confirmed count.",
      +      "type": "integer"
      +    },
      +    "matched": {
      +      "description": "Whether any story matched the claim text in the window.",
      +      "type": "boolean"
      +    },
      +    "notes": {
      +      "description": "Query-normalization and plan-clamping notes to relay verbatim.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "total_matching_stories": {
      +      "type": "integer"
      +    },
      +    "variants": {
      +      "description": "Anchor story first, then its likely variants.",
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "abstract": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "content_type": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "entities": {
      +            "description": "Key actors named in the story.",
      +            "items": {
      +              "additionalProperties": true,
      +              "properties": {
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "event_id": {
      +            "description": "Stable id, e.g. evt_...",
      +            "type": "string"
      +          },
      +          "event_type": {
      +            "description": "family.leaf taxonomy value, e.g. deals.merger_acquisition.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "first_seen": {
      +            "description": "ISO 8601 UTC.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "headline": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "language_count": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "last_seen": {
      +            "description": "ISO 8601 UTC.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "newsrooms": {
      +            "description": "Independent newsrooms — the corroboration signal.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "one_liner": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reports": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "sector": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "size": {
      +            "description": "Article count.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "source_count": {
      +            "description": "Publisher domains, mirrors included.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "sources": {
      +            "description": "Source article URLs — a sample or the full list per verbosity.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "matched",
      +    "total_matching_stories",
      +    "anchor_newsrooms",
      +    "combined_newsrooms_upper_bound",
      +    "variants",
      +    "notes"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly, openWorld, non-destructive), so the description carries the real weight here — it explains the independent-newsroom versus carrying-domain distinction with a concrete example, and discloses that cross-language clustering makes the reported total an upper bound with the combined variants listed for verification. That is exactly the kind of interpretive caveat an agent needs to report the number honestly. It does not say what happens on a zero-match claim or discuss latency/cost, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in the first sentence, then two paragraphs that each add a distinct layer: what it reports and why the independence count matters, then the cross-language aggregation caveat. The '200 domains from 3 newsrooms' illustration earns its place by making the core metric concrete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate return values, and it correctly spends its budget on the interpretive semantics of the result instead. For a three-parameter read-only check, nothing an agent needs in order to call it correctly or describe its output is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with claim, days_back, and response_format each documented in detail (including the literal-matching caveat and plan clamping), so the schema already does the heavy lifting. The description adds no parameter-level meaning beyond that, which is the correct baseline of 3 when the schema is this complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — judging how widely and independently a claim has been reported — and immediately distinguishes the output type from its siblings with "Answers 'is this real?' rather than returning a list." An agent can tell this apart from news and get_story without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "rather than returning a list" clearly signals this is a verdict tool, not a browsing tool, which implicitly routes callers away from the list-returning siblings. It stops short of naming news or get_story explicitly, or stating the when-not case (e.g. if you want to read the articles themselves, use get_story).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources