Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

TunnelMind Data API

REMOTE · MCP-DATA.TUNNELMIND.AI · SCANNED AUG 3

Tracker / Sigil / Cross-lens — every TunnelMind Data API operation as one MCP surface.

+2 this week 57 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security46
Transport & Reachability100
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 25227 tokens (~277/item across 91 items; 91 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage81
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 44% of tool parameters carry a description.Partial
Capabilities40
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp-data.tunnelmind.ai

# add to Claude Code
claude mcp add --transport http ai-tunnelmind-data https://mcp-data.tunnelmind.ai/mcp
# ~/.codex/config.toml
[mcp_servers.ai-tunnelmind-data]
url = "https://mcp-data.tunnelmind.ai/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-tunnelmind-data": {
      "type": "remote",
      "url": "https://mcp-data.tunnelmind.ai/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-tunnelmind-data --url https://mcp-data.tunnelmind.ai/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ai-tunnelmind-data:
    url: "https://mcp-data.tunnelmind.ai/mcp"
// mcp.json
{
  "mcpServers": {
    "ai-tunnelmind-data": {
      "type": "http",
      "url": "https://mcp-data.tunnelmind.ai/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +2
    • New tool “get_freshness” functional
  • 31 Jul 26 −1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 −1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 54

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp-data.tunnelmind.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=tunnelmind.ai CN=WE1,O=Google Trust Services,C=US 23 Jul 2026 21 Oct 2026 ECDSA 256 ECDSA-SHA256 8e8d6c7751215d560e14d00ac6d97c79
SANs: tunnelmind.ai, mcp-data.tunnelmind.ai, *.mcp-data.tunnelmind.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC insecure

Validation of mcp-data.tunnelmind.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
tunnelmind.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp-data.tunnelmind.ai/mcp Verified 200
http (plaintext) http://mcp-data.tunnelmind.ai/mcp Inconclusive 404
MCP tools — 91 exposed · ~25,153 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
agent_registries_lookup ~467

P75 registry aggregation: the cross-lens join applied to agent identity. Incumbent providers each consult only their own registry; this endpoint checks every registry TunnelMind can reach and labels each answer with an explicit state, so a gap can never be mistaken for a clean result: - `observed` — the subject IS in this registry (record attached) - `not_present` — checked, and it isn't (an observation, not a gap) - `not_applicable` — the registry doesn't key on this subject type - `degraded` — the check failed (timeout, upstream error) - `unavailable` — the registry is not publicly consultable (closed / platform-scoped); stated in-band because silence would read as clean Registries (v0): `crawler_ranges` (operator-published IP feeds — Googlebot, GPTBot, PerplexityBot…), `wba_directory` (RFC 9421 Signature-Agent JWKS at the subject domain), `mcp_registry` (registry.modelcontextprotocol.io), `tunnelmind_known_agents` (curated verifiable/claim-only set), plus honest `unavailable` rows for Visa TAP, Mastercard Agent Pay, and Cloudflare Verified Bots. Use this tool when: - You are deciding whether an agent, bot, or MCP server is registered anywhere that vouches for it — in one call instead of five. - You need the blind spots stated: which registries could NOT be consulted for this subject, and why. Inputs: subject — an IP (registry membership by published ranges), a domain (WBA directory + MCP registry), or an agent name/UA fragment (e.g. `gptbot`, `claudebot`). `?receipt=true` attaches a signed Receipt v1.0 committed to the transparency log. Latency: remote registry checks are KV-cached for 1h; a warm call is edge-fast, a cold one bounded by 5s per-registry timeouts.

NameTypeReqDescription
receiptstringAttach a signed TunnelMind Receipt v1.0 over the aggregation.
subjectstringyesIP address, domain, or agent name / User-Agent fragment.

No output schema declared.

No examples provided.

attributes_lookup ~393

P73 fast attributes endpoint (PIP-PLAN P3): a full `POST /v1/verify` resolve fans out across four lenses (~2s) — fine for preflight, fatal inside a per-request authorization loop. This endpoint serves the last-known signed bundle from a single KV read, with the P69 freshness contract deciding how much to trust it. Use this tool when: - A policy decision point (OPA, Cerbos, Cedar) needs node attributes on its hot path and can tolerate `valid_until`-bounded staleness. - An agent re-checks a node it (or anyone) verified recently. Inputs: - `node` (path, required): IPv4 address, domain, ASN (`AS64500`), or entity_slug — same grammar as /v1/verify. Returns: - The exact verify bundle last cached for the node (lens blocks, `cross_lens` verdict, `coverage` with `valid_until` / `stale_if_error`, signed `receipt`), plus `attributes_meta`: `cached_at` and `freshness` — `fresh` (inside `valid_until`) or `stale` (past it, still inside the `stale_if_error` window; the contract says a consumer may use it rather than fail closed). - `404` when nothing is cached — the node was never verified, or its bundle aged past `stale_if_error`. POST /v1/verify to (re)observe. - The short-lived `sigil_token` from the original verify is never included: bearer capabilities are not re-served. Cost: - Counts as one request against the daily rate limit. Latency: - Typical: <100ms (one KV read, no lens fan-out).

NameTypeReqDescription
nodestringyes

No output schema declared.

No examples provided.

audit_export ~394

Returns NDJSON (one JSON object per line) of audit log entries. Each entry records the operation called, the identity, hashes of the request and response, duration, and an Ed25519 signature over the canonical entry JSON. Entries are hash-chained: each entry's `prev_entry_hash` is SHA-256 of the previous entry's signature, making deletion of any entry detectable offline. Authenticated callers receive only their own entries (`identity_sub` match). Admin key holders receive all entries. Use this tool when: - You want a tamper-evident record of your own API calls. - You are auditing a sequence of requests for compliance or debugging. - You want to verify the audit chain integrity offline. Do NOT use this tool when: - You are anonymous — authentication is required. - You want task status — use `get_task` instead. Inputs: - `from` (query, optional): ISO 8601 start datetime. Default: 7 days ago. - `to` (query, optional): ISO 8601 end datetime. Default: now. - `limit` (query, optional): Max entries. 1–5000, default 1000. Returns: - NDJSON stream, one `AuditEntry` per line. - `X-Total-Count` response header with entry count. - `X-Took-Ms` response header. Verify the chain offline: - For each consecutive pair (A, B): `SHA-256(A.signature) == B.prev_entry_hash`. - For each entry: verify Ed25519 signature against public key in `/.well-known/atap.json`. Cost: - Counts as one request against the daily limit. Latency: - Typical: <300ms for 1000 entries, p99: <1s.

NameTypeReqDescription
fromstring
limitinteger
tostring

No output schema declared.

No examples provided.

cancel_task ~161

Marks the task as `cancelled`. If the task is already in a terminal state (`complete`, `failed`, `expired`), returns 409 Conflict. Only the identity that created the task may cancel it. Use this tool when: - You submitted a probe with `?async=true` and no longer need the result. - You want to free up a pending task before it expires. Do NOT use this tool when: - The task is already complete — cancellation is not possible. Inputs: - `task_id` (path, required): 26-char ULID. Returns: - `task_id` and `status: cancelled`. Cost: - Free. Latency: - Typical: <150ms.

NameTypeReqDescription
task_idstringyes

No output schema declared.

No examples provided.

check_receipt_revoked ~395

Single-item revocation lookup per Receipt Format v1.0 §8.2. Verifiers that do not want to maintain a local mirror of `/.well-known/receipt-revocations.json` call this endpoint instead. The response includes `feed_version` for cache coherence. Use this tool when: - You are verifying a receipt and need to confirm its `signature.key_id` is still trusted. - You are verifying a receipt and need to confirm the specific `receipt_id` was not retracted by its issuer. - You hold receipts long-term and want to recheck trust before acting on them. Do NOT use this tool when: - You want the full revocation set — fetch `/.well-known/receipt-revocations.json` directly. - You want to *publish* a revocation — that is operator-controlled and not exposed via this API. Inputs: - `key_id` (query, optional): Receipt-format key_id (e.g., `tm-receipt-2026-05`). Provide one of `key_id` or `id`. - `id` (query, optional): UUIDv7 of a specific receipt. Provide one of `key_id` or `id`. Returns: - `revoked`: boolean. - When revoked: `revoked_at` (ISO 8601), `reason` (human-readable), `replacement_key_id` (for keys). - Always: `checked_at` (ISO 8601), `feed_version` (integer). Cost: - Free; rate-limited like the rest of the data API. Edge-cached 60s. Latency: - Typical <100ms (warm cache); p99 <500ms (cold fetch from well-known).

NameTypeReqDescription
idstringUUIDv7 of a specific receipt to check.
key_idstringReceipt-format signing key_id to check.

No output schema declared.

No examples provided.

compliance_configure ~130

Set the customizable knob: which regulatory regime your auditor maps to, how long to retain decision content, and which export formats to offer. Body: { enabled?, regime?, retention_days?, export_formats? }. retention_days is 1..3650; regime is one of the catalog ids; export_formats is a non-empty subset of [signed_json, csv, eat, stix]. No bespoke engineering — you pick, the ledger adapts.

NameTypeReqDescription
enabledboolean
export_formatsarray
regimestring
retention_daysinteger

No output schema declared.

No examples provided.

compliance_export ~154

Generates a signed export bundle of your ledger over an optional time window, mapped to your regime's field names and citation, with a manifest + chain-integrity proof + the latest signed checkpoint. Choose the format with ?format= (signed_json | csv | eat | stix; defaults to your profile's first) and override the regime with ?regime=. The response is a downloadable artifact your auditor can verify independently against the spec.

NameTypeReqDescription
formatstringsigned_json | csv | eat | stix.
fromstringISO8601 lower bound.
regimestringOverride the profile regime for this export.
tostringISO8601 upper bound.

No output schema declared.

No examples provided.

compliance_ledger ~161

Returns your hash-chained decision records — one per verdict-bearing call (/v1/verify, /v1/explain, /v1/preflight, /v1/profile) made while compliance is enabled. Each entry carries its node, verdict, scores, receipt_id, the full decision record, and the chain hashes (prev_hash, entry_hash). Filter with from/to (ISO8601) and page with cursor (a seq) + limit (≤1000).

NameTypeReqDescription
cursorintegerResume after this seq.
fromstringISO8601 lower bound (inclusive).
limitintegerPage size, max 1000.
tostringISO8601 upper bound (inclusive).

No output schema declared.

No examples provided.

compliance_profile ~108

Returns your current compliance configuration (regime, retention_days, export_formats, enabled) and the catalog of supported regimes (EU AI Act Art.12, DORA, NYDFS 500, HIPAA, PCI DSS, SOC 2, generic) and export formats (signed_json, csv, eat, stix). Authenticated. The compliance ledger is a tamper-evident, retained record of every verdict you make — configure it once, then it self-maintains.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

compliance_verify ~91

Recomputes your entire hash chain server-side and reports integrity ({ intact, entry_count, chain_head_hash } — plus reason + first_break_seq if a record was altered or deleted), alongside the most recent Ed25519 checkpoint signed with the TunnelMind receipt key. This is the auditor's "prove it" button — and even TunnelMind cannot rewrite history before a signed checkpoint without detection.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

create_free_key ~158

Self-serve free tier — the rung between anonymous access and paid blocks. One email in, one API key out, shown exactly once. Use this tool when: - You are calling anonymously and hitting the anonymous rate limit. - You want your calls identified so usage survives IP changes. Limits: - 50 requests/day (same endpoints as anonymous, higher ceiling). - One active free key per email; 3 signups per IP per day. - The raw key is returned once and stored only as a SHA-256 hash — it cannot be recovered, only revoked and reissued. Cost: free. No card, no account — the email is the revocation handle, nothing more.

NameTypeReqDescription
emailstringyes

No output schema declared.

No examples provided.

create_subscription ~297

Subscribe to a node (ip, domain, asn, or entity slug). On a recurring sweep (~20 min) TunnelMind re-runs the fused `POST /v1/verify` verdict and, when the *material* result changes — the verdict label flips, the trust score crosses a band, or the signal set changes — POSTs a signed event to your `callback_url`. Webhook authenticity: every delivery carries an `X-TunnelMind-Signature: sha256=<hex>` header, an HMAC-SHA256 over the raw request body keyed by the `signing_key` returned ONCE at creation. Recompute and compare to trust it. Delivery body: `{ subscription_id, node, event: "verdict_change", previous, current, delivered_ms }` where `previous`/`current` are compact verdict summaries `{ verdict, trust_score, signals }`. Inputs (JSON body): - `node` (required): the node to watch. - `callback_url` (required): an https URL to receive deliveries. - `events` (optional): reserved; defaults to `["verdict_change"]`. Requires an API key. The baseline verdict is captured at creation, so the first webhook fires on the first genuine change, not the initial state.

NameTypeReqDescription
callback_urlstringyes
eventsarray
nodestringyes

No output schema declared.

No examples provided.

cross_lens_lookup ~176

Returns all three lens views for a single node key without computing a fused verdict. Use this when you want raw transparency — the Tracker catalog presence, Scry attacker observations, and Sigil supply-graph position — and intend to make your own decision. For an opinionated verdict, call `cross_lens_verify` instead. For an agent-side allow/caution/deny gate plus signed consultation receipt, call `preflight_should_i_act`. Coverage block exposes which lenses responded so agents can reason about partial-data verdicts. `issued_by` carries the OAI of the answering witness so the response is attributable.

NameTypeReqDescription
nodestringyesIPv4/IPv6 address, domain, ASN with optional `AS` prefix, or entity_slug. Type is auto-detected.

No output schema declared.

No examples provided.

cross_lens_verify ~1,065

A2 — the cross-lens join. TunnelMind owns multiple halves of the open-web graph: Scry sees who is on every IP (attacker intelligence, actor class, Augur threat-intel overlap); Sigil sees the supply graph (publishers, SSPs, DSPs, ads.txt + sellers.json + SupplyChain Object); GhostRoute sees routing integrity & sovereignty (RPKI origin validity, BGP prefix, claimed sovereign zone, sanctions, AI-infrastructure ownership, certificate CA). This endpoint fuses them into one verdict on a single node key. Streaming mode (P56): send `Accept: application/x-ndjson` and the same verdict computation streams as one JSON object per line — a `{"t":"lens",...,"state":"start"}` line when each lens query is dispatched, a `"state":"result"` line as each lens actually resolves (real completion order, never reordered or paced), then the final `{"t":"verdict",...}` line with the fused verdict, trust score, and attestation tier. The default single-JSON response is unchanged and the two modes return the identical verdict for the same node. The response leads with a base record, then the lens views: - `ip_intel` — the BASE: the commodity IP-intelligence + WHOIS record (geo/ASN/company/WHOIS/routing/cert), every field provenance-tagged `{value, tier, source}` (verified/derived/trusted) with a behaviour axis from Scry. The lens blocks below are augmentation beside it. Committed in the receipt payload. See `docs/IP-INTEL-RECORD.md`. - `scry` — the single-lens Scry view (transparency). - `sigil` — the single-lens Sigil view (transparency). - `ghostroute` — the single-lens GhostRoute view (transparency). - `cross_lens` — the fused verdict (the moat). Fusion math: weighted-mean over evaluated components plus a `co_observation_bonus` when both lenses independently flag the node. GhostRoute adds a routing-integrity component with two hard safety floors that cannot be averaged away: an RPKI-INVALID origin (a BGP hijack signal) caps its trust at 0.15, and a sanctions match zeroes it. Weigh…

NameTypeReqDescription
aitstringOptional ATAP AIT id (`AIT-<uuidv7>`). When present, the verdict is wrapped in a witness-tier `cross_lens:verified` event chained onto the AIT and signed by Sigil (witness OAI-2026-0000201). Independ…
claimed_zonestringCaller-asserted sovereign zone for the subject (e.g. `EU`) — "the vendor's contract says EU-only; score the routing against that claim." Validated against the sovereign-zone reference; an unknown cod…
nodestringyesThe node to verify. Type is auto-detected: IPv4/IPv6 address, domain, ASN with optional `AS` prefix, or entity_slug.
thresholdsobject{ pass, fail } verdict cutoffs (defaults 0.7 / 0.3)
weightsobjectPer-component weight overrides

No output schema declared.

No examples provided.

delete_subscription ~19

Cancel a subscription.

NameTypeReqDescription
idstringyes

No output schema declared.

No examples provided.

explain_verdict ~259

Call this when you need to ACT ON a verdict and prove why. It returns the exact verdict `/v1/verify/{node}` computes (same fusion, same weights) PLUS a traced evidence chain: every claim is attributed to where it came from — the attested sensor fleet (with attestation tier), a named Augur threat feed, sellers.json/ads.txt supply-graph presence, the cross-lens co-observation join, the DDG/IAB tracker corpus — and how much each item moved the verdict (`weight`; null = supplementary, not scored). The response is committed to by a P38 signed receipt via `evidence_digest` (a hash of the exact evidence array), so an agent can act on the verdict and leave behind a cryptographically verifiable trail of the reasoning in the same request. Empty/`none` evidence is the honest "no corpus presence", never a fabricated reason. `node` is an IPv4/IPv6, ASN, domain, or entity_slug — the same key space as `/v1/verify`.

NameTypeReqDescription
nodestringyesIPv4/IPv6, ASN (AS####), domain, or entity_slug.

No output schema declared.

No examples provided.

generate_receipt ~497

Looks up each submitted domain in the TunnelMind tracker database, aggregates risk metrics (avg score, max score, fingerprinters, high-risk domains, entity ownership), and issues a signed surveillance receipt. The receipt is stored in the public registry and can be verified at `/verify/{receipt_id}`. Use this tool when: - You want a verifiable record of which trackers were observed in a context (page, app, session). - You need a signed evidence artifact for a privacy audit or compliance report. - You want to know the overall surveillance exposure level for a set of domains. - You are generating a receipt to share with a user as evidence of tracker presence. Do NOT use this tool when: - You want full tracker details per domain — use `get_domain` instead. - You want to look up an existing receipt — use `get_receipt` instead. - You need live probes (HTTP headers, stack detection) — use `/v1/intel/*` instead. Inputs: - `domains` (body, required): Array of 1–50 fully qualified domain names. Duplicates are deduplicated. URLs are stripped to host component. - `domain` (body, alternative): Single domain string (shorthand for `domains: [domain]`). Returns: - `receipt_id`: Unique receipt ID (e.g. `rcpt_01JXYZ...`). - `receipt`: Full receipt document including domains submitted, tracker findings, high-risk domains, fingerprinters, unique entities, and exposure metrics. - `content_hash`: SHA-256 of the canonical receipt JSON. - `signature`: Base64 Ed25519 signature (empty string if signing key not configured). - `signed`: Boolean — true if the receipt is cryptographically signed. - `verify_url`: Path to retrieve this receipt from the public registry. Exposure levels: `minimal` / `moderate` / `high` / `critical` Based on average tracker score and proportion of high-risk domains (score ≥ 70). Cost: - Counts as one request against the daily limit regardless of domain count. Latency: - Typical: <100ms (pure D1 lookup, no outbound probing). p99: <300ms.

NameTypeReqDescription
domainstringSingle domain shorthand (alternative to `domains`)
domainsarrayDomain names to look up (1–50)

No output schema declared.

No examples provided.

get_analyst_config ~682

Returns the TunnelMind analyst config bundle. Configures any LLM (Claude, GPT, Gemini, local) to behave as a TunnelMind analyst that knows the data graph, follows the 5-call golden path, and surfaces attestation_tier on every claim. The bundle is signed inline (Ed25519, key_id from /.well-known/receipt-signing-key.json). Add `?receipt=true` to wrap the response in a Receipt v1.0 envelope for end-to-end audit. Use this tool when: - You want to configure a new LLM runtime to act as a TunnelMind analyst - You want to verify the system prompt you're running matches what TunnelMind serves - You're building a BYOM (bring-your-own-model) deployment and need the canonical config Do NOT use this tool when: - You want to call individual TunnelMind data tools — use the tools directly - You want to verify a specific receipt — use check_receipt_revoked or @tunnelmindai/receipt-verify Inputs (all optional): - `surface` (query): "data" (default, full surface), "scry", or "sigil" - `version` (query): pin a specific bundle version (e.g. "1.0.0" or "1" for latest 1.x.y) - `receipt` (query): "true" to wrap the response in a signed Receipt v1.0 envelope Content negotiation (via Accept header): - `application/json` (default) — full bundle JSON - `text/markdown` — system prompt only (Anthropic flavor) - `application/vnd.anthropic.config+json` — Anthropic-shaped subset - `application/vnd.openai.config+json` — OpenAI-shaped subset Returns: - `version`, `schema`, `issuer`, `surface`, `surface_label` - `system_prompts.{anthropic,openai,generic}` — three encodings of the same semantic prompt - `tools.surface_subset` — array of operationIds for this surface (null = all) - `response_format` — JSON Schema the analyst's verdicts must conform to - `attestation_tiers` — the 4-tier vocabulary (self_asserted → silicon_root) - `graph_state` — live corpus counts at serve time - `references` — URLs to the rest of the open-protocol layer - `bundle_signature` — inline Ed25519 signature for offline…

NameTypeReqDescription
receiptstringWhen true, wrap the bundle in a Receipt v1.0 envelope.
surfacestring
versionstringPin a specific bundle version. Omit for latest.

No output schema declared.

No examples provided.

get_api_key ~250

Returns the tier, label, masked owner email, creation date, last-used timestamp, today's request count, and daily request limit for the API key used in this request. Useful for agents that need to monitor their own quota consumption. Use this tool when: - You want to check how many requests your key has used today. - You need to know your current tier or daily limit. - You want to confirm that your API key is active. Do NOT use this tool when: - You want to manage multiple keys — this endpoint only reflects the calling key. - You need tracker data — use the tracker endpoints instead. Inputs: - No body or query parameters. Auth is from the `Authorization: Bearer` header. Returns: - `tier`: free, supporter, pro, or enterprise. - `requests_today`: integer count from KV (best-effort; resets at UTC midnight). - `limit_per_day`: null for enterprise (unlimited). - `last_used`: ISO 8601 timestamp, may be null if never used. Cost: - Free. Does not count against the daily request limit. Latency: - Typical: <150ms, p99: <400ms.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_bgp_events ~360

Returns the routing anomalies the bgp-monitor has observed against TunnelMind's BGP watchlist — the witnessability layer's routing dimension. The monitor polls RIPEstat (RIPE NCC) on a cron, self-baselines each watched prefix's origin set on first sight, then records an event whenever a later poll deviates from that baseline. Use this to check whether a prefix or ASN you depend on (an SSP's egress, a publisher's network, your own infrastructure) has shown a hijack-shaped routing event. `event_type` is one of: - `origin_change` — an origin AS not in the baseline is announcing the prefix (severity `critical` if that announcement also fails RPKI, else `high`). - `rpki_invalid` — a current announcement fails RPKI ROA validation. - `withdrawn` — a previously-announced prefix is no longer visible. - `new_more_specific` / `visibility_drop` — reserved for a later monitor pass. `prev_origins` is the baseline the event deviated from. `count` is the full filtered set; `events` is bounded by `limit`, newest first. An empty `events` array means no anomalies in the window — the honest "all clear".

NameTypeReqDescription
limitintegerMax events returned (default 100, hard cap 500).
resourcestringFilter to one watched resource — a CIDR prefix (e.g. 45.32.0.0/24) or an ASN (e.g. AS13335). Omit for all.
since_msintegerUnix epoch milliseconds lower bound on observed_at.

No output schema declared.

No examples provided.

get_domain ~484

Returns the complete surveillance intelligence record for a domain name. If the domain is in TunnelMind's tracker database (80,000+ entries), the response includes tracker category, risk score, fingerprinting data, cookie persistence, IAB TCF purposes, and the owning corporate entity. If the domain is not in the database, a live probe is automatically run: RDAP registration data, DNS records (MX, SPF, TXT verification tokens), HTTP headers, and CSP third-party actors are fetched fresh from the edge and returned. Use this tool when: - You need to know whether a specific domain tracks users, and how aggressively. - You are researching who owns a domain and what corporate entity controls it. - You want to check HTTP security headers and third-party services embedded in a site. - You are building a risk score for a domain before routing traffic through it. Do NOT use this tool when: - You want to search by keyword or category — use `search` instead. - You want all domains for an entity — use `get_entity` instead. Inputs: - `domain` (path, required): Domain name. Strip `www.` prefix — it is removed automatically. Subdomains are resolved to the parent: `ads.doubleclick.net` → `doubleclick.net`. Examples: `doubleclick.net`, `google-analytics.com`, `intercom.io`. Returns: - Full `DomainRecord`. Free tier returns the domain, category, score, prevalence, and entity name. Pro/enterprise additionally return `tcf_vendor_id`, `tcf_purposes`, `tcf_features`, and `disconnect_cats`. - If the domain is not in the tracker database, `live_lookup: true` is set and RDAP/DNS/HTTP probe results are returned instead of tracker fields. - 404 if the domain cannot be found via live probe either (unknown TLD, unreachable). Cost: - Free tier: included in 50 req/day limit. Pro/enterprise: included in plan. Latency: - Database hit: typical <100ms, p99 <300ms. - Live probe: typical 2-5s, p99 10s (external DNS/HTTP calls).

NameTypeReqDescription
domainstringyesDomain name to look up (www. prefix stripped automatically)

No output schema declared.

No examples provided.

get_entity ~326

Returns an entity record for a surveillance company or data broker, including its industry, estimated annual data value per user (in USD), categories of personal data collected, and the full list of domains it controls. Free tier returns 5 domains, paid returns up to 200. Use this tool when: - You want to understand what corporate entity owns or controls a tracker domain. - You need to assess the total surveillance footprint of a company (e.g., Alphabet, Meta, Oracle). - You are building a corporate surveillance graph and need domain-to-entity mapping. Do NOT use this tool when: - You have a domain and need its category — use `get_domain` instead. - You want to browse entities by industry — use `list_entities` instead. - You are searching for an entity by name — use `search` instead. Inputs: - `slug` (path, required): URL-safe entity identifier (lowercase, hyphens). Examples: `alphabet`, `meta`, `oracle-data-cloud`, `the-trade-desk`. Returns: - Full `EntityRecord` with data categories, estimated data cost, and associated domains. - `domains`: array of top-scoring domains (5 for free tier, 200 for paid). - Pro/enterprise additionally return `website` and `description` fields. Cost: - Free tier: included in 50 req/day limit. Pro/enterprise: included in plan. Latency: - Typical: <150ms, p99: <400ms.

NameTypeReqDescription
slugstringyes

No output schema declared.

No examples provided.

get_feedback ~122

Public read of the crowd-sourced outcome aggregate for a node — how callers reported their real-world results after acting on its verdict. Advisory signal, not a trust verdict. An empty aggregate returns cleanly with `total: 0` and `signal: none`. `signal` is derived: `none` (no reports), `insufficient` (<3), `positive` / `negative` (score past ±0.3), or `mixed`.

NameTypeReqDescription
nodestringyesip, domain, asn, or entity slug.

No output schema declared.

No examples provided.

get_freshness ~233

D4 — the freshness contract a PDP can gate on. For each lens (Scry / Sigil / Tracker / GhostRoute) this reports the newest observation timestamp in the corpus, the declared ingest cadence (taken from the ingester's own code and cron schedules, never asserted), the published SLO, the current corpus age in seconds, and whether the SLO holds. GhostRoute reports its three corpus workers (CT hourly, RPKI 6-hourly, ASN daily) individually. SLO rule: 2x the declared cadence — one fully missed ingest cycle trips it — except where an estate monitor already publishes a threshold, in which case the SLO matches the monitor. Every source is independently null-tolerant: a momentarily-unmeasurable lens reports `last_observation_at: null` and `slo_met: null` — never a fabricated timestamp, never a silent pass. Cached ~5 minutes (unlike the weekly /v1/stats snapshot — freshness that was itself a week stale would be self-refuting).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_receipt ~318

Returns metadata for a TunnelMind surveillance receipt — a signed document proving that a specific user's surveillance exposure was observed, measured, and recorded at a specific time. Does NOT return the receipt's signature (anti-phishing protection). To verify a receipt's content integrity, use `verify_receipt` with the hash and signature from the receipt document itself. Use this tool when: - You have a receipt ID and want to confirm it was genuinely issued by TunnelMind. - You need the issuance timestamp and signing key ID for a receipt. - You want to check whether a receipt exists before attempting content verification. Do NOT use this tool when: - You have the full receipt document and want to verify it hasn't been tampered with — use `verify_receipt` instead. Inputs: - `receipt_id` (path, required): The receipt ID from the receipt document. Alphanumeric with hyphens, max 128 characters. Returns: - `status`: `FOUND` if the receipt is in the registry. - `generated_at`: ISO 8601 timestamp of receipt issuance. - `signing_key_id`: identifier of the Ed25519 key used to sign. - `schema_version`: receipt schema version. - `message`: human-readable summary with instructions for content verification. - 404 if the receipt ID is not in the registry. Cost: - Free. No API key required. Latency: - Typical: <100ms, p99: <300ms.

NameTypeReqDescription
receipt_idstringyes

No output schema declared.

No examples provided.

get_stats ~189

One public "state of the corpus" readout — the whole graph in a single call. Distinct from the Scry-only sensor stats at api.tunnelmind.ai/v1/stats (which this reuses for the `scry` block): this spans Scry, Sigil, and Tracker plus the attestation and routing layers. Use it to cite live coverage — how many publishers / SSPs / DSPs / sell paths / sellers.json seats are in the Sigil supply graph, how many tracker entities and domains Tracker holds, how many ATAP witness events and OAIs the attestation layer carries, and how many BGP watchlist resources and routing events the monitor has recorded. Every count is independent and null-tolerant: a momentarily-unavailable lens reports `null`, never a silent zero. Cacheable for ~10 minutes.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_subscription ~27

Read one of your subscriptions (signing_key redacted).

NameTypeReqDescription
idstringyes

No output schema declared.

No examples provided.

get_task ~287

Returns the current status of a task created by an `?async=true` intel request. Poll this endpoint until `status` is one of: `complete`, `failed`, `cancelled`, `expired`. On `complete`, the `result` field contains the same payload the sync endpoint would have returned. On `failed`, `error.message` explains the failure. Use this tool when: - You submitted an intel probe with `?async=true` and need to retrieve the result. - You want to check whether a background task finished without opening an SSE stream. Do NOT use this tool when: - You want real-time event streaming — use `stream_task` instead. - You have no task_id — submit a probe with `?async=true` first. Inputs: - `task_id` (path, required): 26-char ULID returned in the 202 response. Returns: - `status`: `pending` | `running` | `complete` | `failed` | `cancelled` | `expired`. - `result`: populated when status is `complete`. Null otherwise. - `error`: populated when status is `failed`. Null otherwise. - `expires_at`: tasks expire 1 hour after creation. Cost: - Free. Does not count against rate limits. Latency: - Typical: <100ms.

NameTypeReqDescription
task_idstringyes

No output schema declared.

No examples provided.

ghostroute_ai_lookup ~171

Checks whether a domain or ASN belongs to a known AI company's infrastructure and what sovereignty it CLAIMS (program, zone, HQ), the baseline GhostRoute scores routing reality against. Use this tool when: - You want to know "whose AI infrastructure is this, and what does it claim?" - You are enriching an endpoint before deciding whether to send it inference. Inputs: - `entity` (path, required): a domain or ASN (AS####). Returns: - `matched`, `match_basis` (domain|asn), `ai_company`, `ai_product`, `sovereign_ai_program`, `claimed_sovereign_zone`, `hq_country`, `verified_sovereign`. Latency: - Typical <300ms (cached corpus read).

NameTypeReqDescription
entitystringyes

No output schema declared.

No examples provided.

ghostroute_asn_lookup ~192

Returns GhostRoute's ownership-graph record for an autonomous system: the registrant/parent organisation, its HQ country and sovereign zone, RIR, and cloud/AI-infrastructure flags. The long-term moat — who actually owns the network a route originates from. Use this tool when: - You have an origin ASN and need its corporate owner + jurisdiction. - You are assessing whether an ASN belongs to a cloud front or the real operator. Inputs: - `asn` (path, required): AS#### or a bare AS number. Returns: - `registrant_org`, `parent_org`, `parent_org_country`, `sovereign_zone`, `rir`, `is_cloud_provider`, `is_ai_infrastructure`, or `{matched:false}`. Latency: - Typical <300ms (cached corpus read, RDAP fallback on a miss).

NameTypeReqDescription
asnstringyes

No output schema declared.

No examples provided.

ghostroute_check ~477

GhostRoute is TunnelMind's fourth lens: routing-integrity / sovereignty verification. It answers "is this infrastructure where it claims to be, owned by who it claims, routing where it says — and does that match the sovereign jurisdiction it asserts?" It resolves the originating ASN owner, RPKI validity, the certificate-issuing CA's jurisdiction, and matches the subject against a curated AI-infrastructure corpus to recover any sovereignty CLAIM (e.g. an "EU-sovereign" AI service), then scores reality against claim. Use this tool when: - An agent is about to route data/inference to an endpoint that claims a jurisdiction (e.g. EU data residency, FedRAMP, sovereign-AI). - You want to detect a US-fronted (Cloudflare/AWS/GCP) endpoint masquerading as sovereign-EU infrastructure, an RPKI-invalid origin (possible hijack), or a sanctioned operator. Inputs: - `entity` (path, required): an IPv4/IPv6, domain, ASN (AS####), or cert SHA-1/256. - `receipt` (query, optional): when `true`, issues a signed, persisted GhostRoute receipt (GR-YYYY-NNNNNNN) instead of an ephemeral verdict. Returns: - `sovereign_tier`: VERIFIED | PLAUSIBLE | MISMATCH | CRITICAL_MISMATCH (or null if no claim). - `sovereign_integrity`: [0,1] score; `origin_as`, `rpki_status`, `cert_ca`, `claimed_sovereign_zone`, `is_ai_infrastructure`, `ai_owner`, `sanctions_match`. - `_meta.caveats` / `_meta.penalties`: what was and wasn't determinable. Latency: - Typical 300-900ms on a cold subject (live BGP/RPKI/cert lookups), faster when cached.

NameTypeReqDescription
entitystringyesAn IPv4/IPv6 address, domain, ASN (`AS####`), or cert SHA-1/256 to check.
receiptbooleanWhen `true`, issues a signed, persisted GhostRoute receipt (`GR-YYYY-NNNNNNN`) instead of an ephemeral verdict.

No output schema declared.

No examples provided.

ghostroute_ct_alerts ~321

Returns the durable, deduplicated ledger of CT equivocation events the GhostRoute witness worker detects and pushes — a tree_size_rewind (an append-only log shrank), a root_fork (one tree_size witnessed with two different Merkle roots = a split-view log), or an sth_signature_invalid (a log's latest Signed Tree Head failed signature verification). Where `/v1/ghostroute/witness` shows live computed health, this is the immutable first-detection log: each entry's `detected_at` is when TunnelMind first raised the alarm. A healthy CT ecosystem returns an empty feed — any row here is a serious trust event. Use this tool when: - You want a chronological record of CT trust violations, not live state. - You're polling for new equivocation events (check `summary.last_detected_at`). Inputs: - `limit` (query, optional): max recent alerts, 1–200, default 50. Returns: - `summary`: `total`, `undelivered`, `rewinds`, `forks`, `bad_signatures`, `last_detected_at`. - `alerts[]`: each `kind`, `severity`, `log_url`, `log_operator`, `from_tree_size`, `to_tree_size`, `distinct_roots`, `event_observed_at`, `detected_at`, `delivered`. Latency: - Typical <200ms (KV-cached 1m).

NameTypeReqDescription
limitinteger

No output schema declared.

No examples provided.

ghostroute_ct_proofs ~317

Returns GhostRoute's per-cert inclusion proofs: each is a cryptographic demonstration that the exact certificate a host serves is included in an append-only CT log whose root TunnelMind signature-verified — upgrading "a monitor said this cert exists" to "proven in a log we witness". Failed attempts are included with a `reason`; a cert that suddenly cannot be proven is itself a signal. Use this tool when: - You want to know whether a specific AI host's live cert is provably logged (pass `domain`), or - You want the corpus-wide proof rollup across watched hosts (omit `domain`). Inputs: - `domain` (query, optional): a hostname to filter to; omit for corpus-wide. - `limit` (query, optional): max recent rows, 1–200, default 50. Returns: - `domain` (echo, null when corpus-wide). - `summary`: `total_attempts`, `proven`, `unproven`, `domains`, `last_observed_at`. - `recent[]`: recent attempts (`log_operator`, `leaf_index`, `tree_size`, `sth_root_hash`, `inclusion_proven`, `reason`, ...). - `by_domain[]`: per-host `attempts` / `proven` rollup. Latency: - Typical <300ms (KV-cached 5m).

NameTypeReqDescription
domainstring
limitinteger

No output schema declared.

No examples provided.

ghostroute_ct_witness ~287

Returns GhostRoute's first-party Certificate-Transparency witness state: the latest signature-verified Signed Tree Head (STH) for every trusted, non-Google CT log TunnelMind independently witnesses, plus a regression scan over our own append-only history. Proof the platform holds its own signature-checked roots rather than reselling crt.sh/certspotter. Use this tool when: - You want corpus-wide CT witness health, not one cert. - You need to know whether any CT log misbehaved (rewound, forked, or served an STH whose signature did not verify) — a serious trust event. Inputs: - none. Returns: - `summary`: `logs_witnessed`, `verified_logs`, `unverified_logs`, `all_verified`, `total_snapshots`, `regressions`, `last_observed_at`. - `logs[]`: per-log latest STH (`log_url`, `log_operator`, `tree_size`, `sth_timestamp`, `root_hash`, `signature_verified`, `snapshots`). - `regressions[]`: detected violations — `kind` is `tree_size_rewind`, `root_fork`, or `sth_signature_invalid` (empty array = healthy). Latency: - Typical <300ms (KV-cached 5m; the witness worker updates twice a day).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ghostroute_verify ~136

Retrieves a previously-issued, signed GhostRoute receipt by its GR-YYYY-NNNNNNN id, for independent audit of a past sovereignty verdict. Use this tool when: - You hold a GhostRoute receipt id and want to confirm its contents/signature. - You are reconciling an agent's action log against the attestation layer. Inputs: - `receipt_id` (path, required): GR-YYYY-NNNNNNN. Returns: - The full persisted receipt row (routing, cert, sovereignty fields + signature). Latency: - Typical <200ms (single indexed read).

NameTypeReqDescription
receipt_idstringyes

No output schema declared.

No examples provided.

health_check ~199

Returns a minimal status object confirming the API is alive. Use this to verify connectivity before chaining other calls, or as a liveness check in a workflow. Use this tool when: - You need to verify the API is reachable before starting a multi-step investigation. - A prior call failed with a 503 or 504 and you want to confirm the service recovered. - You are debugging connectivity from a new environment. Do NOT use this tool when: - You want actual tracker data — use `get_domain` or `search` instead. - You want to check a specific domain — this returns nothing domain-specific. Inputs: - None. Returns: - `ok`: always true if the API is up. - `ts`: ISO 8601 timestamp of the server's current time. Cost: - Free. No API key required. Not rate-limited. Latency: - Typical: <50ms, p99: <200ms.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

intel_agent ~330

Probes a domain for known AI agent integration signals: `llms.txt`, `ai.txt`, `/.well-known/ai-plugin.json`, `openapi.json`, `swagger.json`, MCP manifest, MCP SSE endpoint. Returns a score based on the count of signals detected. Use this to assess whether a domain is ready for agent-to-agent interaction. Use this tool when: - You want to know whether a domain exposes an MCP server or OpenAPI spec for agents. - You are cataloguing the AI-agent-ready surface of a set of domains. - You need to decide whether to attempt programmatic API access to a domain. Do NOT use this tool when: - You need tracker/surveillance data about the domain — use `get_domain` instead. - You need the robots.txt AI crawler policy — use `intel_robots` instead. - You need HTTP security posture — use `intel_http` instead. Inputs: - `domain` (query, required): Domain to probe. Returns: - Boolean flags per signal (`llms_txt`, `ai_plugin`, `openapi`, `mcp_manifest`, `mcp_endpoint`, `mcp_sse`). - `agent_surface_score`: integer 0-8, count of signals detected. Cost: - Free. No API key required. Latency: - Typical: 2-5s (parallel probes), p99: 8s.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

intel_http ~415

Makes a live HEAD request to the target domain from the Cloudflare edge, follows up to 5 redirects, and returns the full redirect chain, final HTTP status, key response headers, a security header score, and any third-party surveillance actors referenced in the Content-Security-Policy header. Use this tool when: - You want to verify whether a site enforces HTTPS and HSTS. - You need to inspect what third-party scripts a site loads via its CSP header. - You are assessing a domain's security posture before trusting it. - You want to detect surveillance actors embedded in a site's CSP. Do NOT use this tool when: - You need tracker database data (category, score, entity) — use `get_domain` instead. - You need the technology stack (CMS, framework) — use `intel_stack` instead. - You need robots.txt AI crawler policy — use `intel_robots` instead. Inputs: - `domain` (query, required): Domain to probe. Can include or omit `https://`. Examples: `nytimes.com`, `https://example.com`. Returns: - `reachable`: false if the domain did not respond within 6 seconds. - `redirect_chain`: each hop with URL, status code, and Location header. - `security_headers.score`: 0-100 based on presence of HSTS, CSP, X-Content-Type, X-Frame-Options, Referrer-Policy. - `security_headers.missing`: list of headers absent. - `csp_actors`: known surveillance actors detected in the CSP header. - `error`: set if the connection failed. Cost: - Free. No API key required. Latency: - Typical: 1-3s (outbound fetch), p99: 6s (timeout). Plan for async if chaining calls.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

intel_inject ~313

Fetches a domain's homepage and checks for content patterns that could constitute prompt injection attacks against AI agents that visit and ingest the page. Signals include hidden text, invisible divs, `<!-- AI: ignore -->` style comments, and known injection patterns. Use this tool when: - You are vetting a domain before feeding its content into an LLM context. - You want to assess the prompt injection risk of a URL before browsing it with an agent. - You are auditing a set of domains for adversarial AI content. Do NOT use this tool when: - You want tracker surveillance data — use `get_domain` instead. - You want AI training opt-out signals — use `intel_optout` instead. - You want the agent surface (MCP/OpenAPI) — use `intel_agent` instead. Inputs: - `domain` (query, required): Domain to scan. Returns: - `injection_signals`: list of signal types detected (e.g., `hidden_text`, `ai_instruction_comment`, `invisible_div`). - `risk_level`: `none`, `low`, `medium`, or `high` based on signal count and type. Cost: - Free. No API key required. Latency: - Typical: 2-4s (HTML fetch), p99: 7s.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

intel_optout ~333

Checks a domain for all known AI training data opt-out mechanisms beyond robots.txt: TDM (Text and Data Mining) reservation headers, `<meta name="ai">` tags, Creative Commons NonCommercial licenses, and other machine-readable opt-out signals. Use this tool when: - You need to determine whether a domain has opted out of AI training data collection. - You are checking compliance before using a domain's content in a training dataset. - You want a comprehensive opt-out status (robots.txt + TDM + meta tags combined). Do NOT use this tool when: - You only need robots.txt crawler policy — use `intel_robots` instead (faster). - You need tracker data — use `get_domain` instead. - You want injection risk assessment — use `intel_inject` instead. Inputs: - `domain` (query, required): Domain to probe. Returns: - `tdm_reservation`: true if the domain sends a `TDM-Reservation: 1` header. - `noai_meta`: true if the HTML contains `<meta name="robots" content="noai">`. - `license_detected`: string if a CC NonCommercial or similar license is detected, otherwise null. - `opted_out`: true if any opt-out signal is present. Cost: - Free. No API key required. Latency: - Typical: 2-4s, p99: 7s.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

intel_robots ~344

Retrieves the target domain's `robots.txt` file and parses it for AI crawler disallow rules. Specifically detects policies for known AI crawlers (GPTBot, ClaudeBot, CCBot, Bytespider, etc.) and returns a structured summary of the crawling policy. Use this tool when: - You need to know whether a domain has opted out of AI training data collection. - You want to check if a specific AI crawler is blocked before citing the domain. - You are building a dataset of AI-accessible vs AI-blocked domains. Do NOT use this tool when: - You want training opt-out signals beyond robots.txt (TDM reservation, noai meta) — use `intel_optout` instead. - You want the full technology stack — use `intel_stack` instead. - You need tracker database data — use `get_domain` instead. Inputs: - `domain` (query, required): Domain to probe. Returns: - `robots_txt_found`: false if the domain returned 404 or the file is empty. - `ai_crawlers_blocked`: list of AI crawler user-agent names that are disallowed. - `all_blocked`: true if `User-agent: *` with `Disallow: /` is present. - `raw`: first 4096 characters of the robots.txt file. Cost: - Free. No API key required. Latency: - Typical: 1-2s, p99: 6s.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

intel_stack ~309

Fetches up to 32KB of the domain's HTML and response headers from the edge, then fingerprints the content for known CMS platforms, JavaScript frameworks, CDN providers, and analytics tools. Detection is based on meta generator tags, script src patterns, response headers, and cookie names. Use this tool when: - You need to know what CMS (WordPress, Drupal, Shopify) a site runs. - You are assessing a domain's infrastructure before a security review. - You want to identify analytics or marketing tools a site embeds. Do NOT use this tool when: - You want HTTP headers and security posture — use `intel_http` instead. - You want tracker database classification — use `get_domain` instead. - You need robots.txt AI policy — use `intel_robots` instead. Inputs: - `domain` (query, required): Domain to fingerprint. Returns: - `cms`: detected content management system, or null. - `frameworks`: JavaScript/backend frameworks detected. - `cdn`: CDN provider detected, or null. - `analytics`: analytics and tracking tools detected. - `meta_generators`: raw meta generator tag values. Cost: - Free. No API key required. Latency: - Typical: 2-4s (HTML fetch), p99: 7s.

NameTypeReqDescription
asyncbooleanWhen true, return a task handle immediately instead of blocking. Poll get_task for the result.
domainstringyes

No output schema declared.

No examples provided.

list_domains ~405

Returns a paginated list of domains from the tracker database. Results are ordered alphabetically by domain name and support cursor-based pagination for full traversal. Filtering by category and minimum score allows targeted data extraction. Use this tool when: - You want to enumerate all known ad-tech or analytics domains above a risk threshold. - You need a dataset of tracker domains for offline analysis. - You are paginating through a category to build a block list. Do NOT use this tool when: - You need data for a specific domain — use `get_domain` instead. - You are searching by keyword — use `search` instead. - You want domains belonging to a specific company — use `get_entity` instead. Inputs: - `category` (query, optional): Filter by surveillance category. One of: `ad_tech`, `analytics`, `social`, `fingerprinting`, `content`, `cdn`, `other`. - `min_score` (query, optional): Integer 0-100. Exclude domains scoring below this value. - `limit` (query, optional): Number of results per page. Max 100 (paid), 20 (free). Default 50. - `cursor` (query, optional): Pagination cursor from the previous response's `next_cursor` field. Returns: - Array of domain list items (domain, category, score, prevalence, entity summary). - `meta.has_more`: true if more pages exist. - `meta.next_cursor`: pass as `cursor` to get the next page. - `meta.count`: number of results in this page. Cost: - Free tier: up to 20 results/page, 50 req/day. Pro/enterprise: up to 100 results/page. Latency: - Typical: <200ms, p99: <500ms.

NameTypeReqDescription
categorystring
cursorstring
limitinteger
min_scoreinteger

No output schema declared.

No examples provided.

list_entities ~340

Returns a paginated list of corporate entities in the TunnelMind surveillance database. Includes data categories, estimated data value, and industry classification. Useful for enumerating the surveillance ecosystem by sector. Use this tool when: - You want to enumerate all entities in a specific industry (e.g., all ad-tech companies). - You need a dataset of surveillance entities for analysis or reporting. - You are building a comprehensive surveillance landscape map. Do NOT use this tool when: - You need the full profile of a specific entity — use `get_entity` instead. - You are searching by entity name — use `search` instead. - You need domain-level data — use `list_domains` instead. Inputs: - `industry` (query, optional): Filter by industry classification. Examples: `ad_tech`, `analytics`, `data_broker`, `social`, `crm`. - `limit` (query, optional): Results per page. Max 100 (paid), 20 (free). Default 50. - `cursor` (query, optional): Pagination cursor from previous response's `next_cursor`. Returns: - Array of entity list items (slug, name, parent_company, industry, data_categories, data_cost_usd). - `meta.has_more` and `meta.next_cursor` for pagination. Cost: - Free tier: up to 20 results/page, 50 req/day. Pro/enterprise: up to 100 results/page. Latency: - Typical: <150ms, p99: <400ms.

NameTypeReqDescription
cursorstring
industrystring
limitinteger

No output schema declared.

No examples provided.

list_subscriptions ~29

Returns the caller's active and inactive subscriptions (signing_key redacted). Requires an API key.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

preflight_should_i_act ~451

The single call an agent makes before transacting with a destination on the open web. Composes the cross-lens verdict with a bounded Tracker-presence bonus, maps the adjusted trust score to a tri-state decision (`allow` / `caution` / `deny`), and returns a 5-minute signed consultation receipt (`sigil_token` with `sub: preflight:consulted`). The receipt is the load-bearing artifact: the agent attaches it to its action log as cryptographic proof that the destination was consulted before action. The decision itself is commodity-shaped; the *receipt of having asked* is what accountability requires. When `ait` is supplied, the consultation additionally chains a witness-tier `preflight:consulted` event onto the ATAP AIT, signed by OAI-2026-0000201 — turning the consultation into a hash-chained, replayable artifact. Tracker presence applies a bounded `+0.05` trust bonus before decision mapping (capped at 1.0). Absence is never a penalty — most of the open web is not in the tracker corpus and that's expected. Defaults: `allow >= 0.70`, `caution >= 0.40`, else `deny`. Thresholds are overridable per request; weights are inherited from cross_lens_verify.

NameTypeReqDescription
agent_idstringCaller's stable agent identifier, recorded in the receipt. Validated against /^[A-Za-z0-9._:-]{1,128}$/.
aitstringOptional ATAP AIT id. When present, chains a witness-tier `preflight:consulted` event onto the AIT.
intentstringFree-form context — recorded in the receipt, never affects the decision. Validated against /^[A-Za-z0-9._:-]{1,64}$/.
nodestringyesIPv4/IPv6 address, domain, ASN with optional `AS` prefix, or entity_slug.
thresholdsobjectOptional overrides; must satisfy 0 <= caution < allow <= 1.

No output schema declared.

No examples provided.

profile_entity ~400

Call this before routing traffic, bidding on inventory, or trusting a counterparty. It fuses ALL THREE TunnelMind lenses for one subject — Scry (attacker intelligence + threat feeds + open ports), Sigil (ad-supply-chain position + trust score + ATAP witness count), and Tracker (DDG/IAB catalog + prevalence + categories) — into a single confidence-scored profile plus a signed P38 receipt. The `cross_lens.hits` field tells you if the same infrastructure appears in attack data AND supply-chain data — that's your highest-confidence signal, and the one no siloed competitor can give you. `cross_lens.flags` surfaces the actionable highlights (`cross_lens_overlap:scry+sigil`, `in_threat_intel:...`, `high_prevalence_tracker`, `corroborated_by_N_lenses`). Confidence weighting: each lens contributes a base score; a 1.5× multiplier applies when ≥2 lenses corroborate the same subject; and the Scry contribution is weighted by the attestation tier of the sensors that observed it (silicon_root 1.0 → self_asserted 0.5). Bounded [0,1] and carried into the receipt. Unlike `cross_lens_verify` (one node → one verdict) and `cross_lens_lookup` (one node → raw three-lens view), profile_entity takes the SUBJECT as any combination of ip / domain / entity and returns the richest fused detail for a pre-transaction decision. At least one of ip / domain / entity is required.

NameTypeReqDescription
domainstringDomain of the subject (Sigil + Tracker lenses).
entitystringentity_slug of the subject (Sigil + Tracker lenses).
ipstringIPv4 or IPv6 address of the subject (Scry lens).

No output schema declared.

No examples provided.

receipt_log_consistency_proof ~81

Proves the log at size `second` is an append-only extension of the log at size `first` — history was never rewritten. Returns both roots and the proof path. Verify offline with `scripts/verify-log.mjs consistency <proof.json>`.

NameTypeReqDescription
firstintegeryes
secondintegeryes

No output schema declared.

No examples provided.

receipt_log_inclusion_proof ~155

Proves a specific receipt (by unified `receipt_id`, lens alias, or raw `leaf_index`) is included in the tree at `tree_size` (default: the latest STH's). Returns `leaf_hash`, the `audit_path`, the recomputed `root_hash`, and the matching STH. What this proves: the receipt in your hand is byte-identical to the one sequenced into the log — not that the observation inside it was correct (ADR-010). Verify offline with `scripts/verify-log.mjs inclusion <proof.json>`.

NameTypeReqDescription
leaf_indexinteger
receipt_idstring
tree_sizeinteger

No output schema declared.

No examples provided.

receipt_log_sth ~128

P72 RFC 6962 transparency log over the unified receipt ledger (ADR-010). The STH commits to the entire log: `tree_size`, `root_hash` (`0x` + SHA-256), `timestamp`, and an Ed25519 signature (with `key_id` and embedded public key) over the RFC 8785 canonicalization of the body. Hashes only — receipt bodies are never on this surface. Verify offline with `scripts/verify-log.mjs sth` (zero TunnelMind library code) against the published receipt-signing key.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.