Servidor MCP

mcp-gauge

io.github.CHANGCHINFU/mcp-gauge
Datos y analítica Búsqueda e investigación Público y accesible MCP 2026-07-28

Qué hace este MCP

Provides coverage discovery, paid official data records, citation-hash verification, and cross-checking of supported factual signals.

find_signal
Find which signals/entities are covered (free)
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'full': {'type': 'boolean', 'description': 'true = per-entity detail (larger); default compact summary'}, 'entity': {'type': 'string', 'description': 'object id, e.g. a USGS site id'}, 'industry': {'type': 'string', 'description': 'restrict to one domain, e.g. hydrology, agriculture, energy'}, 'signal_id': {'type': 'string', 'description': 'e.g. hydrology.river-level'}}}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'note': {'type': 'string', 'description': 'Screening-level disclaimer.'}, 'error': {'type': 'string', 'description': 'Present only when the call failed; human-readable reason.'}, 'detail': {'type': 'string', 'description': "Present on some failures: the upstream endpoint's own error text."}, 'nature': {'type': 'string', 'description': 'What this manifest is.'}, 'totals': {'type': 'object', 'description': 'signal_ids / industries / distinct_entities / freshness counts across the whole catalogue.'}, 'signals': {'type': 'array', 'items': {'type': 'object', 'properties': {'checkup': {'type': 'object', 'description': 'Latest patrol result for the line (full mode).'}, 'factory': {'type': 'string', 'description': 'Internal collector name (full mode).'}, 'entities': {'type': 'array', 'items': {'type': 'object', 'properties': {'entity': {'type': 'string', 'description': 'Object id.'}, 'freshness': {'type': 'string', 'description': 'fresh | recent | stale.'}, 'entity_name': {'type': 'string', 'description': 'Human-readable object name.'}, 'observed_at': {'type': 'string', 'description': 'ISO timestamp of the observation.'}, 'overdue_days': {'type': 'number', 'description': 'How many days past the declared cycle this object is.'}, 'vintage_days': {'type': 'number', 'description': 'Age of the underlying source vintage in days.'}, 'update_status': {'type': 'string', 'description': 'on_schedule | overdue | not_published | unknown, for this object.'}, 'data_age_hours': {'type': 'number', 'description': 'Age of the observation in hours.'}}, 'additionalProperties': True}, 'description': 'Per-entity detail; present only when full=true.'}, 'industry': {'type': ['string', 'null'], 'description': 'Domain the line belongs to; null when the line is not classified.'}, 'signal_id': {'type': 'string', 'description': 'e.g. hydrology.river-level'}, 'description': {'type': 'string', 'description': 'What the line measures (full mode).'}, 'record_type': {'type': 'string', 'description': 'Kind of record the line emits (full mode).'}, 'update_status': {'type': 'string', 'description': 'on_schedule | overdue | not_published | unknown.'}, 'entities_count': {'type': 'integer', 'description': 'How many objects the line covers.'}, 'temporal_cycle': {'type': 'string', 'description': 'Publication cycle declared by the upstream source (full mode).'}, 'signal_id_label': {'type': 'string', 'description': 'Human-readable line name (full mode).'}, 'freshness_counts': {'type': 'object', 'description': 'fresh / recent / stale counts for the line.'}, 'max_overdue_days': {'type': 'number', 'description': 'Largest overdue gap in the line, in days.'}, 'latest_observed_at': {'type': ['string', 'null'], 'description': 'ISO timestamp of the newest observation; null when the line has never published.'}, 'update_status_counts': {'type': 'object', 'description': 'Per-status entity counts.'}}, 'additionalProperties': True}, 'description': 'One entry per signal line. Compact by default; pass full=true for per-entity detail.'}, 'cache_note': {'type': 'string', 'description': 'What the cache does and does not affect.'}, 'cache_ttl_s': {'type': 'number', 'description': 'Cache lifetime of this manifest in seconds.'}, 'cache_policy': {'type': 'string', 'description': 'Cache policy in force.'}, 'freshness_rule': {'type': 'string', 'description': 'How fresh/recent/stale are decided.'}, 'update_status_rule': {'type': 'object', 'description': 'How on_schedule / overdue / not_published / unknown are decided.'}, 'freshness_thresholds': {'type': 'object', 'description': 'The numeric thresholds behind freshness_rule.'}}, 'description': 'Coverage + freshness manifest. On failure this object is an error report instead (see error/detail).', 'additionalProperties': True}
get_official_record
Get the x402 payment challenge for a paid record
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'anyOf': [{'required': ['path']}, {'required': ['signal_id', 'entity']}], 'properties': {'dim': {'enum': ['gauge', 'ruler', 'calibrated', 'strata', 'history'], 'type': 'string', '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'}, 'path': {'type': 'string', '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.'}, 'entity': {'type': 'string', 'description': 'which object within that line, e.g. the USGS site id 07010000'}, 'signal_id': {'type': 'string', 'description': 'which signal line, e.g. hydrology.river-level - use find_signal to list them'}}}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'got': {'type': 'integer', 'description': 'Present on failure: the HTTP status actually returned.'}, 'hint': {'type': 'string', 'description': 'Present on failure: the next thing to try, e.g. find_signal.'}, 'note': {'type': 'string', 'description': 'Standing statement that this server never takes payment.'}, 'error': {'type': 'string', 'description': 'Present only when the call failed; human-readable reason.'}, 'detail': {'type': 'string', 'description': "Present on some failures: the upstream endpoint's own error text."}, 'method': {'type': 'string', 'description': 'HTTP method to use at pay_at (always GET).'}, 'pay_at': {'type': 'string', 'description': 'URL to send the paid GET to.'}, 'expected': {'type': 'string', 'description': 'Present on failure: what was expected (an HTTP 402 challenge).'}, 'how_to_pay': {'type': 'string', 'description': 'How to sign and send the X-PAYMENT header; pay from a plain EOA.'}, 'after_payment': {'type': 'string', 'description': 'What the paid response carries and how to verify it offline.'}, 'x402_challenge': {'type': 'object', 'description': 'The upstream 402 body verbatim: x402Version + accepts[] (scheme / network / asset / payTo / amount).'}}, '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.', 'additionalProperties': False}
purchase_options
How can I actually buy this? (free)
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'path': {'type': 'string', '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.'}}}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'error': {'type': 'string', 'description': 'present only when the buy endpoint could not be reached'}, 'price': {'type': 'string', 'description': 'the listed price, present only when asked_about matches a listed endpoint'}, 'title': {'type': ['string', 'null'], 'description': 'the listing title of that endpoint, when it has one'}, 'detail': {'type': 'string', 'description': 'the upstream error text, when there is one'}, 'endpoint': {'type': 'string', 'description': 'always "/buy" - which endpoint answered'}, 'free_first': {'type': 'string', 'description': 'what stays free and how to avoid paying for a lookup with no data'}, 'asked_about': {'type': ['string', 'null'], 'description': 'the path you asked about, or null if you asked for the channel list on its own'}, 'ways_to_buy': {'type': 'array', 'items': {'type': 'object', 'properties': {'for': {'type': 'string', 'description': 'who this channel is for - agent with a wallet, or a person/team'}, 'how': {'type': 'string', 'description': 'what you actually do to pay through this channel'}, 'opens': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD - present only while a channel is configured but not open'}, 'caveat': {'type': 'string', 'description': 'x402 only: the reference client default per-call cap that silently blocks higher-priced calls'}, 'status': {'type': 'string', 'description': 'open | not-self-serve | configured-not-open-yet | unavailable'}, 'channel': {'enum': ['x402', 'subscription-token', 'fiat-card'], 'type': 'string', 'description': 'which rail'}, 'unlocks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'which endpoints this channel unlocks, when it is not per-call'}, 'honest_note': {'type': 'string', 'description': 'plain statement of what is not available yet, when that is the case'}}}, 'description': 'every payment channel with its REAL status - including channels that are wired but not open yet'}, 'note_unknown_path': {'type': 'string', 'description': 'present only when asked_about matched no listed endpoint'}}}
verify_citation
Verify a Truth Bear record (free)
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['record_hash'], 'properties': {'record_hash': {'type': 'string', 'description': 'sha256:<64 hex>, or a >=8-hex prefix as posted publicly'}}}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'note': {'type': 'string', 'description': 'Screening-level disclaimer.'}, 'error': {'type': 'string', 'description': 'Present only when the call failed; human-readable reason.'}, 'found': {'type': 'boolean', 'description': 'Whether a published Truth Bear reading matches this hash.'}, 'scope': {'type': 'string', 'description': 'What this hash does and does not attest.'}, 'entity': {'type': ['string', 'null'], 'description': 'Object id the reading is about.'}, 'endpoint': {'type': 'string', 'description': 'Always "gauge/verify".'}, 'verified': {'type': 'boolean', 'description': 'Whether the canonical hash recomputed server-side matches the one supplied.'}, 'signal_id': {'type': ['string', 'null'], 'description': 'e.g. hydrology.river-level'}, 'ots_status': {'type': ['string', 'null'], '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.'}, 'source_ref': {'type': ['string', 'null'], 'description': 'URL of the official source record.'}, 'undetermined': {'type': 'boolean', 'description': 'true when the lookup itself failed (e.g. DB unavailable) - NOT a verdict of "fake".'}, 'record_status': {'type': ['object', 'null'], 'properties': {'note': {'type': 'string', 'description': 'Why the record is kept queryable on purpose.'}, 'since': {'type': ['string', 'null'], 'description': 'UTC ISO second-precision timestamp of when we flagged it.'}, 'state': {'type': 'string', 'description': '"active" or a withdrawal state such as "quarantined".'}, 'reason': {'type': ['string', 'null'], 'description': 'Short machine-readable reason code.'}}, '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.'}, 'snapshot_date': {'type': ['string', 'null'], 'description': 'YYYY-MM-DD of the reading.'}, 'reverse_lookup': {'type': 'string', 'description': 'Plain-language statement of exactly what this hash attests.'}, 'recomputed_hash': {'type': ['string', 'null'], 'description': 'sha256:<64 hex> recomputed from the stored record.'}, 'hash_core_version': {'type': ['integer', 'null'], 'description': 'Version of the canonical hash core used.'}, 'is_truth_bear_record': {'type': ['boolean', 'null'], 'description': 'true / false, or null when the check could not be run (see undetermined).'}, 'how_to_check_a_claimed_value': {'type': 'string', 'description': 'Present when found: how to check a value someone claims.'}}, 'description': 'Verdict for one record_hash. On failure this object is an error report instead (see error/detail).', 'additionalProperties': True}
verify_triangular
Cross-check a line of official series & recompute the verdict (free)
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['line', 'entity'], 'properties': {'line': {'type': 'string', 'description': 'which interweave line, e.g. "E" (state vs national unemployment) or "F" (drought vs crop). Public demo lines are E and F.'}, 'entity': {'type': 'string', 'description': 'the object within the line, as US-<ST>, e.g. "US-TX" (case-insensitive). Required.'}}}
Esquema de salida
{'type': 'object', 'required': [], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'dir': {'type': ['integer', 'null'], 'description': 'measured direction THIS window: +1 / -1 / 0 (|Δ|<minMove) / null when a value is missing. NOT the expectation.'}, 'as_of': {'type': ['string', 'null'], 'description': 'ISO timestamp of the current reading; null when unavailable.'}, 'entity': {'type': 'string', 'description': 'object id this leg reads, e.g. US-TX or us.'}, 'expect': {'type': ['integer', 'null'], 'description': 'pre-registered expected direction (+1 or -1) - the arrow, fixed in advance, not this window.'}, 'metric': {'type': 'string', 'description': 'which scalar in the reading, e.g. rate_pct.'}, 'minMove': {'type': ['number', 'null'], 'description': 'per-leg deadband: if |current_value-previous_value| < minMove then dir is recorded as 0. Delivered so you can recompute dir yourself.'}, 'optional': {'type': 'boolean', 'description': 'present when this leg is a non-required confirmation leg (does not change the line state).'}, 'dependent': {'type': 'boolean', 'description': 'present when this leg is a super-population of another (e.g. national vs state) - agreement is weak, only mismatch is informative.'}, 'signal_id': {'type': 'string', 'description': 'e.g. macro.unemployment'}, 'source_ref': {'type': ['string', 'null'], 'description': 'URL of the official source record; null when unavailable.'}, 'record_hash': {'type': ['string', 'null'], 'description': 'per-leg official record hash - POST /gauge/verify (or verify_citation) to check it independently.'}, 'source_tier': {'type': ['string', 'null'], 'description': 'provenance tier of the leg; null when unavailable.'}, 'current_value': {'type': ['number', 'null'], 'description': 'newest official reading; null when unavailable.'}, 'previous_value': {'type': ['number', 'null'], 'description': 'prior official reading; null when unavailable.'}, 'contradicts_registered_direction': {'type': 'boolean', 'description': 'present on an optional leg that moved against its registered direction.'}}, 'description': 'One official series ("leg") in the line, with the fields needed to recompute its direction offline.', 'additionalProperties': True}, 'description': 'one entry per official series in the line.'}, 'line': {'type': 'string', 'description': 'the line code you asked for, e.g. E or F.'}, 'note': {'type': 'string', 'description': 'standing disclaimer: direction is observed, not a trend/forecast/causation claim.'}, 'error': {'type': 'string', 'description': 'Present only when the call failed; human-readable reason.'}, 'state': {'type': 'string', 'description': 'directions_matched | direction_mismatch | inverse_consistent | not_comparable | insufficient. A count/observation, NOT an adjudication.'}, 'title': {'type': 'string', 'description': 'letter-only title (e.g. "線E"); never a phenomenon name.'}, 'detail': {'type': 'string', 'description': "Present on some failures: the upstream endpoint's own error text."}, 'entity': {'type': 'string', 'description': 'the external contract code, e.g. US-TX.'}, 'nature': {'type': ['string', 'null'], 'description': 'neutral English disclosure; may be null.'}, 'reason': {'type': ['string', 'null'], 'description': 'stale | missing_current_or_previous | below_min_move | period_misaligned | no_active_drought | parallel_display | null.'}, 'matched': {'type': 'integer', 'description': 'N: how many REQUIRED legs had measured dir === expect this window.'}, 'required': {'type': 'integer', 'description': 'M: number of required legs. The public claim is exactly "N of M moved in the registered direction".'}, 'statement': {'type': 'string', 'description': 'the locked, neutral disclosure sentence with N/M substituted.'}, 'pair_state': {'type': ['string', 'null'], 'description': 'inverse-pair lines (F/FW) only: holds_stress | holds_relief | broken | insufficient | not_comparable; absent/null on other lines.'}, 'verify_hint': {'type': 'string', 'description': 'exactly how to recompute the state offline from each leg (record_hash + dir=sign(Δ) with minMove deadband).'}, 'snapshot_window': {'type': ['object', 'null'], 'properties': {'to': {'type': 'string', 'description': 'window end.'}, 'from': {'type': 'string', 'description': 'window start.'}}, 'description': 'the {from,to} window the legs were read over, or null.', '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).', 'additionalProperties': True}
Añadido
verify_triangular
17 de September de 2026 a las 12:40
Añadido
purchase_options
17 de September de 2026 a las 12:40
Añadido
get_official_record
17 de September de 2026 a las 12:40
Añadido
find_signal
17 de September de 2026 a las 12:40
Añadido
verify_citation
17 de September de 2026 a las 12:40