Skip to main content
Glama

Ansvar: EU Compliance & Legal Intelligence

Validate Claim

validate_claim
Read-only

Check a claim graph before relying on or presenting its conclusions. Refetch cited provisions and evidence under your scope, compare quotes, inspect dependencies, and report the result with explicit checked/not_checked lists. Evidence checks and judgment are separate fields on every node: evidence_checks (source_resolution, quotation_match, served_language, dependencies) records what the checker established; agent_assessment.declared_typing records the DET/INT typing the agent declared, attributed to the agent; evidence_ceiling is the highest typing the checked evidence permits; claim_support is always not_checked, because whether evidence supports a claim is reasoning and this check evaluates none. A matched quotation and a DET evidence_ceiling do not mean the conclusion is supported. On interpretations and conclusions, evidence_checks.stated_quantities reports whether each plain deadline, duration, percentage or euro amount in the statement appears in the cited text (all_in_cited_text, not_in_cited_text, not_checked, not_applicable; English only; stated_quantities_detail lists the missing and cited values); not_in_cited_text is a fact about the text, not a finding that the conclusion is false (a value may be derived), and claim support stays not_checked. strength is the legacy name for evidence_ceiling. A resolved evidence node (non-provision) carries a resolution verdict and caps every dependent conclusion at UNVERIFIED. Optionally check quotations in the prose answer. This does not verify legal in-force status, facts, satisfiability, entailment, or whether logic expresses the law. Served-to-this-caller verification (G4) is not checked: served rows do not yet carry request-id binding. No overall pass verdict is returned. Refetches run with concurrency up to 6 under a shared 25-second deadline; the session pool defaults to 2 sessions per downstream URL. Expiry returns bounded=true and unreached_clauses (count); unfinished clauses are unavailable, UNVERIFIED, and in not_checked with reason refetch_budget_exhausted. The summary.display_markdown field contains the presentation text, with findings and disclosures in summary.attention_items.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
graphYesThe claim graph as an object (a JSON-encoded string is also accepted), schema ansvar.claim-graph.v2 (or v1). Minimal working example: {"schema": "ansvar.claim-graph.v2", "question": "Must a controller notify a personal data breach?", "nodes": [{"id": "C1", "kind": "clause", "canonical_ref": "GDPR:art_33", "lookup": {"source_id": "eu-regulations", "canonical_ref": "GDPR:art_33", "jurisdiction": "EU"}, "quote": "In the case of a personal data breach, the controller shall without undue delay and, where feasible, not later than 72 hours after having become aware of it, notify the personal data breach to the supervisory authority competent in accordance with Article 55...", "quote_language": "en", "binding": "mandate"}, {"id": "K1", "kind": "conclusion", "statement": "The controller must notify the supervisory authority.", "typing": "INT", "depends_on": ["C1"]}]}. Required keys: schema, question (text) and nodes (array). Optional: variables (object mapping names to {kind: design|fact, meaning: text}; default {}) and gaps (array of {statement, reason}; default []). Every node needs id and kind. A clause needs canonical_ref, quote, quote_language and binding (mandate|prohibition|permission|designation|definition); jurisdiction is required unless lookup is supplied; pinpoint is optional. Copy each row's citation.lookup args into lookup. In v2, each clause lookup requires source_id and canonical_ref equal to the node reference. A v2 evidence node needs source_id (the routed citation.source_id), reference (the exact served address), and jurisdiction when the source is registered under several codes; quotation is optional. Missing address fields refuse before refetch with the node field path. Regulatory updates use source_id=reg-intel; CVEs use cve-intel. Pan-European preparatory works remain unsupported and explicitly refuse resolution. A fact needs statement and provenance="customer"; an assumption needs statement and provenance="assumed". An interpretation or conclusion needs statement, typing (DET|INT), and depends_on (node ids). Optional node constraint is CNF (arrays of literal strings; ! negates a variable). Conclusions may carry entails {assume: literal array, expect: SAT|UNSAT}, retained without evaluation. Optional regulatory_basis_unresolved (boolean) is preserved. Limits: 100 nodes, 60 citation refetches, 131072 UTF-8 graph bytes, 25 seconds for refetching. A large graph citing one corpus takes tens of seconds; if the refetch budget runs out the response is marked bounded, names how many clauses it did not reach, and leaves them unverified.
answerNoOptional prose answer whose quotations should be compared with refetched evidence. Maximum 65536 UTF-8 bytes (MAX_CLAIM_ANSWER_BYTES).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / graph / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / graph / description
      Previous value: -"JSON object using schema ansvar.claim-graph.v1 or ansvar.claim-graph.v2. Required keys: schema (\"ansvar.claim-graph.v1\" or \"ansvar.claim-graph.v2\"), question (text), variables (object mapping names to {kind: design|fact, meaning: text}), gaps (array of {statement, reason}), and nodes (array). Every node needs id and kind. A clause needs canonical_ref, quote, quote_language and binding (mandate|prohibition|permission|designation|definition); jurisdiction is required unless lookup is supplied; pinpoint is optional. Copy each row's citation.lookup args into lookup. In v2, each clause lookup requires source_id and canonical_ref equal to the node reference. A v2 evidence node needs source_id (the routed citation.source_id), reference (the exact served address), and jurisdiction when the source is registered under several codes; quotation is optional. Missing address fields refuse before refetch with the node field path. Regulatory updates use source_id=reg-intel; CVEs use cve-intel. Pan-European preparatory works remain unsupported and explicitly refuse resolution. A fact needs statement and provenance=\"customer\"; an assumption needs statement and provenance=\"assumed\". An interpretation or conclusion needs statement, typing (DET|INT), and depends_on (node ids). Optional node constraint is CNF (arrays of literal strings; ! negates a variable). Conclusions may carry entails {assume: literal array, expect: SAT|UNSAT}, retained without evaluation. Optional regulatory_basis_unresolved (boolean) is preserved. Limits: 100 nodes, 60 citation refetches, 131072 UTF-8 graph bytes, 25 seconds for refetching. A large graph citing one corpus takes tens of seconds; if the refetch budget runs out the response is marked bounded, names how many clauses it did not reach, and leaves them unverified."New value: +"The claim graph as an object (a JSON-encoded string is also accepted), schema ansvar.claim-graph.v2 (or v1). Minimal working example: {\"schema\": \"ansvar.claim-graph.v2\", \"question\": \"Must a controller notify a personal data breach?\", \"nodes\": [{\"id\": \"C1\", \"kind\": \"clause\", \"canonical_ref\": \"GDPR:art_33\", \"lookup\": {\"source_id\": \"eu-regulations\", \"canonical_ref\": \"GDPR:art_33\", \"jurisdiction\": \"EU\"}, \"quote\": \"In the case of a personal data breach, the controller shall without undue delay and, where feasible, not later than 72 hours after having become aware of it, notify the personal data breach to the supervisory authority competent in accordance with Article 55...\", \"quote_language\": \"en\", \"binding\": \"mandate\"}, {\"id\": \"K1\", \"kind\": \"conclusion\", \"statement\": \"The controller must notify the supervisory authority.\", \"typing\": \"INT\", \"depends_on\": [\"C1\"]}]}. Required keys: schema, question (text) and nodes (array). Optional: variables (object mapping names to {kind: design|fact, meaning: text}; default {}) and gaps (array of {statement, reason}; default []). Every node needs id and kind. A clause needs canonical_ref, quote, quote_language and binding (mandate|prohibition|permission|designation|definition); jurisdiction is required unless lookup is supplied; pinpoint is optional. Copy each row's citation.lookup args into lookup. In v2, each clause lookup requires source_id and canonical_ref equal to the node reference. A v2 evidence node needs source_id (the routed citation.source_id), reference (the exact served address), and jurisdiction when the source is registered under several codes; quotation is optional. Missing address fields refuse before refetch with the node field path. Regulatory updates use source_id=reg-intel; CVEs use cve-intel. Pan-European preparatory works remain unsupported and explicitly refuse resolution. A fact needs statement and provenance=\"customer\"; an assumption needs statement and provenance=\"assumed\". An interpretation or conclusion needs statement, typing (DET|INT), and depends_on (node ids). Optional node constraint is CNF (arrays of literal strings; ! negates a variable). Conclusions may carry entails {assume: literal array, expect: SAT|UNSAT}, retained without evaluation. Optional regulatory_basis_unresolved (boolean) is preserved. Limits: 100 nodes, 60 citation refetches, 131072 UTF-8 graph bytes, 25 seconds for refetching. A large graph citing one corpus takes tens of seconds; if the refetch budget runs out the response is marked bounded, names how many clauses it did not reach, and leaves them unverified."
    • removedInput schema / properties / graph / type
      Removed value: -"string"
  2. Added

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds rich behavioral context beyond that: refetch scope, concurrency up to 6, shared 25-second deadline, session pool default, expiry behavior with bounded/unreached_clauses, claim_support always not_checked, resolved evidence nodes capping dependents at UNVERIFIED, and no overall pass verdict.

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

Conciseness4/5

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

The purpose is front-loaded, and most dense detail is relevant for a complex validation tool. However, the lack of bullet points or headings and minor repetition (claim_support is always not_checked; claim support stays not_checked) make the text harder to scan than it could be.

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?

No output schema exists, but the description explains return behavior in detail: checked/not_checked lists, summary.display_markdown, summary.attention_items, bounded and unreached_clauses on expiry, and limits. It also clarifies what is not checked, making it complete for a complex tool.

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 both graph and answer parameters in detail. The description adds that answer quotations may optionally be compared, but it does not add new syntax, formats, or constraints for the graph parameter beyond what the schema provides.

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?

States a specific verb ('Check') and resource ('claim graph') and scopes the tool to before relying on or presenting conclusions. However, it does not explicitly mention sibling tools like validate_citation or verify_citations, so the boundary between this and related validation tools is left implicit.

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?

Gives clear context for use: before relying on or presenting a claim graph's conclusions, and optionally for checking quotations in a prose answer. It also lists things the tool does not verify (legal in-force status, facts, satisfiability, entailment), but names no alternative tool for those cases, so alternatives are missing.

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.