{"apiVersion":"v1","directorySlug":"mcp-data-mcp-ee7227512c","title":"See the internet. See the agents on it. — TunnelMind","description":"See the internet. See the agents on it. Before your AI agent trusts a website, a server, or a bot, TunnelMind reports what its instruments have actually seen that thing do — and signs every answer. Facts, not verdicts.","pageUrl":"https://www.mcpbundles.com/skills/mcp-data-mcp-ee7227512c","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp-data.tunnelmind.ai/mcp","hostedMcpUrl":null,"toolCount":96,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"ai.tunnelmind/mcp-data-mcp-ee7227512c","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"health_check","description":"Returns a minimal status object confirming the API is alive. Use this to verify\nconnectivity before chaining other calls, or as a liveness check in a workflow.","inputSchema":{"type":"object","properties":{}},"logicalName":"health_check","displayName":"health_check","title":"health_check","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_domain","description":"Returns the complete surveillance intelligence record for a domain name. If the\ndomain is in TunnelMind's tracker database (80,000+ entries), the response includes\ntracker category, risk score, fingerprinting data, cookie persistence, IAB TCF\npurposes, and the owning corporate entity. If the domain is not in the database,\na live probe is automatically run: RDAP registration data, DNS records (MX, SPF,\nTXT verification tokens), HTTP headers, and CSP third-party actors are fetched\nfresh from the e","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"doubleclick.net"}}},"logicalName":"get_domain","displayName":"get_domain","title":"get_domain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_domains","description":"Returns a paginated list of domains from the tracker database. Results are ordered\nalphabetically by domain name and support cursor-based pagination for full traversal.\nFiltering by category and minimum score allows targeted data extraction.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":100,"minimum":1},"cursor":{"type":"string"},"category":{"enum":["ad_tech","analytics","social","fingerprinting","content","cdn","other"],"type":"string"},"min_score":{"type":"integer","maximum":100,"minimum":0}}},"logicalName":"list_domains","displayName":"list_domains","title":"list_domains","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_entity","description":"Returns an entity record for a surveillance company or data broker, including its\nindustry, estimated annual data value per user (in USD), categories of personal data\ncollected, and the full list of domains it controls. Free tier returns 5 domains,\npaid returns up to 200.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","example":"alphabet","pattern":"^[a-z0-9\\-]+$"}}},"logicalName":"get_entity","displayName":"get_entity","title":"get_entity","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_entities","description":"Returns a paginated list of corporate entities in the TunnelMind surveillance\ndatabase. Includes data categories, estimated data value, and industry classification.\nUseful for enumerating the surveillance ecosystem by sector.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":100,"minimum":1},"cursor":{"type":"string"},"industry":{"type":"string","example":"ad_tech"}}},"logicalName":"list_entities","displayName":"list_entities","title":"list_entities","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search","description":"Searches both the domains table and the entities table simultaneously. Returns\nmatching domains (by domain name) and entities (by name or slug) in a single\nresponse. Minimum 2 characters, maximum 100 characters.","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","example":"google","maxLength":100,"minLength":2}}},"logicalName":"search","displayName":"search","title":"search","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_http","description":"Makes a live HEAD request to the target domain from the Cloudflare edge, follows\nup to 5 redirects, and returns the full redirect chain, final HTTP status, key\nresponse headers, a security header score, and any third-party surveillance\nactors referenced in the Content-Security-Policy header.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"nytimes.com"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_http","displayName":"intel_http","title":"intel_http","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_stack","description":"Fetches up to 32KB of the domain's HTML and response headers from the edge, then\nfingerprints the content for known CMS platforms, JavaScript frameworks, CDN\nproviders, and analytics tools. Detection is based on meta generator tags, script\nsrc patterns, response headers, and cookie names.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"wordpress.org"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_stack","displayName":"intel_stack","title":"intel_stack","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_robots","description":"Retrieves the target domain's `robots.txt` file and parses it for AI crawler\ndisallow rules. Specifically detects policies for known AI crawlers (GPTBot,\nClaudeBot, CCBot, Bytespider, etc.) and returns a structured summary of the\ncrawling policy.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"openai.com"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_robots","displayName":"intel_robots","title":"intel_robots","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_agent","description":"Probes a domain for known AI agent integration signals: `llms.txt`, `ai.txt`,\n`/.well-known/ai-plugin.json`, `openapi.json`, `swagger.json`, MCP manifest, MCP\nSSE endpoint. Returns a score based on the count of signals detected. Use this to\nassess whether a domain is ready for agent-to-agent interaction.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"stripe.com"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_agent","displayName":"intel_agent","title":"intel_agent","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_inject","description":"Fetches a domain's homepage and checks for content patterns that could constitute\nprompt injection attacks against AI agents that visit and ingest the page. Signals\ninclude hidden text, invisible divs, `<!-- AI: ignore -->` style comments, and\nknown injection patterns.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"example.com"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_inject","displayName":"intel_inject","title":"intel_inject","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"intel_optout","description":"Checks a domain for all known AI training data opt-out mechanisms beyond robots.txt:\nTDM (Text and Data Mining) reservation headers, `<meta name=\"ai\">` tags, Creative\nCommons NonCommercial licenses, and other machine-readable opt-out signals.","inputSchema":{"type":"object","required":["domain"],"properties":{"async":{"type":"boolean","default":false},"domain":{"type":"string","example":"nytimes.com"},"receipt":{"type":"boolean","default":false}}},"logicalName":"intel_optout","displayName":"intel_optout","title":"intel_optout","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_receipt","description":"Returns metadata for a TunnelMind surveillance receipt — a signed document proving\nthat a specific user's surveillance exposure was observed, measured, and recorded at\na specific time. Does NOT return the receipt's signature (anti-phishing protection).\nTo verify a receipt's content integrity, use `verify_receipt` with the hash and\nsignature from the receipt document itself.","inputSchema":{"type":"object","required":["receipt_id"],"properties":{"receipt_id":{"type":"string","pattern":"^[a-zA-Z0-9\\-]+$","maxLength":128}}},"logicalName":"get_receipt","displayName":"get_receipt","title":"get_receipt","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verify_receipt","description":"Tamper-detection verification for TunnelMind surveillance receipts. Submit the\nreceipt ID, the SHA-256 content hash, and the Ed25519 signature from the receipt\ndocument. The registry compares these against what was recorded at issuance time.\nReturns VALID if both match exactly, INVALID with a specific mismatch reason otherwise.","inputSchema":{"type":"object","required":["receipt_id","content_hash","signature"],"properties":{"signature":{"type":"string","maxLength":512},"receipt_id":{"type":"string","example":"rcpt_01HXYZ123","maxLength":128},"content_hash":{"type":"string","example":"sha256:abc123...","maxLength":256}}},"logicalName":"verify_receipt","displayName":"verify_receipt","title":"verify_receipt","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_free_key","description":"Self-serve free tier — the rung between anonymous access and paid\nblocks. One email in, one API key out, shown exactly once.","inputSchema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","example":"dev@example.com"}}},"logicalName":"create_free_key","displayName":"create_free_key","title":"create_free_key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_api_key","description":"Returns the tier, label, masked owner email, creation date, last-used timestamp,\ntoday's request count, and daily request limit for the API key used in this request.\nUseful for agents that need to monitor their own quota consumption.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_api_key","displayName":"get_api_key","title":"get_api_key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"revoke_api_key","description":"Permanently deactivates the API key used to make this request. This action is\nirreversible. After revocation, the key will return 401 on all subsequent calls.\nIf you have an active Stripe subscription, you must separately cancel it at\nstripe.com — revoking the key does not cancel billing.","inputSchema":{"type":"object","properties":{}},"logicalName":"revoke_api_key","displayName":"revoke_api_key","title":"revoke_api_key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_task","description":"Returns the current status of a task created by an `?async=true` intel request.\nPoll this endpoint until `status` is one of: `complete`, `failed`, `cancelled`,\n`expired`. On `complete`, the `result` field contains the same payload the sync\nendpoint would have returned. On `failed`, `error.message` explains the failure.","inputSchema":{"type":"object","required":["task_id"],"properties":{"task_id":{"type":"string","example":"01KPFC524XASR404D436DX60AP","pattern":"^[A-Z0-9]{26}$"}}},"logicalName":"get_task","displayName":"get_task","title":"get_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cancel_task","description":"Marks the task as `cancelled`. If the task is already in a terminal state\n(`complete`, `failed`, `expired`), returns 409 Conflict. Only the identity\nthat created the task may cancel it.","inputSchema":{"type":"object","required":["task_id"],"properties":{"task_id":{"type":"string","pattern":"^[A-Z0-9]{26}$"}}},"logicalName":"cancel_task","displayName":"cancel_task","title":"cancel_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"stream_task","description":"Opens a persistent SSE connection that emits events as the task progresses.\nThe stream closes automatically when the task reaches a terminal state or after\n~90 seconds (timeout). Heartbeat comments are sent every ~15 seconds to keep\nthe connection alive through proxies.","inputSchema":{"type":"object","required":["task_id"],"properties":{"task_id":{"type":"string","pattern":"^[A-Z0-9]{26}$"}}},"logicalName":"stream_task","displayName":"stream_task","title":"stream_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"audit_export","description":"Returns NDJSON (one JSON object per line) of audit log entries. Each entry records\nthe operation called, the identity, hashes of the request and response, duration,\nand an Ed25519 signature over the canonical entry JSON. Entries are hash-chained:\neach entry's `prev_entry_hash` is SHA-256 of the previous entry's signature,\nmaking deletion of any entry detectable offline.","inputSchema":{"type":"object","properties":{"to":{"type":"string","format":"date-time"},"from":{"type":"string","format":"date-time","example":"2026-04-17T00:00:00Z"},"limit":{"type":"integer","default":1000,"maximum":5000,"minimum":1}}},"logicalName":"audit_export","displayName":"audit_export","title":"audit_export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"generate_receipt","description":"Looks up each submitted domain in the TunnelMind tracker database, aggregates risk\nmetrics (avg score, max score, fingerprinters, high-risk domains, entity ownership),\nand issues a signed surveillance receipt. The receipt is stored in the public registry\nand can be verified at `/verify/{receipt_id}`.","inputSchema":{"type":"object","properties":{"domain":{"type":"string"},"domains":{"type":"array","items":{"type":"string"},"example":["doubleclick.net","google-analytics.com","facebook.com"],"maxItems":50,"minItems":1}}},"logicalName":"generate_receipt","displayName":"generate_receipt","title":"generate_receipt","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"traction","description":"Live traction numbers computed from sources the Worker owns: the\nhash-chained D1 audit log (7-day call volume, distinct identified\ncallers, top operations), the stored-receipt table, and Stripe\n(succeeded charges → paying customers, gross USD). Ed25519-signed\nwith the same attestation envelope as /v1/status so the numbers can\nbe replayed to an auditor.","inputSchema":{"type":"object","properties":{}},"logicalName":"traction","displayName":"traction","title":"traction","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"tollbooth_stats","description":"The public read over the Conduct Log Commons: which agents knocked on\nattested tollbooth sites in the last 7 days, what they did when offered\npaid access, and what they would have paid. First-party monitors and\ncredential-scanning recon are classified and EXCLUDED from the headline\n(reported separately, never conflated). Attested tier only — keys a\ndomain has vouched for via /.well-known/tollbooth-site.json.","inputSchema":{"type":"object","properties":{}},"logicalName":"tollbooth_stats","displayName":"tollbooth_stats","title":"tollbooth_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"tollbooth_export","description":"Free bulk read of the commons — the raw record is never paywalled. Every\nrow is a tollbooth document exactly\nas its site signed it (Ed25519 over RFC 8785 JCS, key = the row's own\n`site`), wrapped in a `_commons` envelope naming the tier and vouching\ndomain. Nothing in a row requires trusting TunnelMind.","inputSchema":{"type":"object","properties":{"day":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"kind":{"enum":["receipts","reports"],"type":"string","default":"receipts"},"tier":{"enum":["attested","all"],"type":"string","default":"attested"},"limit":{"type":"integer","default":200,"maximum":5000,"minimum":1},"format":{"enum":["json"],"type":"string","default":"json"}}},"logicalName":"tollbooth_export","displayName":"tollbooth_export","title":"tollbooth_export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"tollbooth_sites","description":"Membership of the commons: every signing key that has reported, the\ndomain that vouched for it (by serving the key in its\n/.well-known/tollbooth-site.json), and when it was last re-checked.\nAttested only by default; tier=all adds unattested keys with the domain\nthey CLAIMED but that did not (yet) vouch for them.","inputSchema":{"type":"object","properties":{"tier":{"enum":["attested","all"],"type":"string","default":"attested"}}},"logicalName":"tollbooth_sites","displayName":"tollbooth_sites","title":"tollbooth_sites","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"snapshot_manifest","description":"P4 corpus replication, the OPA \"push data into the PDP\" pattern. A\ndaily snapshot of the domain corpus (domain, score, category,\nfingerprinting, entity) is published as deterministic JSONL with a\nmanifest carrying row_count, sha256 over the exact bytes, a diff\nsummary vs the previous day, and an Ed25519-signed Receipt v1.0\ncommitted to the transparency log — a PDP that replicates the data\ncan verify offline that it loaded exactly what was published.","inputSchema":{"type":"object","required":["date"],"properties":{"date":{"type":"string"}}},"logicalName":"snapshot_manifest","displayName":"snapshot_manifest","title":"snapshot_manifest","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"snapshot_data","description":"The exact bytes the manifest's sha256 commits to. Content-Type\n`application/x-ndjson`; rows ordered by domain. Verify:\n`sha256(body) == manifest.sha256`.","inputSchema":{"type":"object","required":["date"],"properties":{"date":{"type":"string"}}},"logicalName":"snapshot_data","displayName":"snapshot_data","title":"snapshot_data","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"snapshot_diff","description":"JSONL diff vs the previous snapshot — apply +/~/- lines instead of re-pulling the corpus.","inputSchema":{"type":"object","required":["date"],"properties":{"date":{"type":"string"}}},"logicalName":"snapshot_diff","displayName":"snapshot_diff","title":"snapshot_diff","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"status_history","description":"One sample per 20-minute monitor sweep. `uptime_pct` is the share of\nsweeps in which every fail point was green (the strictest read);\n`per_monitor` lists only monitors that failed at least once in the\nwindow. History begins at feature deploy and is never extrapolated\nbackwards — an empty window returns `uptime_pct: null`, not 100.","inputSchema":{"type":"object","properties":{"days":{"type":"integer","default":30,"maximum":90,"minimum":1}}},"logicalName":"status_history","displayName":"status_history","title":"status_history","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_self_view","description":"P83 Gate 1. The caller is the subject: every fact here comes from the\nTLS handshake and headers the caller has already sent, so there is no\nrender, no browser, and nothing to authorize.","inputSchema":{"type":"object","properties":{"receipt":{"type":"boolean","default":false}}},"logicalName":"get_self_view","displayName":"get_self_view","title":"get_self_view","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"agent_registries_lookup","description":"P75 registry aggregation: the cross-lens join applied to agent identity.\nIncumbent providers each consult only their own registry; this endpoint\nchecks every registry TunnelMind can reach and labels each answer with\nan explicit state, so a gap can never be mistaken for a clean result:","inputSchema":{"type":"object","required":["subject"],"properties":{"receipt":{"enum":["true"],"type":"string"},"subject":{"type":"string"}}},"logicalName":"agent_registries_lookup","displayName":"agent_registries_lookup","title":"agent_registries_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verify_agent","description":"Reconciles a claimed bot User-Agent against the operator's OWN published\nIP-range feed (Googlebot, GPTBot, OAI-SearchBot, ChatGPT-User,\nPerplexityBot, Perplexity-User, Bingbot). A User-Agent is trivial to\nforge; membership in the operator's published CIDR ranges is not. This\nexposes the common attack: a scraper sending `User-Agent: Googlebot` from\nan IP in none of Google's ranges.","inputSchema":{"type":"object","required":["ip"],"properties":{"ip":{"type":"string"},"ua":{"type":"string"}}},"logicalName":"verify_agent","displayName":"verify_agent","title":"verify_agent","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_subscription","description":"Subscribe to a node (ip, domain, asn, or entity slug). On a recurring\nsweep (~20 min) TunnelMind re-runs the fused `POST /v1/verify` verdict and,\nwhen the *material* result changes — the verdict label flips, the trust\nscore crosses a band, or the signal set changes — POSTs a signed event to\nyour `callback_url`.","inputSchema":{"type":"object","required":["node","callback_url"],"properties":{"node":{"type":"string","example":"example.com"},"events":{"type":"array","items":{"enum":["verdict_change"],"type":"string"}},"callback_url":{"type":"string","format":"uri","example":"https://hooks.example.com/tunnelmind"}}},"logicalName":"create_subscription","displayName":"create_subscription","title":"create_subscription","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_subscriptions","description":"Returns the caller's active and inactive subscriptions (signing_key redacted). Requires an API key.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_subscriptions","displayName":"list_subscriptions","title":"list_subscriptions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_subscription","description":"Read one of your subscriptions (signing_key redacted).","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"logicalName":"get_subscription","displayName":"get_subscription","title":"get_subscription","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_subscription","description":"Cancel a subscription.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"logicalName":"delete_subscription","displayName":"delete_subscription","title":"delete_subscription","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"receipt_log_sth","description":"P72 RFC 6962 transparency log over the unified receipt ledger\n(ADR-010). The STH commits to the entire log: `tree_size`, `root_hash`\n(`0x` + SHA-256), `timestamp`, and an Ed25519 signature (with `key_id`\nand embedded public key) over the RFC 8785 canonicalization of the\nbody. Hashes only — receipt bodies are never on this surface.","inputSchema":{"type":"object","properties":{}},"logicalName":"receipt_log_sth","displayName":"receipt_log_sth","title":"receipt_log_sth","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"receipt_log_inclusion_proof","description":"Proves a specific receipt (by unified `receipt_id`, lens alias, or raw\n`leaf_index`) is included in the tree at `tree_size` (default: the\nlatest STH's). Returns `leaf_hash`, the `audit_path`, the recomputed\n`root_hash`, and the matching STH. What this proves: the receipt in\nyour hand is byte-identical to the one sequenced into the log — not\nthat the observation inside it was correct (ADR-010).","inputSchema":{"type":"object","properties":{"tree_size":{"type":"integer","minimum":1},"leaf_index":{"type":"integer","minimum":0},"receipt_id":{"type":"string"}}},"logicalName":"receipt_log_inclusion_proof","displayName":"receipt_log_inclusion_proof","title":"receipt_log_inclusion_proof","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"receipt_log_consistency_proof","description":"Proves the log at size `second` is an append-only extension of the log\nat size `first` — history was never rewritten. Returns both roots and\nthe proof path. Verify offline with\n`scripts/verify-log.mjs consistency <proof.json>`.","inputSchema":{"type":"object","required":["first","second"],"properties":{"first":{"type":"integer","minimum":1},"second":{"type":"integer","minimum":2}}},"logicalName":"receipt_log_consistency_proof","displayName":"receipt_log_consistency_proof","title":"receipt_log_consistency_proof","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"receipt_lookup","description":"P72 unified receipt ledger (ADR-010): every receipt-issuing surface\n(cross-lens verify, tracker verify, verdict, profile, explain,\nGhostRoute, Sigil/ATAP, compliance export) records the exact signed\ndocument it returned, keyed by one ID space.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"logicalName":"receipt_lookup","displayName":"receipt_lookup","title":"receipt_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"attributes_lookup","description":"P73 fast attributes endpoint (PIP-PLAN P3): a full `POST /v1/verify`\nresolve fans out across four lenses (~2s) — fine for preflight, fatal\ninside a per-request authorization loop. This endpoint serves the\nlast-known signed bundle from a single KV read, with the P69 freshness\ncontract deciding how much to trust it.","inputSchema":{"type":"object","required":["node"],"properties":{"node":{"type":"string"}}},"logicalName":"attributes_lookup","displayName":"attributes_lookup","title":"attributes_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"tracker_verify","description":"The Tracker lens-owned verify surface: a per-node verdict over the\nnormalized DDG Tracker Radar / IAB TCF / Disconnect.me corpus, with an\noptional signed TunnelMind Receipt v1.0. This is the single-lens ground\ntruth the fused `POST /v1/verify` cites for its tracker block.","inputSchema":{"type":"object","required":["node"],"properties":{"node":{"type":"string"},"receipt":{"type":"boolean","default":false}}},"logicalName":"tracker_verify","displayName":"tracker_verify","title":"tracker_verify","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_verify_domain","description":"Confirms a publisher controls a domain by checking for a DNS TXT record\nthe owner publishes under `_tunnelmind.{domain}`. A DNS record can only\nbe set by whoever controls the zone, so its presence proves control — a\nstronger signal than ads.txt, which is just a file anything in the\nrequest path can serve.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"logicalName":"sigil_verify_domain","displayName":"sigil_verify_domain","title":"sigil_verify_domain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_verify_ip_type","description":"Classifies an IPv4 or IPv6 address by network type — the high-value ad-fraud\nsignal being datacenter traffic posing as residential or living-room\n(CTV) devices. IP→ASN resolution uses Team Cymru's public service; the\nASN is then classified by its registered organization name.","inputSchema":{"type":"object","required":["ip"],"properties":{"ip":{"type":"string"}}},"logicalName":"sigil_verify_ip_type","displayName":"sigil_verify_ip_type","title":"sigil_verify_ip_type","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_verify_adscert","description":"Reports whether a domain publishes ads.cert (IAB Tech Lab Authenticated\nConnections) DNS records — a readiness signal showing the domain\nsupports cryptographically authenticated ad-tech connections. This is\nnot signature verification: ads.cert is pairwise, so verifying a signed\nbid request requires Sigil to be a delegated participant (a future\nbuild). DNS-only and stateless.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"logicalName":"sigil_verify_adscert","displayName":"sigil_verify_adscert","title":"sigil_verify_adscert","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_verify_app_bundle","description":"Verifies that a mobile or CTV app bundle ID actually exists in the\nrelevant app store — used to detect bundle spoofing in bid requests.","inputSchema":{"type":"object","required":["bundle_id","platform"],"properties":{"platform":{"enum":["ios","android","ctv_roku","ctv_fire","ctv_samsung","ctv_lg","ctv_vizio","web"],"type":"string"},"bundle_id":{"type":"string","example":"com.nytimes.NYTimes","maxLength":255},"claimed_developer":{"type":"string","example":"The New York Times Company"}}},"logicalName":"sigil_verify_app_bundle","displayName":"sigil_verify_app_bundle","title":"sigil_verify_app_bundle","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cross_lens_lookup","description":"Returns all three lens views for a single node key without computing a\nfused verdict. Use this when you want raw transparency — the Tracker\ncatalog presence, Scry attacker observations, and Sigil supply-graph\nposition — and intend to make your own decision. For an opinionated\nverdict, call `cross_lens_verify` instead. For an agent-side\nallow/caution/deny gate plus signed consultation receipt, call\n`preflight_should_i_act`.","inputSchema":{"type":"object","required":["node"],"properties":{"node":{"type":"string"}}},"logicalName":"cross_lens_lookup","displayName":"cross_lens_lookup","title":"cross_lens_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verdict_lookup","description":"The reconciliation layer in one call. Where `cross_lens_verify` answers\n\"what is this network destination,\" `verdict_lookup` answers a different,\nsharper question about a key-addressed ACTOR: **does what this key claims\nabout itself match what the network has seen it do?**","inputSchema":{"type":"object","required":["key"],"properties":{"eat":{"type":"string"},"key":{"type":"string"},"sig":{"type":"string"},"nonce":{"type":"string"},"claims":{"type":"string"},"subject":{"type":"string"}}},"logicalName":"verdict_lookup","displayName":"verdict_lookup","title":"verdict_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"explain_verdict","description":"Call this when you need to ACT ON a verdict and prove why. It returns the\nexact verdict `/v1/verify/{node}` computes (same fusion, same weights)\nPLUS a traced evidence chain: every claim is attributed to where it came\nfrom — the attested sensor fleet (with attestation tier), a named Augur\nthreat feed, sellers.json/ads.txt supply-graph presence, the cross-lens\nco-observation join, the DDG/IAB tracker corpus — and how much each item\nmoved the verdict (`weight`; null = supplementary, not scored).","inputSchema":{"type":"object","required":["node"],"properties":{"node":{"type":"string"}}},"logicalName":"explain_verdict","displayName":"explain_verdict","title":"explain_verdict","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"profile_entity","description":"Call this before routing traffic, bidding on inventory, or trusting a\ncounterparty. It fuses ALL THREE TunnelMind lenses for one subject —\nScry (attacker intelligence + threat feeds + open ports), Sigil\n(ad-supply-chain position + trust score + ATAP witness count), and\nTracker (DDG/IAB catalog + prevalence + categories) — into a single\nconfidence-scored profile plus a signed P38 receipt.","inputSchema":{"type":"object","properties":{"ip":{"type":"string","example":"8.8.8.8"},"domain":{"type":"string","example":"pubmatic.com"},"entity":{"type":"string","example":"google-doubleclick"}}},"logicalName":"profile_entity","displayName":"profile_entity","title":"profile_entity","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"signal_tracker_density","description":"Observed component counts first, a labelled derived roll-up second. The\ncomponents — `data_categories`, supply-surface counts (ssp + publisher +\ndsp + owns_seat + buys_through), and corroborating `sources` — are facts.\n`derived.tracker_density` (0–100) is a weighted blend of those counts, not\na measurement; `data_cost_usd` is deliberately excluded (non-zero only for\na curated seed, so weighting by it would fabricate precision). Anchors the\n`surveillance_bigtech` adversary class for the cross-len","inputSchema":{"type":"object","required":["entity_slug"],"properties":{"entity_slug":{"type":"string"}}},"logicalName":"signal_tracker_density","displayName":"signal_tracker_density","title":"signal_tracker_density","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"signal_dark_pool_risk","description":"Reconciles every sell path a publisher declares (`sells_through`) against\neach SSP's own sellers.json (`exchange_seat`) and keeps three classes\nstrictly separate: `corroborated` (seat present), `contradicted` (SSP\ncrawled but seller_id absent — real risk), and `unchecked` (SSP not yet\ncrawled — excluded from risk, lowers confidence). Combined with\npublisher-side ads.txt opacity. Two-sided corroboration is the cross-lens\nmoat — it catches unauthorized resale a one-sided ads.txt read cannot.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"logicalName":"signal_dark_pool_risk","displayName":"signal_dark_pool_risk","title":"signal_dark_pool_risk","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"signal_halo_score","description":"Scores an entity by the trust character of its neighbours — the SSPs its\npublishers sell through and the DSPs it buys through. Reports neighbour\ncounts, mean/min neighbour trust, and how many neighbours are\nadversary-classified (P46). `derived.halo_score` (0–100, or null when no\nneighbour has a computed trust) is mean neighbour trust dragged down by\nadversary-neighbour share. Evidence about an entity's company, not a\npersisted verdict — no profile poisoning.","inputSchema":{"type":"object","required":["entity_slug"],"properties":{"entity_slug":{"type":"string"}}},"logicalName":"signal_halo_score","displayName":"signal_halo_score","title":"signal_halo_score","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"signal_team_signal","description":"Surfaces other entities that operate as a coordinated team with this one:\nthey share a NARROWLY-held direct seller account (2–8 entities — network\nhouse accounts shared by hundreds are separated into\n`house_accounts_excluded`, not counted) or co-own an exchange seat.\n`derived.team_signal` (0–100) is a coordination magnitude over teammate\ncount, shared-account breadth, and co-owned seats.","inputSchema":{"type":"object","required":["entity_slug"],"properties":{"entity_slug":{"type":"string"}}},"logicalName":"signal_team_signal","displayName":"signal_team_signal","title":"signal_team_signal","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_verify_token","description":"Verifies the authenticity and expiry of a `sigil_token` returned by\n`sigil_verify_supply_path`. Anyone can call this — no key needed; Sigil\nverifies the Ed25519 signature server-side. Tokens live 5 minutes.","inputSchema":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}},"logicalName":"sigil_verify_token","displayName":"sigil_verify_token","title":"sigil_verify_token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_traverse","description":"Reconstructs the supply paths for a publisher domain from Sigil's own\ncrawl and returns them ITEMIZED — distinct from `sigil_verify_supply_chain`\n(which verifies a schain the caller brings) and from `signal_dark_pool_risk`\n(which returns only aggregate counts). Every SSP the publisher declares it\nsells through is joined to that SSP's identity and classified two-sided\nagainst the SSP's sellers.json: `corroborated` (seat present),\n`contradicted` (SSP crawled but seller_id absent — real risk), `unc","inputSchema":{"type":"object","required":["domain"],"properties":{"limit":{"type":"integer","default":200,"maximum":500,"minimum":1},"domain":{"type":"string"}}},"logicalName":"sigil_traverse","displayName":"sigil_traverse","title":"sigil_traverse","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_stats","description":"One public \"state of the corpus\" readout — the whole graph in a single\ncall. Distinct from the Scry-only sensor stats at\napi.tunnelmind.ai/v1/stats (which this reuses for the `scry` block): this\nspans Scry, Sigil, and Tracker plus the attestation and routing layers.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_stats","displayName":"get_stats","title":"get_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_website_history","description":"The over-time layer behind the site's website map (the radar's\nevolution). Every domain verify appends the domain's machinery tuple\n— origin AS, RPKI state, announced prefix, network country, CDN,\ncertificate authority, registrar, owning entity, and the per-lens\ncoverage tri-states — to an append-only change-log, one row per\nobserved change (plus a daily heartbeat row per looked-up domain).","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"logicalName":"get_website_history","displayName":"get_website_history","title":"get_website_history","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_freshness","description":"D4 — the freshness contract a PDP can gate on. For each lens (Scry /\nSigil / Tracker / GhostRoute) this reports the newest observation\ntimestamp in the corpus, the declared ingest cadence (taken from the\ningester's own code and cron schedules, never asserted), the published\nSLO, the current corpus age in seconds, and whether the SLO holds.\nGhostRoute reports its three corpus workers (CT hourly, RPKI 6-hourly,\nASN daily) individually.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_freshness","displayName":"get_freshness","title":"get_freshness","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_check","description":"GhostRoute is TunnelMind's fourth lens: routing-integrity / sovereignty\nverification. It answers \"is this infrastructure where it claims to be,\nowned by who it claims, routing where it says — and does that match the\nsovereign jurisdiction it asserts?\" It resolves the originating ASN owner,\nRPKI validity, the certificate-issuing CA's jurisdiction, and matches the\nsubject against a curated AI-infrastructure corpus to recover any\nsovereignty CLAIM (e.g. an \"EU-sovereign\" AI service), then scores re","inputSchema":{"type":"object","required":["entity"],"properties":{"entity":{"type":"string"},"receipt":{"type":"boolean","default":false}}},"logicalName":"ghostroute_check","displayName":"ghostroute_check","title":"ghostroute_check","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_verify","description":"Retrieves a previously-issued, signed GhostRoute receipt by its\nGR-YYYY-NNNNNNN id, for independent audit of a past sovereignty verdict.","inputSchema":{"type":"object","required":["receipt_id"],"properties":{"receipt_id":{"type":"string"}}},"logicalName":"ghostroute_verify","displayName":"ghostroute_verify","title":"ghostroute_verify","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_asn_lookup","description":"Returns GhostRoute's ownership-graph record for an autonomous system: the\nregistrant/parent organisation, its HQ country and sovereign zone, RIR,\nand cloud/AI-infrastructure flags. The long-term moat — who actually owns\nthe network a route originates from.","inputSchema":{"type":"object","required":["asn"],"properties":{"asn":{"type":"string"}}},"logicalName":"ghostroute_asn_lookup","displayName":"ghostroute_asn_lookup","title":"ghostroute_asn_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_ai_lookup","description":"Checks whether a domain or ASN belongs to a known AI company's\ninfrastructure and what sovereignty it CLAIMS (program, zone, HQ), the\nbaseline GhostRoute scores routing reality against.","inputSchema":{"type":"object","required":["entity"],"properties":{"entity":{"type":"string"}}},"logicalName":"ghostroute_ai_lookup","displayName":"ghostroute_ai_lookup","title":"ghostroute_ai_lookup","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_ct_witness","description":"Returns GhostRoute's first-party Certificate-Transparency witness state:\nthe latest signature-verified Signed Tree Head (STH) for every trusted,\nnon-Google CT log TunnelMind independently witnesses, plus a regression\nscan over our own append-only history. Proof the platform holds its own\nsignature-checked roots rather than reselling crt.sh/certspotter.","inputSchema":{"type":"object","properties":{}},"logicalName":"ghostroute_ct_witness","displayName":"ghostroute_ct_witness","title":"ghostroute_ct_witness","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_ct_proofs","description":"Returns GhostRoute's per-cert inclusion proofs: each is a cryptographic\ndemonstration that the exact certificate a host serves is included in an\nappend-only CT log whose root TunnelMind signature-verified — upgrading\n\"a monitor said this cert exists\" to \"proven in a log we witness\". Failed\nattempts are included with a `reason`; a cert that suddenly cannot be\nproven is itself a signal.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1},"domain":{"type":"string"}}},"logicalName":"ghostroute_ct_proofs","displayName":"ghostroute_ct_proofs","title":"ghostroute_ct_proofs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ghostroute_ct_alerts","description":"Returns the durable, deduplicated ledger of CT equivocation events the\nGhostRoute witness worker detects and pushes — a tree_size_rewind (an\nappend-only log shrank), a root_fork (one tree_size witnessed with two\ndifferent Merkle roots = a split-view log), or an sth_signature_invalid\n(a log's latest Signed Tree Head failed signature verification). Where\n`/v1/ghostroute/witness` shows live computed health, this is the immutable\nfirst-detection log: each entry's `detected_at` is when TunnelMind fir","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1}}},"logicalName":"ghostroute_ct_alerts","displayName":"ghostroute_ct_alerts","title":"ghostroute_ct_alerts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_bgp_events","description":"Returns the routing anomalies the bgp-monitor has observed against\nTunnelMind's BGP watchlist — the witnessability layer's routing\ndimension. The monitor polls RIPEstat (RIPE NCC) on a cron, self-baselines\neach watched prefix's origin set on first sight, then records an event\nwhenever a later poll deviates from that baseline.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":100,"maximum":500,"minimum":1},"resource":{"type":"string"},"since_ms":{"type":"integer","format":"int64"}}},"logicalName":"get_bgp_events","displayName":"get_bgp_events","title":"get_bgp_events","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_ads_txt_history","description":"Returns a publisher's ads.txt change log — one entry per crawl in which\nits authorized-seller set changed. A publisher quietly adding a reseller\nline is a real fraud signal; this is how a buyer audits supply over time.","inputSchema":{"type":"object","required":["domain"],"properties":{"limit":{"type":"integer","default":50,"maximum":200},"since":{"type":"string","format":"date-time"},"domain":{"type":"string"}}},"logicalName":"sigil_ads_txt_history","displayName":"sigil_ads_txt_history","title":"sigil_ads_txt_history","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_score_weights","description":"Returns the active, versioned default weights used to combine an\nentity's trust-score components, plus the list of spec components that\nare not yet evaluated. Pass a custom `weights` object to\n`sigil_score_batch` to re-weight without changing the defaults.","inputSchema":{"type":"object","properties":{}},"logicalName":"sigil_score_weights","displayName":"sigil_score_weights","title":"sigil_score_weights","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_score_entity","description":"Returns the pre-computed 0.0–1.0 trust score for one entity, its\ncomponent breakdown, and the 14-day trend. Scores are refreshed daily\nby a database job — this endpoint never recomputes from raw data, so it\nis fast and deterministic.","inputSchema":{"type":"object","required":["entity_id"],"properties":{"weights":{"type":"string"},"entity_id":{"type":"string"}}},"logicalName":"sigil_score_entity","displayName":"sigil_score_entity","title":"sigil_score_entity","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_score_batch","description":"Scores up to 200 entities in one round-trip — built for agents\nevaluating many supply sources during campaign setup. Per-item parse\nfailures are returned inline; the batch never fails as a whole.","inputSchema":{"type":"object","required":["entity_ids"],"properties":{"weights":{"type":"object"},"entity_ids":{"type":"array","items":{"type":"string"},"example":["publisher:nytimes.com","ssp:pubmatic.com"],"maxItems":200}}},"logicalName":"sigil_score_batch","displayName":"sigil_score_batch","title":"sigil_score_batch","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_atap_witness","description":"Ingests one agent-reported event (`bid:submitted`, `bid:won`,\n`bid:lost`, `budget:decremented`) into an AIT's hash-chained\nattestation log. Sigil validates the payload (rejecting any PII per\nATAP §7.6), classifies the evidence tier — `anchored` if a\n`bid:submitted` cites a valid Sigil token issued for this AIT and\nmatching the bid's supply path, otherwise `asserted` — derives any\n`constraint:violated` events, then chains and signs each event.","inputSchema":{"type":"object","required":["ait","event_type","payload"],"properties":{"ait":{"type":"string"},"payload":{"type":"object"},"event_type":{"enum":["bid:submitted","bid:won","bid:lost","budget:decremented"],"type":"string"}}},"logicalName":"sigil_atap_witness","displayName":"sigil_atap_witness","title":"sigil_atap_witness","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_atap_roll_block","description":"Rolls every not-yet-blocked Witness Event for an AIT into one signed\nATAP Attestation Block with a profile `period_summary`, chained onto the\nprior block.","inputSchema":{"type":"object","required":["ait"],"properties":{"ait":{"type":"string"}}},"logicalName":"sigil_atap_roll_block","displayName":"sigil_atap_roll_block","title":"sigil_atap_roll_block","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_atap_ait_status","description":"Returns an AIT's status, chain head hash, event count, pending-event\ncount, per-tier event counts, and the anchored-bid coverage ratio.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"logicalName":"sigil_atap_ait_status","displayName":"sigil_atap_ait_status","title":"sigil_atap_ait_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"sigil_receipt_generate","description":"Assembles the ATAP v0.1 §7.5 Receipt ZIP for an AIT — the signed\nReceipt (`manifest.json`), the AIT, the Attestation Block chain, the\nwitness public key, a tier-graded `summary.json`, the bundled\n`verify.sh` reference verifier, and the witness events + sigil_tokens\nas profile artifacts. Any pending events are rolled into a final block\nfirst.","inputSchema":{"type":"object","required":["ait"],"properties":{"ait":{"type":"string"},"format":{"enum":["full","summary"],"type":"string","default":"full"}}},"logicalName":"sigil_receipt_generate","displayName":"sigil_receipt_generate","title":"sigil_receipt_generate","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"compliance_profile","description":"Returns your current compliance configuration (regime, retention_days,\nexport_formats, enabled) and the catalog of supported regimes (EU AI Act\nArt.12, DORA, NYDFS 500, HIPAA, PCI DSS, SOC 2, generic) and export\nformats (signed_json, csv, eat, stix). Authenticated. The compliance\nledger is a tamper-evident, retained record of every verdict you make —\nconfigure it once, then it self-maintains.","inputSchema":{"type":"object","properties":{}},"logicalName":"compliance_profile","displayName":"compliance_profile","title":"compliance_profile","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"compliance_ledger","description":"Returns your hash-chained decision records — one per verdict-bearing call\n(/v1/verify, /v1/explain, /v1/preflight, /v1/profile) made while compliance\nis enabled. Each entry carries its node, verdict, scores, receipt_id, the\nfull decision record, and the chain hashes (prev_hash, entry_hash). Filter\nwith from/to (ISO8601) and page with cursor (a seq) + limit (≤1000).","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"from":{"type":"string"},"limit":{"type":"integer"},"cursor":{"type":"integer"}}},"logicalName":"compliance_ledger","displayName":"compliance_ledger","title":"compliance_ledger","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"compliance_export","description":"Generates a signed export bundle of your ledger over an optional time\nwindow, mapped to your regime's field names and citation, with a manifest\n+ chain-integrity proof + the latest signed checkpoint. Choose the format\nwith ?format= (signed_json | csv | eat | stix; defaults to your profile's\nfirst) and override the regime with ?regime=. The response is a downloadable\nartifact your auditor can verify independently against the spec.","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"from":{"type":"string"},"format":{"type":"string"},"regime":{"type":"string"}}},"logicalName":"compliance_export","displayName":"compliance_export","title":"compliance_export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"compliance_verify","description":"Recomputes your entire hash chain server-side and reports integrity\n({ intact, entry_count, chain_head_hash } — plus reason + first_break_seq\nif a record was altered or deleted), alongside the most recent Ed25519\ncheckpoint signed with the TunnelMind receipt key. This is the auditor's\n\"prove it\" button — and even TunnelMind cannot rewrite history before a\nsigned checkpoint without detection.","inputSchema":{"type":"object","properties":{}},"logicalName":"compliance_verify","displayName":"compliance_verify","title":"compliance_verify","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_analyst_config","description":"Returns the TunnelMind analyst config bundle. Configures any LLM\n(Claude, GPT, Gemini, local) to behave as a TunnelMind analyst that\nknows the data graph, follows the 5-call golden path, and surfaces\nattestation_tier on every claim.","inputSchema":{"type":"object","properties":{"receipt":{"enum":["true","false"],"type":"string","default":"false"},"surface":{"enum":["data","scry","sigil"],"type":"string","default":"data"},"version":{"type":"string","example":"1.0.0"}}},"logicalName":"get_analyst_config","displayName":"get_analyst_config","title":"get_analyst_config","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"check_receipt_revoked","description":"Single-item revocation lookup per Receipt Format v1.0 §8.2. Verifiers that\ndo not want to maintain a local mirror of `/.well-known/receipt-revocations.json`\ncall this endpoint instead. The response includes `feed_version` for cache\ncoherence.","inputSchema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","example":"019e8054-4449-7a36-869f-cb76a3447d5a"},"key_id":{"type":"string","example":"tm-receipt-2026-05"}}},"logicalName":"check_receipt_revoked","displayName":"check_receipt_revoked","title":"check_receipt_revoked","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"scan_injection","description":"Runs a curated signature corpus over a piece of untrusted text — content\nan agent is about to consume, a retrieved document, a tool result, an\nemail body — and returns the matched injection patterns plus a bounded\n0..1 risk score. This is a signal, never a policy decision: the caller\ndecides what to do with a flagged input.","inputSchema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":200000}}},"logicalName":"scan_injection","displayName":"scan_injection","title":"scan_injection","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"scan_mcp","description":"Connect to a caller-supplied MCP server (Streamable-HTTP transport),\nread its advertised tools, and run the injection corpus over every tool\nname / description / input schema — plus a capability heuristic that\nflags broad, dangerous powers (shell execution, filesystem write,\ncredential access, arbitrary network, destructive DB ops). Returns a\nper-tool safety report. A caution to review, never a verdict.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}},"logicalName":"scan_mcp","displayName":"scan_mcp","title":"scan_mcp","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"submit_feedback","description":"Close the loop: after you acted on a TunnelMind verdict, tell us how it\nwent. Reports aggregate per node into an advisory second opinion that any\ncaller can read back via `GET /v1/feedback/{node}`.","inputSchema":{"type":"object","required":["node","outcome"],"properties":{"node":{"type":"string","example":"doubleclick.net"},"note":{"type":"string","maxLength":500},"outcome":{"enum":["positive","negative","neutral"],"type":"string","example":"negative"},"receipt_id":{"type":"string","example":"rcpt_abc123"}}},"logicalName":"submit_feedback","displayName":"submit_feedback","title":"submit_feedback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_feedback","description":"Public read of the crowd-sourced outcome aggregate for a node — how\ncallers reported their real-world results after acting on its verdict.\nAdvisory signal, not a trust verdict. An empty aggregate returns cleanly\nwith `total: 0` and `signal: none`.","inputSchema":{"type":"object","required":["node"],"properties":{"node":{"type":"string"}}},"logicalName":"get_feedback","displayName":"get_feedback","title":"get_feedback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"x402_echo","description":"Validates an agent's x402 v1 client implementation against a TunnelMind\nsurface end-to-end. Two operating modes:","inputSchema":{"type":"object","properties":{"X-PAYMENT":{"type":"string"}}},"logicalName":"x402_echo","displayName":"x402_echo","title":"x402_echo","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=See-the-internet-See-the-agents-on-it-TunnelMind&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AtZGF0YS50dW5uZWxtaW5kLmFpL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22See-the-internet-See-the-agents-on-it-TunnelMind%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp-data.tunnelmind.ai%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22See-the-internet-See-the-agents-on-it-TunnelMind%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp-data.tunnelmind.ai%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=See+the+internet.+See+the+agents+on+it.+%E2%80%94+TunnelMind&connectorUrl=https%3A%2F%2Fmcp-data.tunnelmind.ai%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"See-the-internet-See-the-agents-on-it-TunnelMind\" --url \"https://mcp-data.tunnelmind.ai/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/mcp-data-mcp-ee7227512c","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/mcp-data-mcp-ee7227512c/tools/{tool}","mcpServerUrl":"https://mcp-data.tunnelmind.ai/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/mcp-data-mcp-ee7227512c?live=1"}