Skip to main content
Glama

claim-verifier

An MCP server that verifies outside-world claims — so agents stop asserting things like "posted", "booked", or "merged" without proof.

The problem: AI agents routinely tell users something happened (a post went live, a PR merged, a page says X) based on a tool call that started the action, not on evidence it finished. claim-verifier is the trust layer: one assertion in, a boolean verdict plus the raw evidence out, checked live.

Tools

Tool

What it does

verify_url

Fetches a URL (follows redirects), reports ok, HTTP status, final_url, page title, a text snippet, and whether the page contains an expected phrase (expect_contains → matched).

verify_github

Live state of a public GitHub PR/issue via the API: state, merged, merged_at, title, url.

verify_claim

Generic entry point. assertion_type: contains (page text has the phrase), status_2xx (URL loads), github_merged (PR is merged). Returns { verified, evidence, checked_at }.

Related MCP server: Browser Proof

Install

npm install -g claim-verifier
# or run without installing:
npx -y claim-verifier
# or from source:
git clone https://github.com/baby-zack-agent/claim-verifier.git
cd claim-verifier && node src/index.js

Requires Node.js 18+.

MCP client config (Claude Desktop style)

{
  "mcpServers": {
    "claim-verifier": {
      "command": "npx",
      "args": ["-y", "claim-verifier"]
    }
  }
}

Or point command at a local checkout: "command": "node", "args": ["/path/to/claim-verifier/src/index.js"].

The server speaks MCP over stdio (newline-delimited JSON-RPC): initialize, tools/list, tools/call. Nothing else — no HTTP port, no hosting, no telemetry, no accounts. It runs inside your own agent.

Example session

Agent asserts: "the PR was merged."

→ tools/call verify_claim { "assertion_type": "github_merged", "repo": "octocat/hello-world", "number": 7, "kind": "pr" }
← { "verified": true,
    "evidence": { "state": "closed", "merged": true, "merged_at": "2026-…", "title": "…", "url": "https://github.com/octocat/hello-world/pull/7" },
    "checked_at": "2026-…" }

Now the agent can say "merged" — with the evidence attached.

Tool reference

verify_url

  • url (string, required) — http(s) URL to fetch.

  • expect_contains (string, optional) — phrase that must appear in page text (case-sensitive).

  • timeout_ms (number, optional) — request timeout, default 15000.

  • Returns { ok, status, final_url, redirects, title, snippet, matched, checked_at }. ok is true for 2xx statuses. matched is null when expect_contains is omitted.

verify_github

  • repo (string, required) — "owner/name".

  • number (integer, required) — PR or issue number.

  • kind (string, required) — "pr" or "issue".

  • Returns { state, merged, merged_at, title, url, checked_at }. Unauthenticated GitHub API (60 req/hour). merged/merged_at only apply to PRs.

verify_claim

  • assertion_type (string, required) — "contains" | "status_2xx" | "github_merged".

  • url + assertion — for contains / status_2xx.

  • repo + number (+ kind, default "pr") — for github_merged.

  • Returns { verified, evidence, checked_at } where evidence is the full verify_url / verify_github result.

Design notes

  • Zero runtime dependencies. Hand-rolled MCP JSON-RPC over stdio using node: built-ins only. npm install pulls in nothing.

  • Local-first. stdio transport; it runs inside your agent process. The only network calls are the verification targets themselves (the URL you ask about, api.github.com).

  • No telemetry. Nothing phones home. Ever.

Tests

npm test

The suite spins up a local fixture HTTP server (redirects, 404, slow endpoint) and stubs the GitHub API, so it passes fully offline.

Liability disclaimer

This software is provided as-is. Verification results are a best-effort snapshot of a live, changing web — pages change, APIs rate-limit, and a "verified" result is evidence, not a guarantee. It is not legal, financial, or compliance advice. You are responsible for decisions you make based on its output.

License

MIT — see LICENSE.

Available Tools

3 tools
verify_claimB

Generic claim verifier: one assertion in, a boolean verdict plus the raw evidence out. "contains" checks page text for a phrase, "status_2xx" checks the URL loads successfully, "github_merged" checks a GitHub PR is merged.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL for "contains" / "status_2xx" assertions.
kindNoFor "github_merged" use "pr".
repoNoRepository as "owner/name" (for "github_merged").
numberNoPR number (for "github_merged").
assertionNoThe phrase to find (for "contains").
assertion_typeYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains what each assertion type does and the output shape (boolean verdict plus raw evidence), but omits side effects, permissions, error cases, or rate limits. It gives the core behavior but not the full picture.

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?

Two sentences, front-loaded with the tool's purpose, and the three modes are listed compactly. No fluff or redundant detail; every sentence earns its place.

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

Completeness3/5

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

For a generic dispatcher with six parameters and no output schema, the description covers the return format and the three modes, but lacks guidance on selecting among sibling tools, error handling, and prerequisites (e.g., GitHub auth). It is adequate but not thorough.

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

Parameters4/5

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

Schema coverage is 83% and the description adds meaning by linking each assertion type to the relevant parameters (e.g., 'contains' implies url and assertion; 'github_merged' implies repo, number, kind). This goes beyond the schema's individual parameter descriptions, helping the agent understand the conditional dependencies.

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

Purpose4/5

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

The description clearly states it is a generic claim verifier that produces a boolean verdict and raw evidence, and enumerates three distinct assertion types. However, it does not explicitly distinguish itself from sibling tools verify_url and verify_github, so an agent might not know when the generic tool is preferred.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this generic tool versus the more specific siblings verify_url and verify_github. It implies usage by listing assertion types but does not state exclusions or alternatives, leaving tool selection to inference.

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

verify_githubA

Check the live state of a public GitHub pull request or issue via the GitHub API (state, merged flag, merged_at, title, url). Use to verify claims like "the PR was merged".

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes"pr" or "issue".
repoYesRepository as "owner/name".
numberYesPR or issue number.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the check is live, public-only, and via the GitHub API, and it lists the returned fields. However, it does not mention error behavior, rate limits, or what happens when the repo/PR/issue does not exist, which would be valuable for a verification tool.

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?

Two sentences with no filler. The first sentence states the action and output fields; the second gives a concrete usage example. Every word earns its place.

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

Completeness4/5

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

For a simple three-parameter tool with no output schema and no annotations, the description covers the core need: what is checked, which fields are returned, and when to use it. It lacks error-handling details, but the essential information for correct invocation is present.

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?

The input schema already documents all three parameters with 100% coverage, including the enum for 'kind'. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 is appropriate.

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?

The description names a specific verb ('Check'), a specific resource ('public GitHub pull request or issue'), and the mechanism ('via the GitHub API'). It also lists the concrete fields returned, making it clearly distinct from the generic sibling tools verify_url and verify_claim.

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 description gives an explicit use case: 'Use to verify claims like "the PR was merged"'. This provides clear context for when to invoke the tool, though it does not explicitly mention when not to use it or compare it to verify_url/verify_claim.

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

verify_urlA

Fetch a URL (following redirects) and report its live status, final URL, page title, and a text snippet. Optionally check that the page contains an expected phrase. Use to verify claims like "the post is live" or "the page says X".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe http(s) URL to fetch.
timeout_msNoRequest timeout in milliseconds. Default 15000.
expect_containsNoOptional phrase that must appear in the page text (case-sensitive).

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It transparently states that redirects are followed and that the tool reports live status, final URL, page title, and a text snippet. It does not cover error behavior or timeout handling, but the core behavior is clearly disclosed.

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?

The description is two concise sentences with no filler. The first sentence front-loads the action and outputs; the second sentence gives a concrete use case. Every sentence earns its place.

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

Completeness4/5

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

There is no output schema, so the description helpfully enumerates the returned information: live status, final URL, page title, and text snippet. It covers the required URL, optional timeout, and optional phrase check. It could be more complete about failure modes or non-HTML responses, but for a simple fetch-and-verify tool it is largely sufficient.

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 description coverage is 100%, so the schema already documents all parameters. The description adds useful context for expect_contains ('check that the page contains an expected phrase') and timeout defaults are already in the schema, but it does not add substantial new parameter meaning.

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

Purpose4/5

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

The description clearly states a specific action ('Fetch a URL'), the resource, and the key outputs: live status, final URL, page title, and text snippet. It does not explicitly differentiate from sibling tools like verify_claim, but the URL-focused scope makes the purpose unambiguous.

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 description gives an explicit use case: 'Use to verify claims like "the post is live" or "the page says X".' This tells an agent when to reach for the tool, though it does not mention when not to use it or name alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedverify_claim
    • First observedverify_github
    • First observedverify_url

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation2/5

verify_url and verify_claim both verify URL loading and phrase presence, while verify_github and verify_claim both verify GitHub merged state. The generic verify_claim tool overlaps heavily with both specialized tools, making tool selection ambiguous.

Naming Consistency5/5

All tools follow a strict verify_<target> pattern with clear, predictable nouns. This makes the tool names consistent and easy to guess.

Tool Count4/5

Three tools is a reasonable, focused count for a small claim-verification server. However, verify_claim largely duplicates the other two, so not every tool fully earns its place.

Completeness4/5

Core URL and GitHub PR/issue verification workflows are covered with useful evidence. The surface is narrow and lacks support for other claim types like API responses or commits, but no obvious dead ends exist for the stated purpose.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A verification component for agents that checks claims on public webpages and returns structured results with evidence text, screenshots, and deterministic JSON.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Verifies AI agent actions by exercising public web surfaces and returning evidence-based pass/fail verdicts on real outcomes, rather than trusting self-reported success messages.
    -