Server definition
- Hash
- sha256:79643f8b40d4440ba0133da6551de7027481e4bcf9e5ea22c15fb857eda2aadb
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "Truth Bear serves official-source screening records; every paid record ships record_hash + signed citation so you can verify it offline. verify_citation and find_signal are free. Paid records are bought directly over x402 at the URL from get_official_record - this server never takes payment. Descriptive only: no advice, no forecasts, no adjudication.",
"tools": [
{
"description": "FREE coverage + freshness manifest: which signal_id lines exist, how many entities each covers, and fresh/recent/stale counts - so you can check \"is my entity covered and how fresh\" BEFORE paying. Optional filters: industry, signal_id, entity.",
"inputSchema": {
"properties": {
"entity": {
"description": "object id, e.g. a USGS site id",
"type": "string"
},
"full": {
"description": "true = per-entity detail (larger); default compact summary",
"type": "boolean"
},
"industry": {
"description": "restrict to one domain, e.g. hydrology, agriculture, energy",
"type": "string"
},
"signal_id": {
"description": "e.g. hydrology.river-level",
"type": "string"
}
},
"type": "object"
},
"name": "find_signal",
"outputSchema": {
"additionalProperties": true,
"description": "Coverage + freshness manifest. On failure this object is an error report instead (see error/detail).",
"properties": {
"cache_note": {
"description": "What the cache does and does not affect.",
"type": "string"
},
"cache_policy": {
"description": "Cache policy in force.",
"type": "string"
},
"cache_ttl_s": {
"description": "Cache lifetime of this manifest in seconds.",
"type": "number"
},
"detail": {
"description": "Present on some failures: the upstream endpoint's own error text.",
"type": "string"
},
"error": {
"description": "Present only when the call failed; human-readable reason.",
"type": "string"
},
"freshness_rule": {
"description": "How fresh/recent/stale are decided.",
"type": "string"
},
"freshness_thresholds": {
"description": "The numeric thresholds behind freshness_rule.",
"type": "object"
},
"nature": {
"description": "What this manifest is.",
"type": "string"
},
"note": {
"description": "Screening-level disclaimer.",
"type": "string"
},
"signals": {
"description": "One entry per signal line. Compact by default; pass full=true for per-entity detail.",
"items": {
"additionalProperties": true,
"properties": {
"checkup": {
"description": "Latest patrol result for the line (full mode).",
"type": "object"
},
"description": {
"description": "What the line measures (full mode).",
"type": "string"
},
"entities": {
"description": "Per-entity detail; present only when full=true.",
"items": {
"additionalProperties": true,
"properties": {
"data_age_hours": {
"description": "Age of the observation in hours.",
"type": "number"
},
"entity": {
"description": "Object id.",
"type": "string"
},
"entity_name": {
"description": "Human-readable object name.",
"type": "string"
},
"freshness": {
"description": "fresh | recent | stale.",
"type": "string"
},
"observed_at": {
"description": "ISO timestamp of the observation.",
"type": "string"
},
"overdue_days": {
"description": "How many days past the declared cycle this object is.",
"type": "number"
},
"update_status": {
"description": "on_schedule | overdue | not_published | unknown, for this object.",
"type": "string"
},
"vintage_days": {
"description": "Age of the underlying source vintage in days.",
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"entities_count": {
"description": "How many objects the line covers.",
"type": "integer"
},
"factory": {
"description": "Internal collector name (full mode).",
"type": "string"
},
"freshness_counts": {
"description": "fresh / recent / stale counts for the line.",
"type": "object"
},
"industry": {
"description": "Domain the line belongs to; null when the line is not classified.",
"type": [
"string",
"null"
]
},
"latest_observed_at": {
"description": "ISO timestamp of the newest observation; null when the line has never published.",
"type": [
"string",
"null"
]
},
"max_overdue_days": {
"description": "Largest overdue gap in the line, in days.",
"type": "number"
},
"record_type": {
"description": "Kind of record the line emits (full mode).",
"type": "string"
},
"signal_id": {
"description": "e.g. hydrology.river-level",
"type": "string"
},
"signal_id_label": {
"description": "Human-readable line name (full mode).",
"type": "string"
},
"temporal_cycle": {
"description": "Publication cycle declared by the upstream source (full mode).",
"type": "string"
},
"update_status": {
"description": "on_schedule | overdue | not_published | unknown.",
"type": "string"
},
"update_status_counts": {
"description": "Per-status entity counts.",
"type": "object"
}
},
"type": "object"
},
"type": "array"
},
"totals": {
"description": "signal_ids / industries / distinct_entities / freshness counts across the whole catalogue.",
"type": "object"
},
"update_status_rule": {
"description": "How on_schedule / overdue / not_published / unknown are decided.",
"type": "object"
}
},
"required": [],
"type": "object"
}
},
{
"description": "Returns the REAL x402 payment challenge (accepts[]: network / asset / payTo / amount) for the paid endpoint that serves a given signal_id+entity, or any listed endpoint addressed directly by `path`. This tool does NOT deliver paid data and does NOT take payment - MCP has no payment layer. Pay at the returned url with your own x402 client (USDC on Base or Solana, gasless EIP-3009; pay from a plain EOA) and you receive the record directly, with record_hash you can verify offline. This tool only fetches the 402 challenge; it delivers no paid data and collects no payment.",
"inputSchema": {
"anyOf": [
{
"required": [
"path"
]
},
{
"required": [
"signal_id",
"entity"
]
}
],
"properties": {
"dim": {
"description": "which product: full read (gauge) or a single add-on; the price of each is in the 402 challenge this tool returns, never here",
"enum": [
"gauge",
"ruler",
"calibrated",
"strata",
"history"
],
"type": "string"
},
"entity": {
"description": "which object within that line, e.g. the USGS site id 07010000",
"type": "string"
},
"path": {
"description": "Alternative addressing: any listed endpoint path, optionally with its query string (e.g. \"/gauge/chokepoint-region?loc=hormuz\"). The full list of legal paths is the free /manifest?all=1. Use this for the bundles and census lines that are not addressed by signal_id+entity.",
"type": "string"
},
"signal_id": {
"description": "which signal line, e.g. hydrology.river-level - use find_signal to list them",
"type": "string"
}
},
"type": "object"
},
"name": "get_official_record",
"outputSchema": {
"additionalProperties": false,
"description": "The real x402 payment challenge and how to pay it. No paid data is ever returned here. On failure this object is an error report instead.",
"properties": {
"after_payment": {
"description": "What the paid response carries and how to verify it offline.",
"type": "string"
},
"detail": {
"description": "Present on some failures: the upstream endpoint's own error text.",
"type": "string"
},
"error": {
"description": "Present only when the call failed; human-readable reason.",
"type": "string"
},
"expected": {
"description": "Present on failure: what was expected (an HTTP 402 challenge).",
"type": "string"
},
"got": {
"description": "Present on failure: the HTTP status actually returned.",
"type": "integer"
},
"hint": {
"description": "Present on failure: the next thing to try, e.g. find_signal.",
"type": "string"
},
"how_to_pay": {
"description": "How to sign and send the X-PAYMENT header; pay from a plain EOA.",
"type": "string"
},
"method": {
"description": "HTTP method to use at pay_at (always GET).",
"type": "string"
},
"note": {
"description": "Standing statement that this server never takes payment.",
"type": "string"
},
"pay_at": {
"description": "URL to send the paid GET to.",
"type": "string"
},
"x402_challenge": {
"description": "The upstream 402 body verbatim: x402Version + accepts[] (scheme / network / asset / payTo / amount).",
"type": "object"
}
},
"required": [],
"type": "object"
}
},
{
"description": "FREE. Ask how to pay for a listed endpoint and get every channel with its REAL status - including the ones that are wired but not open yet. Three channels exist: x402 micropayment (for an agent with a funded USDC wallet on Base), a stateless subscription Bearer token (for a person or team - no wallet, no private key, no account), and a card rail. This tool takes no payment and holds no key; it only tells you which doors exist and which are open today.",
"inputSchema": {
"properties": {
"path": {
"description": "A listed endpoint path (e.g. \"/gauge/grid-reliability-region\") to get its price alongside the channels. Omit it to get the channel list on its own. The full list of legal paths is the free /manifest?all=1.",
"type": "string"
}
},
"type": "object"
},
"name": "purchase_options",
"outputSchema": {
"properties": {
"asked_about": {
"description": "the path you asked about, or null if you asked for the channel list on its own",
"type": [
"string",
"null"
]
},
"detail": {
"description": "the upstream error text, when there is one",
"type": "string"
},
"endpoint": {
"description": "always \"/buy\" - which endpoint answered",
"type": "string"
},
"error": {
"description": "present only when the buy endpoint could not be reached",
"type": "string"
},
"free_first": {
"description": "what stays free and how to avoid paying for a lookup with no data",
"type": "string"
},
"note_unknown_path": {
"description": "present only when asked_about matched no listed endpoint",
"type": "string"
},
"price": {
"description": "the listed price, present only when asked_about matches a listed endpoint",
"type": "string"
},
"title": {
"description": "the listing title of that endpoint, when it has one",
"type": [
"string",
"null"
]
},
"ways_to_buy": {
"description": "every payment channel with its REAL status - including channels that are wired but not open yet",
"items": {
"properties": {
"caveat": {
"description": "x402 only: the reference client default per-call cap that silently blocks higher-priced calls",
"type": "string"
},
"channel": {
"description": "which rail",
"enum": [
"x402",
"subscription-token",
"fiat-card"
],
"type": "string"
},
"for": {
"description": "who this channel is for - agent with a wallet, or a person/team",
"type": "string"
},
"honest_note": {
"description": "plain statement of what is not available yet, when that is the case",
"type": "string"
},
"how": {
"description": "what you actually do to pay through this channel",
"type": "string"
},
"opens": {
"description": "YYYY-MM-DD - present only while a channel is configured but not open",
"type": [
"string",
"null"
]
},
"status": {
"description": "open | not-self-serve | configured-not-open-yet | unavailable",
"type": "string"
},
"unlocks": {
"description": "which endpoints this channel unlocks, when it is not per-call",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"type": "array"
}
},
"required": [],
"type": "object"
}
},
{
"description": "FREE. Given a record_hash from any Truth Bear record, look it up and recompute the canonical hash server-side, returning whether it is a genuine Truth Bear official record plus a plain-language reverse lookup of what exactly that hash attests. Use this to check a citation you were handed by another agent or document BEFORE relying on it. No payment, no API key.",
"inputSchema": {
"properties": {
"record_hash": {
"description": "sha256:<64 hex>, or a >=8-hex prefix as posted publicly",
"type": "string"
}
},
"required": [
"record_hash"
],
"type": "object"
},
"name": "verify_citation",
"outputSchema": {
"additionalProperties": true,
"description": "Verdict for one record_hash. On failure this object is an error report instead (see error/detail).",
"properties": {
"endpoint": {
"description": "Always \"gauge/verify\".",
"type": "string"
},
"entity": {
"description": "Object id the reading is about.",
"type": [
"string",
"null"
]
},
"error": {
"description": "Present only when the call failed; human-readable reason.",
"type": "string"
},
"found": {
"description": "Whether a published Truth Bear reading matches this hash.",
"type": "boolean"
},
"hash_core_version": {
"description": "Version of the canonical hash core used.",
"type": [
"integer",
"null"
]
},
"how_to_check_a_claimed_value": {
"description": "Present when found: how to check a value someone claims.",
"type": "string"
},
"is_truth_bear_record": {
"description": "true / false, or null when the check could not be run (see undetermined).",
"type": [
"boolean",
"null"
]
},
"note": {
"description": "Screening-level disclaimer.",
"type": "string"
},
"ots_status": {
"description": "Per-record field, unused: individual records are not stamped one by one. Anchoring happens per write-batch - see GET /gauge/anchor?hash= for the Merkle inclusion proof and, once the calendar confirms, the Bitcoin block number.",
"type": [
"string",
"null"
]
},
"recomputed_hash": {
"description": "sha256:<64 hex> recomputed from the stored record.",
"type": [
"string",
"null"
]
},
"record_status": {
"description": "Three-state disclosure. state=\"active\" for a normal record; a non-active state (e.g. \"quarantined\") means the record is genuine and its hash still verifies, but we have since flagged it as not fit for delivery - do NOT rely on the reading itself. Carries since (UTC ISO) and reason when non-active.",
"properties": {
"note": {
"description": "Why the record is kept queryable on purpose.",
"type": "string"
},
"reason": {
"description": "Short machine-readable reason code.",
"type": [
"string",
"null"
]
},
"since": {
"description": "UTC ISO second-precision timestamp of when we flagged it.",
"type": [
"string",
"null"
]
},
"state": {
"description": "\"active\" or a withdrawal state such as \"quarantined\".",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"reverse_lookup": {
"description": "Plain-language statement of exactly what this hash attests.",
"type": "string"
},
"scope": {
"description": "What this hash does and does not attest.",
"type": "string"
},
"signal_id": {
"description": "e.g. hydrology.river-level",
"type": [
"string",
"null"
]
},
"snapshot_date": {
"description": "YYYY-MM-DD of the reading.",
"type": [
"string",
"null"
]
},
"source_ref": {
"description": "URL of the official source record.",
"type": [
"string",
"null"
]
},
"undetermined": {
"description": "true when the lookup itself failed (e.g. DB unavailable) - NOT a verdict of \"fake\".",
"type": "boolean"
},
"verified": {
"description": "Whether the canonical hash recomputed server-side matches the one supplied.",
"type": "boolean"
}
},
"required": [],
"type": "object"
}
},
{
"description": "FREE. Cross-verify one GAUGE interweave line: it returns each official series (\"leg\") in the line with its own record_hash, current/previous values, expected direction and per-leg minMove deadband, plus a count-style state (directions_matched / direction_mismatch / inverse_consistent / not_comparable / insufficient) and N-of-M. Everything needed to recompute the verdict OFFLINE is in the response - verify each leg hash with verify_citation, then recompute dir=sign(current-previous) with the minMove deadband. Descriptive only: no forecast, no causation, no advice. No payment, no API key.",
"inputSchema": {
"properties": {
"entity": {
"description": "the object within the line, as US-<ST>, e.g. \"US-TX\" (case-insensitive). Required.",
"type": "string"
},
"line": {
"description": "which interweave line, e.g. \"E\" (state vs national unemployment) or \"F\" (drought vs crop). Public demo lines are E and F.",
"type": "string"
}
},
"required": [
"line",
"entity"
],
"type": "object"
},
"name": "verify_triangular",
"outputSchema": {
"additionalProperties": true,
"description": "Count-style read of one interweave line: how many official series moved in their pre-registered direction. Descriptive only - no verdict of \"true/false\", no forecast, no causation. On failure this object is an error report instead (see error/detail).",
"properties": {
"detail": {
"description": "Present on some failures: the upstream endpoint's own error text.",
"type": "string"
},
"entity": {
"description": "the external contract code, e.g. US-TX.",
"type": "string"
},
"error": {
"description": "Present only when the call failed; human-readable reason.",
"type": "string"
},
"legs": {
"description": "one entry per official series in the line.",
"items": {
"additionalProperties": true,
"description": "One official series (\"leg\") in the line, with the fields needed to recompute its direction offline.",
"properties": {
"as_of": {
"description": "ISO timestamp of the current reading; null when unavailable.",
"type": [
"string",
"null"
]
},
"contradicts_registered_direction": {
"description": "present on an optional leg that moved against its registered direction.",
"type": "boolean"
},
"current_value": {
"description": "newest official reading; null when unavailable.",
"type": [
"number",
"null"
]
},
"dependent": {
"description": "present when this leg is a super-population of another (e.g. national vs state) - agreement is weak, only mismatch is informative.",
"type": "boolean"
},
"dir": {
"description": "measured direction THIS window: +1 / -1 / 0 (|Δ|<minMove) / null when a value is missing. NOT the expectation.",
"type": [
"integer",
"null"
]
},
"entity": {
"description": "object id this leg reads, e.g. US-TX or us.",
"type": "string"
},
"expect": {
"description": "pre-registered expected direction (+1 or -1) - the arrow, fixed in advance, not this window.",
"type": [
"integer",
"null"
]
},
"metric": {
"description": "which scalar in the reading, e.g. rate_pct.",
"type": "string"
},
"minMove": {
"description": "per-leg deadband: if |current_value-previous_value| < minMove then dir is recorded as 0. Delivered so you can recompute dir yourself.",
"type": [
"number",
"null"
]
},
"optional": {
"description": "present when this leg is a non-required confirmation leg (does not change the line state).",
"type": "boolean"
},
"previous_value": {
"description": "prior official reading; null when unavailable.",
"type": [
"number",
"null"
]
},
"record_hash": {
"description": "per-leg official record hash - POST /gauge/verify (or verify_citation) to check it independently.",
"type": [
"string",
"null"
]
},
"signal_id": {
"description": "e.g. macro.unemployment",
"type": "string"
},
"source_ref": {
"description": "URL of the official source record; null when unavailable.",
"type": [
"string",
"null"
]
},
"source_tier": {
"description": "provenance tier of the leg; null when unavailable.",
"type": [
"string",
"null"
]
}
},
"required": [],
"type": "object"
},
"type": "array"
},
"line": {
"description": "the line code you asked for, e.g. E or F.",
"type": "string"
},
"matched": {
"description": "N: how many REQUIRED legs had measured dir === expect this window.",
"type": "integer"
},
"nature": {
"description": "neutral English disclosure; may be null.",
"type": [
"string",
"null"
]
},
"note": {
"description": "standing disclaimer: direction is observed, not a trend/forecast/causation claim.",
"type": "string"
},
"pair_state": {
"description": "inverse-pair lines (F/FW) only: holds_stress | holds_relief | broken | insufficient | not_comparable; absent/null on other lines.",
"type": [
"string",
"null"
]
},
"reason": {
"description": "stale | missing_current_or_previous | below_min_move | period_misaligned | no_active_drought | parallel_display | null.",
"type": [
"string",
"null"
]
},
"required": {
"description": "M: number of required legs. The public claim is exactly \"N of M moved in the registered direction\".",
"type": "integer"
},
"snapshot_window": {
"additionalProperties": true,
"description": "the {from,to} window the legs were read over, or null.",
"properties": {
"from": {
"description": "window start.",
"type": "string"
},
"to": {
"description": "window end.",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"state": {
"description": "directions_matched | direction_mismatch | inverse_consistent | not_comparable | insufficient. A count/observation, NOT an adjudication.",
"type": "string"
},
"statement": {
"description": "the locked, neutral disclosure sentence with N/M substituted.",
"type": "string"
},
"title": {
"description": "letter-only title (e.g. \"線E\"); never a phenomenon name.",
"type": "string"
},
"verify_hint": {
"description": "exactly how to recompute the state offline from each leg (record_hash + dir=sign(Δ) with minMove deadband).",
"type": "string"
}
},
"required": [],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:79643f8b40d4440ba0133da6551de7027481e4bcf9e5ea22c15fb857eda2aadb | sha256sum