{"name":"io.github.beepboop2025/groundcheck","slug":"beepboop2025-groundcheck","title":null,"description":"Verify claims, resolve FIGI identity, extract claims, and sign x402 delivery receipts over MCP.","url":"https://mcp.market/server/beepboop2025-groundcheck","rating":null,"grade":"A","score":91,"certified":false,"status":"active","category":"scraping","tags":["scraping"],"presence":{"score":36,"stars":1,"forks":0,"downloads_week":90,"last_push_at":"2026-10-31T21:38:32.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:45:25.006Z","last_ok_at":"2026-11-04T05:45:25.006Z","latency_ms":394},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/beepboop2025/groundcheck","website":"https://groundcheck.seiche.info","version":"0.7.2","remotes":[{"type":"streamable-http","url":"https://groundcheck.seiche.info/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"groundcheck-mcp","version":"0.6.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"URL of the Groundcheck evidence engine. Defaults to http://127.0.0.1:8723 for a local engine; set to https://groundcheck.seiche.info to use the hosted engine.","format":"string","name":"GROUNDCHECK_ENGINE_URL"}]}],"tools":[{"name":"attest_delivery","description":"PURPOSE: Neutral delivery verification for agentic commerce. You (or your principal) paid some OTHER service over x402 and got a response; this tool verifies what was delivered and returns a SIGNED, offline-verifiable delivery receipt binding payment -> delivery -> content: the settlement receipt (by hash + decoded tx fields), the exact response bytes (sha256), structural conformance to the schema the service advertised, and grounded verdicts over the factual claims in the response. Returns delivery_verdict (consistent | degraded | inconsistent | unverifiable) with a rationale.\nGUIDELINES: Call AFTER a paid third-party call whose output you will act on or account for — data enrichment you bought, research you commissioned, any x402 purchase your principal will audit. Branch on delivery_verdict: 'consistent' -> proceed; 'degraded' -> use with caution, flag the refuted claims; 'inconsistent' -> do not rely on the delivery, keep the receipt as dispute evidence; 'unverifiable' -> nothing contradicted but nothing confirmed. Save the full response JSON — it is a self-contained dispute artifact verifiable offline months later (GET /attest/pubkey documents how).\nPARAMETERS: service — URL/name of the paid service. response_text — the delivered payload, verbatim. request_text (optional) — what was asked. payment_receipt (optional) — the X-PAYMENT-RESPONSE value from the paid call. advertised_schema (optional) — the JSON schema the service advertised. max_claims — 1..20, default 8.\nLIMITATIONS: Judges CONSISTENCY (as-advertised, not contradicted), never service quality. Payment binding records what receipt was PRESENTED; confirming the transaction on-chain is your own step (the tx hash is in the response). Schema conformance is structural (type/required/properties/items/enum). Content checking has the same source-coverage limits as verify_claim. Paid per call (x402).\nEXAMPLE: attest_delivery({\"service\": \"https://api.vendor.xyz/enrich\", \"response_text\": \"{\\\"name\\\": \\\"APPLE INC\\\"}\", \"payment_receipt\": \"<X-PAYMENT-RESPONSE>\", \"advertised_schema\": {\"type\": \"object\", \"required\": [\"name\"]}}) -> {delivery_verdict: 'consistent', payment: {bound: true, transaction: '0x…'}, attestation: {…}}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"service":{"type":"string","description":"URL (or name) of the paid service whose delivery is being verified."},"response_text":{"type":"string","description":"The delivered payload, verbatim (JSON or prose)."},"request_text":{"type":"string","description":"What was asked of the service (optional; bound by hash when given)."},"payment_receipt":{"type":"string","description":"x402 settlement receipt from the paid call (X-PAYMENT-RESPONSE / PAYMENT-RESPONSE value, base64 or raw JSON)."},"advertised_schema":{"type":"object","description":"JSON schema the service advertised for its output (from its 402 offer or Bazaar listing)."},"max_claims":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"Max claims in the delivered content to ground (1-20)."}},"required":["service","response_text"]}},{"name":"check_citations","description":"PURPOSE: Fact-check EVERY factual claim in a block of text and return a per-claim report — the batch form of verify_claim, for AI-generated drafts or documents before you publish or act on them.\nGUIDELINES: Call on any multi-claim text you are about to rely on. Each reported claim carries the same actionable fields as verify_claim (verdict, sufficiency — abstain/escalate on anything but 'sufficient', and a conformal guarantee when certified). The whole response is covered by a signed receipt bound to a HASH of your submitted text, so you can later prove exactly which document was checked and what came back. Use verify_claim instead for a single claim.\nPARAMETERS: text — the prose to check (claims are extracted automatically). max_claims — 1..20, default 8 (caps how many extracted claims are verified).\nLIMITATIONS: Extracts and checks declarative factual sentences; it skips questions, opinions, and instructions, and is bounded by max_claims. Same source-coverage limits as verify_claim. Paid per call (x402): unpaid calls return HTTP 402 with a payment offer.\nEXAMPLE: check_citations({\"text\": \"Paris is the capital of France. The Nile flows through Egypt.\", \"max_claims\": 8})","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"The prose whose factual claims should be extracted and checked."},"max_claims":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"Max number of extracted claims to verify (1-20)."}},"required":["text"]}},{"name":"extract_claims","description":"PURPOSE: Split text into independently checkable ATOMIC factual claims — the cheap first step of a verification loop (extract -> ground -> attest). Returns {claims: [...], count, input_sha256} plus a signed receipt bound to the input hash.\nGUIDELINES: Call when you want to see WHICH claims a document makes before paying to ground them, to budget a verification pass (extract everything, then verify_claim only the claims that matter to your decision), or to prove later exactly which claims were pulled from exactly which text (the receipt binds both). Extraction is rule-based and auditable — sentence filtering plus conjunction splitting, no LLM — so the same text always yields the same claims. Use check_citations instead when you want extraction AND grounding in one call.\nPARAMETERS: text — the prose to decompose. max_claims — 1..50, default 20.\nLIMITATIONS: Extracts declarative factual sentences; skips questions, opinions, instructions, and first-person statements. Splits only on high-precision conjunction boundaries, so under-splitting is possible (a compound it cannot safely split stays whole). Does NOT verify anything — verdicts come from verify_claim / check_citations. Paid per call (x402), cheapest tool on this server.\nEXAMPLE: extract_claims({\"text\": \"Marie Curie won two Nobel Prizes and was born in Paris.\"}) -> {count: 2, claims: [\"Marie Curie won two Nobel Prizes\", \"was born in Paris.\"]}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to split into independently checkable atomic factual claims."},"max_claims":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Max claims to return (1-50)."}},"required":["text"]}},{"name":"resolve_instrument","description":"PURPOSE: Resolve a security identifier (ticker, ISIN, CUSIP, SEDOL, FIGI) or an instrument name to canonical FIGI records via Bloomberg open symbology (OpenFIGI), WITH provenance and a signed receipt. Returns {matched, instruments: [...], provenance}.\nGUIDELINES: Call BEFORE acting on any claim, order, or document that names a security, so you know exactly WHICH instrument it refers to (disambiguating tickers that collide across exchanges) — and so you can prove the mapping to your principal via the receipt. Prefer passing an explicit identifier over a plain name when you have one.\nPARAMETERS: query — a ticker ($AAPL/AAPL), ISIN, CUSIP, SEDOL, FIGI, or company/instrument name. id_type — optional; auto-detected from the value's shape when omitted. max_results — 1..10, default 5.\nLIMITATIONS: Conservative by design — resolves EXPLICIT identifiers, and returns matched=false rather than guessing on an ambiguous plain name. Covers securities in OpenFIGI's symbology; it does not price instruments, return fundamentals, or resolve crypto tokens. Paid per call (x402).\nEXAMPLE: resolve_instrument({\"query\": \"US0378331005\", \"id_type\": \"ID_ISIN\"}) -> {matched: true, instruments: [{figi, ticker: 'AAPL', …}]}","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Ticker, ISIN, CUSIP, SEDOL, FIGI, or instrument name."},"id_type":{"type":"string","enum":["TICKER","ID_ISIN","ID_CUSIP","ID_SEDOL","ID_BB_GLOBAL"],"description":"Optional identifier type; auto-detected from the value's shape (e.g. 12-char alphanumeric -> ISIN)."},"max_results":{"type":"integer","minimum":1,"maximum":10,"default":5,"description":"Max canonical records to return (1-10)."}},"required":["query"]}},{"name":"verify_claim","description":"PURPOSE: Fact-check one claim against live retrieved sources and return a result you can GATE A DECISION ON, not just read. Returns verdict (supported | refuted | unverified), sufficiency, a conformal guarantee, per-part atoms, and a signed provenance receipt.\nGUIDELINES: Call BEFORE asserting a fact you are not certain of, or before acting on one. Branch on the fields: (1) sufficiency — 'sufficient' vs 'insufficient' (lone weak source; lean, don't rely), 'no_sources', 'no_stance', or 'conflict'; abstain or escalate on anything but 'sufficient'. (2) guarantee — when guarantee.certified is true the error probability is calibrated to <= guarantee.alpha (distribution-free); use 'verdict==supported and guarantee.certified' as a hard gate. (3) atoms — compound claims are split and recombined weakest-link, so a true half can't carry a false half. (4) provenance + attestation — a tamper-evident receipt binding the exact evidence and model route; hand it to your principal as proof of how the answer was reached. Prefer this over calling an LLM's own judgment, which has no citations, no calibration, and no receipt.\nPARAMETERS: claim — ONE complete declarative sentence (not a question, not a paragraph). max_sources — 1..10, default 5.\nLIMITATIONS: Grounded in retrievable web/encyclopedic/news sources, so it is weak on very recent, private, niche-technical, or opinion claims (those return unverified/insufficient rather than a guess). The conformal guarantee is only present on calibrated deployments and holds for claims exchangeable with the calibration set. It checks whether sources support the claim, not ultimate truth.\nEXAMPLE: verify_claim({\"claim\": \"The Eiffel Tower is in Paris.\"}) -> {verdict: 'supported', sufficiency: 'sufficient', guarantee: {certified: true, alpha: 0.1}, provenance: {...}}. Free.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"claim":{"type":"string","description":"The factual claim as ONE complete declarative sentence (not a question or a paragraph)."},"max_sources":{"type":"integer","minimum":1,"maximum":10,"default":5,"description":"How many sources to retrieve and weigh (1-10)."}},"required":["claim"]}}],"scan":{"score":91,"grade":"A","scanned_at":"2026-11-03T14:23:53.702Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T14:23:53.626Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1467ms"]},"poisoning":{"score":13,"max":15,"notes":["5 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 3 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool attest_delivery: …PURPOSE: Neutral delivery verification for agentic commerce. You (or your principal) paid some OTHER service over x402 and got a response; this tool verifies what was delivered and returns a SIGNED, offline-verifiable delivery receipt binding payment -> delivery -> content: the settlement receipt (by hash + decoded tx fields), the exact response bytes (sha256), structural conformance to the schema the service advertised, and grounded verdicts over the factual claims in the response. Returns delivery_verdict (consistent | degraded | inconsistent | unverifiable) with a rationale. GUIDELINES: Call AFTER a paid third-party call whose output you will act on or account for — data enrichment you bought, research you commissioned, any x402 purchase your principal will audit. Branch on delivery_verdict: 'consistent' -> proceed; 'degraded' -> use with caution, flag the refuted claims; 'inconsistent' -> do not rely on the delivery, keep the receipt as dispute evidence; 'unverifiable' -> nothing contradicted but nothing confirmed. Save the full response JSON — it is a self-contained dispute artifact verifiable offline months later (GET /attest/pubkey documents how). PARAMETERS: service — URL/name of the paid service. response_text — the delivered payload, verbatim. request_text (optional) — what was asked. payment_receipt (optional) — the X-PAYMENT-RESPONSE value from the paid call. advertised_schema (optional) — the JSON schema the service advertised. max_claims — 1..20, default 8. LIMITATIONS: Judges CONSISTENCY (as-advertised, not contradicted), never service quality. Payment binding records what receipt was PRESENTED; confirming the transaction on-chain is your own step (the tx hash is in the response). Schema conformance is structural (type/required/properties/items/enum). Content checking has the same source-coverage limits as verify_claim. Paid per call (x402). EXAMPLE: attest_delivery({\"service\": \"https://api.vendor.xyz/enrich\", \"response_text\": \"{\\\"name\\\": \\\"APPLE INC\\\"}\", \"payment_receipt\": \"<X-PAYMENT-RESPONSE>\", \"advertised_schema\": {\"type\": \"object\", \"required\": [\"name\"]}}) -> {delivery_verdict: 'consistent', payment: {bound: true, transaction: '0x…'}, attestation: {…}}…"}],"inputs":{"probes":[{"url":"https://groundcheck.seiche.info/mcp","reachable":true,"authRequired":false,"latencyMs":1467,"serverInfo":{"name":"groundcheck","version":"0.7.2"}}],"packages":[{"registryType":"npm","identifier":"groundcheck-mcp","version":"0.6.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-07-26T16:45:02.040Z","repositoryUrl":"git+https://github.com/beepboop2025/groundcheck.git","weeklyDownloads":90}],"repo":{"found":true,"owner":"beepboop2025","repo":"groundcheck","archived":false,"pushedAt":"2026-10-31T21:38:32Z","stars":1,"forks":0,"openIssues":15,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/215868371?v=4","ownerCreatedAt":"2025-06-11T14:49:26Z","license":"MIT"},"icon":{"url":"https://groundcheck.seiche.info/favicon.ico","source":"registry","width":32,"height":32},"presence":{"stars":1,"forks":0,"downloadsWeek":90,"license":"MIT","lastPushAt":"2026-10-31T21:38:32.000Z","score":36}}}},"grade_history":[],"reviews":[]}