Kairos Signal — verifiable DePIN data API
by kairossignal.com · remote · no sign-in to list tools · v3.7.0 · published by com.kairossignal
DePIN network telemetry with the source, as_of time and an upstream verify URL on every value.
15 tools: 1 can delete or cancel things, 1 do something that can't be undone, 4 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things4Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http kairos-signal https://kairossignal.com/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 1Claude Code: deny
purchase_dataBuy a product with your credits; the data ships inline in the response.No findings
Why it is in this group
- The name "purchase_data" says "purchase": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Buy a product with your credits; the data ships inline in the response. Deliverability is product-specific, including grade availability; check /v1/credits/pricing before buying — call list_products for the live prices rather than trusting a figure restated here, which is how a price in a second place drifts from the first. The signal_*, dag_* and mcp_unlimited keys are priced but return 503 not_yet_deliverable — they are deliberately blocked, not broken, because nothing grants their entitlement yet. Credits buy DATA; they do not change your access tier. Use api_key from register_agent.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
- title: Buy a data product with credits
Can't be undone 1Claude Code: ask
topup_creditsAdd credits.No findings
Why it is in this group
- The name "topup_credits" says "topup": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Add credits. Card (one call): {"method": "stripe", "amount": N} where N is $20 or $99 — returns a Stripe checkout_url already bound to your api_key, and credits post automatically once Stripe confirms payment at $1 = 1 credit. No human step and no wallet needed. USDC on Base ({"method": "usdc"}) is also accepted but requires more work: verify your sender first via POST /v1/credits/crypto/challenge and /verify with X-API-Key, sign the returned challenge with your own EOA, then pass the verified from_address and send only after a successful quote — credit requires finalized Base evidence. Instructions: https://kairossignal.com/docs/crypto.html
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- title: Add credits (card checkout link or USDC quote)
Changes things 4Claude Code: ask
check_balanceCheck your remaining credit balance.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check your remaining credit balance. Use after purchases to see remaining credits.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Check credit balance
register_agentCreates an API key for this agent and grants the free starter credits ($5 free credits, no card (first 3 keys per IP per 30 days)).No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
Description, as the server wrote it Creates an API key for this agent and grants the free starter credits ($5 free credits, no card (first 3 keys per IP per 30 days)). Past the per-IP limit a key is still created, with $0, and the response says so. A key is only needed for purchase_data, check_balance and topup_credits; every read-only tool works without one. email is optional and used for delivery and top-up notices.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- title: Register an agent API key
verify_footprintRetained Merkle-membership check for one depin_onchain observation: stamp_day (YYYYMMDD), leaf_index (0-based row in /attestations/batch_<day>.tsv), expected_row_sha256.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Retained Merkle-membership check for one depin_onchain observation: stamp_day (YYYYMMDD), leaf_index (0-based row in /attestations/batch_<day>.tsv), expected_row_sha256. verified=true ONLY when the row at that index hashes to expected_row_sha256 AND its inclusion path reaches that day's manifest merkle_root. Says nothing about Bitcoin status or upstream accuracy. Returns JSON: row_sha256, merkle_root, row_hash_matches, inclusion_path_reaches_root, verified, proof_url. Use it when you hold a row from a daily batch and want to show it was committed that day; a call with arguments missing lists the days with a proof ready and a working example. Read-only, no key. Other datasets: unsupported (no retained proof).
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Verify a row's Merkle inclusion proof
verify_valueRe-reads the upstream API behind one of our values right now and reports where the same number appears in the upstream response (JSONPath), the relative difference, and a verdict: …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Re-reads the upstream API behind one of our values right now and reports where the same number appears in the upstream response (JSONPath), the relative difference, and a verdict: exact, within_1pct, within_10pct, no_matching_field or not_checkable_by_get. Use it to check a figure before relying on it. Makes one GET to a third-party API; read-only.
Annotations the server declares
- title: Re-check a value against its upstream source
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 9Claude Code: allow
fetch_datasetQuery records from a dataset with limit/offset.No findings
Why it is in this group
- The name "fetch_dataset" says "fetch": a word for reading.
Description, as the server wrote it Query records from a dataset with limit/offset. Free tier: 10 records per query. For depin_onchain, raw archived observations, including rejected rows, are retained. observation_quality reports limited PKT airdrop checks; not_checked means not validated. This read-time annotation is not covered by original proof hashes.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Fetch raw dataset rows
find_networksLooks up DePIN networks (and Bittensor subnets) that have live data, by name or ticker, e.g.No findings
Why it is in this group
- The name "find_networks" says "find": a word for reading.
Description, as the server wrote it Looks up DePIN networks (and Bittensor subnets) that have live data, by name or ticker, e.g. 'akash', 'helium', 'FIL'. Returns symbol, name, category and the network's public page. Use it to get the symbol that get_network, get_metric_history and verify_value take. Read-only, no key.
Annotations the server declares
- title: Find DePIN networks by name or ticker
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_data_dictionaryONBOARDING SPEC: freshness, history depth, coverage and endpoints per feed (depin_onchain, depin_daily, health_profiles, signal_ledger, market_ticks, zk_footprints).No findings
Why it is in this group
- The name "get_data_dictionary" says "get": a word for reading.
Description, as the server wrote it ONBOARDING SPEC: freshness, history depth, coverage and endpoints per feed (depin_onchain, depin_daily, health_profiles, signal_ledger, market_ticks, zk_footprints). Machine-legible; answers 'how stale is this and how far back does it go' for every feed. Free, no key.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Get the data dictionary
get_derivation_ledgerReturns the derivation ledger index.No findings
Why it is in this group
- The name "get_derivation_ledger" says "get": a word for reading.
Description, as the server wrote it Returns the derivation ledger index. With a symbol: up to 20 recent archived upstream fetches behind that network, each with time, verify_url, the SHA-256 and size of the raw payload, the collector code hash and the fetch status, so a published value can be traced to the exact bytes and build that produced it (the payload bytes themselves are the paid derivation_replay product). A network with live data that the ledger does not cover yet returns entries: [] with ledger_status not_yet_covered and the covered symbols. Without a symbol: every covered symbol with its latest fetch time and entry count. Read-only, no key. To compare a live value with its upstream right now, use verify_value.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Get the derivation ledger
get_metric_historyReturns the daily series for one network metric (one point per UTC day, with how many observations backed it), e.g.No findings
Why it is in this group
- The name "get_metric_history" says "get": a word for reading.
Description, as the server wrote it Returns the daily series for one network metric (one point per UTC day, with how many observations backed it), e.g. symbol=AKT metric=GPU_ACTIVE. Days with no observation are absent, never zero. The free tier serves the last 7 days and says so in window_notice; an X-API-Key header on the connection serves your tier's window. Read-only.
Annotations the server declares
- title: Get daily history for one network metric
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_networkReturns the latest first-party measurements for one DePIN network (GPU and CPU capacity, storage, node or hotspot counts, on-chain totals), each with value, unit, as_of, freshness …No findings
Why it is in this group
- The name "get_network" says "get": a word for reading.
Description, as the server wrote it Returns the latest first-party measurements for one DePIN network (GPU and CPU capacity, storage, node or hotspot counts, on-chain totals), each with value, unit, as_of, freshness and the verify_url on the network's own API that you can open to check it. Market prices are not included. metric_filter narrows by substring; stale readings are omitted unless include_stale is true. Read-only, no key.
Annotations the server declares
- title: Get a network's latest measured values
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_statsReturns the row count of every dataset served here (depin_onchain, market_ticks and the rest), their total, the scope statement and the free-tier limits.No findings
Why it is in this group
- The name "get_stats" says "get": a word for reading.
Description, as the server wrote it Returns the row count of every dataset served here (depin_onchain, market_ticks and the rest), their total, the scope statement and the free-tier limits. No arguments, no key, read-only. For one network's live values use get_network; for freshness and history depth per feed use get_data_dictionary.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Get coverage statistics
list_datasetsList the current dataset catalog with record counts.No findings
Why it is in this group
- The name "list_datasets" says "list": a word for reading.
Description, as the server wrote it List the current dataset catalog with record counts. Browsing is free; existing query and daily-call limits apply.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: List raw datasets
list_productsBrowse purchasable products with prices in credits ($1 = 1 credit).No findings
Why it is in this group
- The name "list_products" says "list": a word for reading.
Description, as the server wrote it Browse purchasable products with prices in credits ($1 = 1 credit). DePIN supply-telemetry, provenance, derivation-replay, history and the intel bundle start at $0.49. Grade purchases are conditional on measured-grade availability; check /v1/credits/pricing before buying. Signal-feed tiers, DAG-manifold tiers and mcp_unlimited are priced but NOT yet purchasable: their entitlement is not wired into the serving API, so purchase_data refuses them with 503 not_yet_deliverable rather than charging you for nothing. Call after register_agent.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: List data products and prices
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 3.7.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http kairos-signal https://kairossignal.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__kairos-signal__find_networks",
"mcp__kairos-signal__get_network",
"mcp__kairos-signal__get_metric_history",
"mcp__kairos-signal__list_products",
"mcp__kairos-signal__list_datasets",
"mcp__kairos-signal__get_stats",
"mcp__kairos-signal__get_data_dictionary",
"mcp__kairos-signal__get_derivation_ledger",
"mcp__kairos-signal__fetch_dataset"
],
"ask": [
"mcp__kairos-signal__verify_value",
"mcp__kairos-signal__register_agent",
"mcp__kairos-signal__topup_credits",
"mcp__kairos-signal__check_balance",
"mcp__kairos-signal__verify_footprint"
],
"deny": [
"mcp__kairos-signal__purchase_data"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as kairos-signal. Review it before you use it.