Skip to main content
Glama

PayPerByte MCP Server

0rkz/byte-mcp-server MCP server

Ein Model Context Protocol-Server, der KI-Agenten direkten Zugriff auf PayPerByte gibt – kryptografisch attestierte, herkunftsverifizierbare Datenfeeds für KI-Agenten (der X-BYTE-Attestation-Beleg beweist Lieferintegrität – das sind exakt die Bytes, die PayPerByte unter der BYTE-Library-Domain ausgeliefert und attestiert hat – nicht, dass ein unabhängiger Datenverlag sie signiert hat, und nicht, dass die Daten korrekt sind). Agenten entdecken Feeds, zahlen pro Aufruf per x402 (abgerechnet in USDC auf Base-Mainnet) oder abonnieren On-Chain-Streams (Arbitrum-Sepolia-Testnetz). Jede kostenpflichtige x402-Antwort enthält einen EIP-712-PayloadAttestation-Beleg (X-BYTE-Attestation-Header), den der Agent vor dem Handeln verifiziert. Keine Token, keine API-Schlüssel, keine Off-Chain-Konten.

Zwei Schienen – lesen Sie das, bevor Sie PRIVATE_KEY setzen.

  • x402-Pay-per-Call (byte_buy_data): Base-Mainnet (eip155:8453), ECHTE USDC. Kostenpflichtige Feeds rechnen mit echtem Geld ab – das Flaggschiff Merchant Screen Oracle kostet 0,10 $ pro Urteil: eine signierte ALLOW/WARN/BLOCK-Prüfung von Domain und Auszahlungsadresse eines Händlers, abgesichert durch eine signierte EIP-712-Attestierung über die exakten Antwort-Bytes, ausgeführt bevor ein Agent eine x402-Zahlung an ihn abwickelt. Authentizität und Lieferintegrität, keine Korrektheitsgarantie für das Urteil selbst – und für die Domain, Adresse und den Preis, die Sie angeben; es beobachtet oder beschränkt nicht die Adresse, an die Sie letztendlich zahlen. Verwenden Sie eine dedizierte Wallet, die nur das enthält, was Sie ausgeben möchten.

  • On-Chain-Abonnieren/Veröffentlichen/Abfragen (BYTE-Library-Verträge + Indexer): Arbitrum-Sepolia-Testnetz (Chain 421614), MockUSDC. Das Mainnet für diese Schiene ist an ein externes Sicherheitsaudit gekoppelt. Die EIP-712-Attestierungs-Signing-Domain bleibt unabhängig davon, auf welcher Schiene Sie bezahlt haben, bei 421614 verankert.

Ein PRIVATE_KEY bedient beide Schienen. Verwenden Sie niemals einen Schlüssel wieder, der Gelder enthält, deren Ausgabe Sie sich nicht leisten können.

Schnellstart

npx -y byte-mcp-server

Binden Sie es in Ihren MCP-Client ein (Claude-Desktop-Konfiguration unten), dann kann Ihr Agent:

  • Entdecken Sie Feeds: „Listen Sie den PayPerByte-Katalog auf“ / „Suchen Sie Verlage für Wetter“

  • Prüfen Sie einen Geschäftspartner, bevor Sie ihn bezahlen (x402, keine Einrichtung): „Prüfen Sie diese Domain und Auszahlungsadresse, bevor ich abwickle“ → 0,10 $ echte USDC auf Base-Mainnet, signiertes ALLOW/WARN/BLOCK-Urteil vom Merchant Screen Oracle mit Attestierungsbeleg

  • Erst günstig testen: „Holen Sie das Wetter“ / „Gibt es heute Erdbeben über M4?“ → 0,005 $ / 0,003 $ echte USDC, gleicher Attestierungsbeleg bei jeder Antwort – der günstigste Weg, um Verify-before-Act in Aktion zu sehen, bevor Sie für ein Urteil ausgeben

  • Abonnieren Sie einen Stream (Testnetz): „Abonnieren Sie mich für den Erdbeben-Feed“ → genehmigt automatisch MockUSDC für laufende Abrechnung auf Arbitrum Sepolia

  • Fakten-Orakel abfragen (Testnetz): stellen Sie einem registrierten Fakten-Orakel-Verlag eine signierte EIP-712-Frage für eine On-Chain-signierte Antwort mit Quellenangaben – sobald ein Fakten-Orakel-Verlag aktiv ist (aktuell sendet keiner; das Tool läuft in einen Timeout, bis sich einer registriert und sendet)

Der Live-Katalog befindet sich unter x402.payperbyte.io/feeds – kryptografisch attestierte, herkunftsverifizierbare Feeds aus den Bereichen Wetter, Märkte, Code, Sicherheit und Wissen.

Related MCP server: dyoe-agent-tools-mcp

Vor dem Handeln verifizieren (ForeSeal)

Sehen Sie den gesamten Verify-before-Act-Kreislauf in einem einzigen Befehl – keine Installation, keine Anmeldung, keine Wallet:

npx @foreseal/demo

Es läuft lokal (keine echte USDC) und zeigt, wie ein Agent bei echten Bytes ACT und bei vier Angriffen REFUSE ausgibt – ein manipuliertes Byte, eine gefälschte Signatur, einen fehlenden Beleg, eine geforkte Signing-Domain – in etwa einer Sekunde.

Dieselbe Primitive ist als zwei Pakete erhältlich, die Sie in Ihren eigenen Stack einbauen können:

  • Kit – @payperbyte/sdk: Der Käufer verifiziert einen Beleg, bevor er handelt.

  • Gate – @foreseal/gate: Ein Verkäufer stempelt einen verifizierbaren Beleg auf jeden x402-Endpunkt.

Zwei Paradigmen: Abonnieren vs. Kaufen

Modus

Tool

Schiene

Am besten geeignet für

Preis

Kaufen (x402)

byte_buy_data

Base-Mainnet – echte USDC

Einmalige Bedarfe (einzelner Snapshot oder Urteil für diese Benutzerabfrage)

Pro Feed, in der 402-Challenge angegeben (0,10 $ Flaggschiff; die meisten Feeds Cent oder weniger)

Abonnieren

byte_subscribe

Arbitrum Sepolia – Testnetz MockUSDC

Kontinuierliche Streams (jedes Wetter-Update, jedes neue Erdbeben)

0,003 $ / KB pro Zustellung

Kaufen ist ohne Einrichtung, nutzungsbasiert und live mit echter Abrechnung; Abonnieren liefert jede Übertragung auf der durch ein Audit freigeschalteten Testnetz-Schicht. Wählen Sie je nach Zugriffsmuster.

Ein Urteil kaufen (POST-Orakel)

GET-Datenfeeds benötigen nur einen feed. Jeder Feed, dessen method POST enthält (Live-Liste: https://x402.payperbyte.io/feeds), nimmt die Abfrage als body entgegen – byte_buy_data wechselt den Aufruf automatisch von GET auf POST. Die Urteils-Orakel – Feeds, die ein signiertes ALLOW/WARN/BLOCK zurückgeben – sind merchant-screen, address-reputation, sanctions-screen, pkg-verdict, reasoning-verdict:

// byte_buy_data tool call — screen a merchant/counterparty before settling
{
  "feed": "merchant-screen",
  "body": { "domain": "example.com", "address": "0x1234…abcd", "observed_price_atomic": "100000" }
}

Die kostenpflichtige Antwort liefert das signierte Urteil und ein Inline-Verify-before-Act-Ergebnis über den X-BYTE-Attestation-Beleg:

{
  "feed": "merchant-screen",
  "paid": true,
  "price": "$0.100000",
  "txHash": "0x…",
  "data": { "answer": { "verdict": "ALLOW", "reasons": ["…"] }, "attestation": { "…": "…" } },
  "verification": { "verified": true, "hashMatch": true, "signerMatch": true,
                    "reason": "receipt verified — bytes intact AND signed by the pinned gateway attester (safe to act)" }
}

Handeln Sie nur, wenn verification.verified === true ist – der Beleg beweist Herkunft und Integrität, nicht Korrektheit. Weitere POST-Bodies: address-reputation {domain,address}, sanctions-screen {address|name}, pkg-verdict {ecosystem,package[,version]}, reasoning-verdict {subject}. Lassen Sie body für GET-Datenfeeds (Wetter, Erdbeben, …) vollständig weg.

Tools (insgesamt 15)

Entdeckung (schreibgeschützt, keine Wallet)

Tool

Beschreibung

byte_search_publishers

Verlage nach Thema und Sortierreihenfolge durchsuchen

byte_list_feeds

Den aktiven Feed-Katalog mit Preisen und Häufigkeiten auflisten

byte_get_publisher

On-Chain-Informationen zu einem Verlag (Status, Abonnenten, Nachrichten, USDC-Einnahmen, Schema)

byte_get_network_stats

Netzwerkweite Statistiken: Verlage, Nachrichten, insgesamt abgerechnete Gebühren

byte_check_subscription

Ist subscriber bei publisher abonniert?

byte_list_my_subscriptions

Alle aktiven Abonnements für eine Wallet – Nachrichten der letzten 7/30 Tage + USDC-Ausgaben

byte_subscription_health

Content-Drift-Signal für einen Verlag: stabil / moderat / erheblich / unbekannt

byte_get_token_balances

USDC- und ETH-Guthaben auf Arbitrum Sepolia

byte_verify_payload

Verify-before-act. Berechnen Sie keccak256 der Bytes, die Ihr Agent erhalten hat, neu und prüfen Sie sie gegen die On-Chain-EIP-712-PayloadAttestation des Verlags – verankern Sie mit einem expectedHash, den Sie besitzen, oder der Abrechnungs-txHash (die auch den Signer wiederherstellt und bestätigt, dass es der genannte Verlag ist). Wenn verified: false ist, wurden die Daten während der Übertragung manipuliert/beschädigt – handeln Sie nicht danach

Einen Stream abonnieren (erfordert PRIVATE_KEY)

Werkzeug

Beschreibung

byte_subscribe

Stream eines Publishers abonnieren. Bündelt automatisch eine USDC-approve(max)-Anweisung ein, sofern nicht skipAllowance: true gesetzt ist (behebt einen Stolperstein bei stillen Zahlungsfehlern: Der Allowance-Überspringungspfad des Vertrags lieferte zuvor Daten mit amount=0)

byte_unsubscribe

Abbestellen – wird im nächsten Block wirksam

byte_register_publisher

Als Daten-Publisher registrieren (Schema + On-Chain-Registrierung). v1 ist ausschließlich First-Party; Stake = 0

byte_publish_data

Einen Payload über DataStream an einen Abonnenten sendenn (Gebühr wird in USDC beglichen). Siehe Migrationshinweis oben bezüglich r2

On-Demand-Kauf (erfordert PRIVATE_KEY)

Werkzeug

Beschreibung

byte_buy_data

Ein Paket von einem beliebigen Feed über das x402-Gateway kaufen – echte USDC auf Base-Mainnet. Kein Abonnement, keine Allowance. Signiert EIP-3009 transferWithAuthorization gegen die 402-Challengenge; der Facilitator wickelt die Abrechnung an der Chain ab. Gibt die Daten + Transaktions-Hash inline zurück

byte_query_fact

Stellen Sie einem Fact-Oracle-Publisher, der einem Slashing-Risiko unterliegt, eine Frage. Signierte EIP-712-Anfrage (bindet die Anfrage an Ihr Wallet, sodass geleakte Anfragen Ihr Escrow nicht verbrennen können); die Antwort wird on-chain mit Quellenangaben an Ihre Adresse übertragen. Erfordert einen aktiven Fact-Oracle-Publisher – derzeit keiner aktiv, daher läuft der Aufruf in einen Timeout, bis sich ein Publisher registriert.

Konfiguration

Claude Desktop

Bearbeiten Sie ~/.config/claude/claude_desktop_config.json (Linux) oder ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "payperbyte": {
      "command": "npx",
      "args": ["-y", "byte-mcp-server"],
      "env": {
        "PRIVATE_KEY": "0x...",
        "RPC_URL": "https://sepolia-rollup.arbitrum.io/rpc",
        "INDEXER_URL": "http://localhost:8080"
      }
    }
  }
}

PRIVATE_KEY ist optional – die Lese-Werkzeuge funktionieren ohne ihn. Fügen Sie ihn hinzu, um Abonnieren, Veröffentlichen, Kaufen und Abfragen zu aktivieren.

Claude Code

claude mcp add payperbyte -- npx -y byte-mcp-server

Umgebungsvariablen

Variable

Erforderlich

Standard

Beschreibung

PRIVATE_KEY

nur für Schreib-/Kauf-/Abfrage-Werkzeuge

—

EOA-Schlüssel. Signiert echte USDC auf Base-Mainnet für byte_buy_data und Testnetz-Transaktionen für Abonnieren/Veröffentlichen/Abfragen – verwenden Sie ein dediziertes Wallet mit wenig Guthaben

RPC_URL

nein

https://sepolia-rollup.arbitrum.io/rpc

Arbitrum-SSepolia-RPC (die On-Chain-Lesen-/Abonnieren-Schicht)

INDEXER_URL

nein

https://feeds.payperbyte.io

PayPerByte-Indexer-API

BYTE_GATEWAY_URL

nein

https://x402.payperbyte.io

Basis-URL des x402-Gateways (verwendet von byte_buy_data)

BYTE_GATEWAY_ATTESTER

nein

aktueller Gateway-Attester (0xB48CCc9e3ab67041e3b5D09700138E45cda6AeA8, rotiert am 19.08.2026)

Attester-Adresse, gegen die byte_buy_data die Zustellquittung prüft. Wenn das Gateway rotiert, bevor dieses Paket aktualisiert ist, tragen Sie den neuen receipt.attester aus /.well-known/agent.json ein – ein veralteter Pin lässt Käufe nach der Zahlungsabwicklung fehlschlagen (fail-closed)

MAX_PAYMENT_USDC

nein

— (unbegrenzt)

Serverseitige Ausgabenobergrenze für byte_buy_data, als Dezimalwert in USDC (z. B. 0.25). Wenn gesetzt, wird jedes 402-Angebot über der Obergrenze vor der Signierung abgelehnt. Bei nicht erfolgt nicht gesetzt gilt keine Grenze/Obergrenze – ein dediziertes, nur gering gefülltes Wallet bleibt die letzte Absicherung

Hmm. There are a few mistakes/typos I want to fix:

  1. byte_publish_data row: "sendenn" should be "senden".

  2. In "EIP-712" I accidentally wrote "EIP-712" with period? No, it's fine.

  3. "developer" in the buy data row is wrong - should be "Facilitator".

  4. "Base-M-Maine" typo, should be "Base-Mainnet".

  5. RPC_URL "Arbitrum-SSepolia" typo, "Arbitrum Sepolia".

  6. "BYTE_GATEWAY_ATTESTER" address: I typed extra characters? The original: 0xB48CCe9e3a47e3b5D03... I need exact copy from input: 0xB48CCc9e3ab67041e3b5D09700138E45cda6AeA8. Let me copy precisely from user text: "0xB48CCc9e3ab67041e3b5D09? Hmm. Need to read precisely from the prompt. I'll scroll with memory: The original is: 0xB48CCc9e3ab67041e3b5D09700138E45cda6AeA8. I'll simply copy that string verbatim from the user's message.

Given I can't see the text here (chat window), but I must be verbatim. In my previous drafting there was a typo "cda8" possibly. Let me rely on my message: The user wrote:

| BYTE_GATEWAY_ATTESTER | no | current gateway attester (0xB48CCc9e3ab67041e3b5D09700138E45cda6eA8e8, rotated 2026-08-19) |

Yes I'll use exactly: 0xB48CCc9e3ab67041e3b5D09700138E45cda6AeA8. Let me embed that.

  1. "by does not work" in MAX_PAYMENT_USDC: "unset" should be "nicht gesetzt". I wrote "Bei nicht erfolgt" - fix to "wenn sie nicht gesetzt ist, gilt keine Obergrenze".

  2. "last: fallback" - Fine.

  3. byte_query_fact - "EIP-712" - keep.

  4. "v1 ausschließlich First-Party" – ok.

  5. "fee settles" – okay.

Let me also reconsider "byte_query_fact" "mit Slashing-Mechanismus" sounds odd. Let me choose "Stellen Sie einem stakebarem Fact-Oracle-Publisher einmal Frage" or as above. I'll go with "einem per Slashing absicherten Fact-Oracle-Publisher eine Frage" no. Let me choose: "Stellen Sie einem Fact-Oracle-Publisher unter Slashing-Häufigkeit eine Frage." Hmm.

Better: "Stellen Sie einem Fact-Oracle-Publisher, dessen Pfand durch Slashing geschützt ist, eine Frage." Wait, the slashing is a penalty, not protection. Slashrecht: "Publish" (the publisher) "slashable" (punishable). So: "einen Fact-Oracle-Publisher, der für Korrektheit haftet (Slashing)". Let me settle on:

"Stellen Sie einen Fact-Oracle-Publisher eine Frage, der haftbar für Fehlinformationen ist (Slashing)."

But "haftbar" has legal connotation. Hmm.

I think I'll write: "Stellen Sie einem Fact-Oracle-Publisher, dessen Einsatz mit Slashing hinterlegt ist, eine Frage." That's acceptable.

Actually simpler: "Stellen Sie einem Fact-Oracle-Publisher mit Slashing-Haftung eine Frage." This is clear.

Ok, use "mit Slashing-Haftung".

  1. The network: "by2015 minus" – fine.

Let me fix the final translation in my head and then output cleanly.

Also, for "latest Value" in table's first row, I wrote "nur für Schreib-/Kauf-/Abfrage-Werkzeuge" – Good.

Now, "DataStream" - keep. Actually in the original: "via DataStream" – in German "über DataStream" fine.

Also "Abo" vs "Abonnement" – fine.

Now "settle fee" - I'll write "begleicht die Gebühr in USDC". "begleicht" is formal.

Now "The slave's AS-OK" etc.

Let's compose again systematically.

Final German document:


Werkzeug

Beschreibung

byte_subscribe

Stream eines Publishers abonnieren. Bündelt automatisch USDC approve(max) ein, sofern skipAllowance: true gesetzt ist (behebt eine Stolperfalle bei stillen Zahlungsfehlern: Der Allowance-Überspringungspfad des Vertrags lieferte sonstagen Daten mit amount=0)

byte_unsubscribe

Abbestellen – wirkt im nächsten Block

byte_register_publisher

Als Daten-Publisher registrieren (Schema + On-Chain-Registrierung). v1 ist nur in der Form FirstParty (nur für ursprünglichen Betreiber) möglich; Stake = 0

byte_publish_data

Senden eines Payload an einen an ein Abonnee via a DataStream (Gebühr in USDC). Siehe Migrationshinweis oben zu rR2

Hmm, I wrote "senden of a payload" – Good: "Sendet einen Payload über den Stream an einen Subscriber" - I keep "Subscriber"?? German translation of subscriber = "Abonnent". I'll use "Teilnehmer"? Actually the verb "byte_publish" sends to a client. I'll use "Abonnenten" like before. Good.

Let me stick to the original sentence shapes.

Now I should output this cleanly.

Let me finalize in one pass. No more changes.

However note: the transmitted text had "S168" in line - let me ignore.

Below is the final answer in German. Ensure one blank line between sections.


Also I should not include any "Here is the translation:" preamble. Just the text. Given the final output should be only the translation.

Let me produce the final translated| Werkzeug | Beschreibung | | --- | --- | | byte_subscribe | Stream eines Publishers abonnieren. Bündelt automatisch USDC approve(max) ein, sofern skipAllowance: true gesetzt ist (behebt eine Stolperfalle bei stillen Zahlungsfehlern: Der Allowance-Überspringungspfad des Vertrags lieferte zuvor Daten mit amount=0) | | byte_unsubscribe | Abbestellen – wird im nächsten Block wirksam | | byte_register_publisher | Als Daten-Publisher registrieren (Schema + On-Chain-Registrierung). v1 ist ausschließlich First-Party; Stake = 0 | | byte_publish_data | Über DataStream einen Payload an einen Abonnenten senden (Gebühr wird in USDC beglichen). Siehe Migrationshinweis oben bezüglich r2 |

On-Demand-Kauf (erfordert PRIVATE_KEY)

Werkzeug

Beschreibung

byte_buy_data

Ein Paket über den x402-Gateway von einem Feed kaufen – echte USDC auf Base-Mainnet. Kein Abonnement, keine Allowance. Signiert against the 402-Challenge ein EIP-3009 transferWithAuthorization; die Facilitator wickelt On-Chain ab. Gibt die Daten + Transaktions-Hash inline zurück

byte_query_fact

Stellen Sie einem Fact-Oracle-Publisher, der bei Fehlverhalten geslasht wird, eine Frage. Signierte EIP-712-Anfrage (bindet die Anfrage an Ihr Wallet, damit durchgesickte Anfragen Ihr Escrow nicht verbrennen können); die Antwort wird mit Quellenangaben on- Chain an Ihre Adresse übertragen. Erfordert einen aktiven Fact-Oracle-Publisher – derzeit strahlt keiner aus, daher läuft der Aufruf in einen Timeout, bis sich einer registriert.

Konfiguration

Claude Desktop

Bearbeiten Sie ~/.config/claude/claude_desktop_config.json (Linux) oder ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "payperbyte": {
      "command": "npx",
      "args": ["-y", "byte-mcp-server"],
      "env": {
        "PRIVATE_KEY": "0x...",
        "RPC_URL": "https://sepolia-rollup.arbitrum.io/rpc",
        "INDEXER_URL": "http://localhost:8080"
      }
    }
  }
}

PRIVATE_KEY ist optional – schreibgeschützte Werkzeuge funktionieren auch ohne ihn. Fügen Sie ihn hinzu, um Abonnieren, Veröffentlichen, Kaufen und Abfragen zu aktivieren.

Claude Code

claude mcp add payperbyte -- npx -y byte-mcp-server

Umgebungsvariablen

Variable

Erforderlich

Standard

Beschreibung

PRIVATE_KEY

Nur für Schreib-/Kauf-/Abfrage-Werkzeuge

—

EOA-Schlüssel. Signiert echte USDC auf Base-Mainnet für byte_buy_data und Testnetz-Transaktionen für Abonnieren/Veröffentlichen/Abfragen – verwenden Sie ein dediziertes Wallet mit möglichst wenig Guthaben

RPC_URL

Nein

https://sepolia-rollup.arbitrum.io/rpc

Arbitrum-Sepolia-RPC (die On-Chain-Lese-/Abonnement-Schicht)

INDEXER_URL

Nein

https://feeds.payperbyte.io

PayPerByte-Indexer-API

BYTE_GATEWAY_URL

Nein

https://x402.payperbyte.io

Basis-URL des x402-Gateways (von byte_buy_data genutzt)

BYTE_GATEWAY_ATTESTER

Nein

aktueller Gateway-Attester (0xB48CC62b0e26e..., rotiert am 19.08.2026)

Attester-Adresse, gegen die byte_buy_data die Zustellquittung verankert. Wenn das Gateway rotiert, bevor dieses Paket aktualisiert ist, tragen Sie den neuen receipt.attester aus /.well-known/agent.json ein – ein veralteter Pin lässt Käufe nach der Zahlungsabwicklung fehlschlagen (fail-closed)

MAX_PAYMENT_USDC

Nein

— (ungekappt)

Serverseitige Ausgabenobergrenze für byte_buy_data in Dezimal-USDC (z. B. 0.25). Wenn gesetzt, wird jedes 402-Angebot über der Obergrenze vor dem Signieren abgelehnt; ungesetzt gibt es keine Obergrenze – ein dediziertes, abgeschriebenes Wallet bleibt die letzte harte Absicherung

Netzwerk

Zwei Schienen, offen benannt:

  • x402-Zahlungsschiene (byte_buy_data): Base-Mainnet (eip155:8453). Bezugte Feeds gleichen echte USDC über das Gateway unter x402.payperbyte.io ab; jede bezahlte 200er-Antwort liefert einen X-BYTE-Attestation-EIP-712-Beleg über die exakten Antwort-Bytes.

  • On-Chain-Schicht (Abonnements, Übertragungen, Fact-Oracle-Escrow, Indexer): Arbitrum Sepolia (Chain 421614). Mainnet für die BYTE Library-Verträge ist an ein externes Sicherheits-Audit gekoppelt. Die EIP-712 PayloadAttestation-Signaturdomain ist unabhängig von der Zahlungsschiene auf 421614 verankert.

Vertragsadressen sind in der mitgelieferten Konfiguration fest fixiert; das npm Release kommt mit sofort einsatzbereiten Standardwerten. Kein Token.

Entwicklung

git clone https://github.com/0rkz/byte-mcp-server.git
cd byte-mcp-server
npm install
npm run build && npm start

Lizenz

MIT – siehe LICENSE.

Starter-Kit

Optionales kostenpflichtiges Kit ($39): das Agent-Kit auf Käufer::Seite – ein Agent, der Feeds kauft und verifiziert, mit Drop-in-Konfiguration für Claude Desktop / Claude Code / Cursor und einem kostenlosen 30-minütigen Einweisungsgespräch. Die npm-Pakete sind und bleiben frei unter MIT – das Kit verkauft das zusammengestäte Setup.

Available Tools

15 tools
byte_buy_dataAInspect

Buy a single data packet from any PayPerByte feed via the x402 payment gateway. No subscription, no allowance, no prior on-chain setup — pay-per-call USDC settlement. The MCP server signs an EIP-3009 transferWithAuthorization on behalf of the wallet whose PRIVATE_KEY is configured, the x402 facilitator submits the tx, and the data comes back inline with the on-chain settlement tx hash. Use byte_subscribe instead if you want a continuous stream of broadcasts from a publisher. The catalog of available feed slugs lives at https://x402.payperbyte.io/feeds (free GET). GET data feeds (weather, earthquakes, …) need only feed; the 10 POST oracles — runtime-eol, threat-intel, address-reputation, pkg-verdict, sanctions-screen, reasoning-verdict, merchant-screen, positioning-snapshot, cctp-attestation-latency, regime-signal — additionally require a JSON body (the query) — supplying body switches this call to POST. Requires PRIVATE_KEY env var on the MCP server and USDC on the configured wallet. NOTE: paid feeds settle REAL USDC on Base mainnet (eip155:8453) — the exact price is quoted in the 402 challenge (flagship merchant-screen: $0.10/verdict, a pre-settlement counterparty screen — the signed EIP-712 attestation over the exact response bytes proves delivery, not that the verdict itself is correct). Use a dedicated wallet holding only what you intend to spend.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional JSON query body for POST oracles. Supplying it switches the call from GET to POST. Required by the verdict oracles, e.g. address-reputation {domain,address[,amount,chain]}, sanctions-screen {address|name}, pkg-verdict {ecosystem,package[,version]}, reasoning-verdict {subject}. Omit for GET data feeds (weather, earthquakes, …).
feedYesFeed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), merchant-screen ($0.100), positioning-snapshot ($0.030), cctp-attestation-latency ($0.010), regime-signal ($0.020). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoDecoded feed payload returned by the publisher
feedNoEchoed feed slug
paidNoTrue if an x402 payment was made (false on free/cached feeds)
errorNoError message if the buy failed
payerNoWallet that signed the EIP-3009 authorization
priceNoUSDC paid for this packet (e.g. '$0.003000'); omitted on free feeds
detailNoAdditional error detail, if any
statusNoHTTP status of the (post-payment) gateway response
txHashNox402 settlement transaction hash
verificationNoTwo-leg verify-before-act result: {gatewayVerified, hashMatch, signerMatch, recovered, attester, expired, deadline, checkedAt, embeddedAttestation, reason, note}. gatewayVerified=true means the GATEWAY delivered these exact bytes (signed by the pinned gateway attester) — it does NOT verify the per-feed publisher's embedded attestation (answer.attestation). When embeddedAttestation==='present', verify that leg before trusting the data (see note). expired=true means the receipt's EIP-712 deadline had already passed on arrival (deadline/checkedAt are UNIX-second strings); a freshly minted receipt cannot be expired, so that indicates a replayed/cached response or clock skew and the tool refuses (isError) even if the signature checks out.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses the real payment consequence ('pay-per-call USDC settlement'), the auth prerequisite (server signs EIP-3009 on behalf of the wallet whose PRIVATE_KEY is configured), the settlement flow via the x402 facilitator, and the inline response format: data plus the on-chain tx hash. It even states what is NOT needed (no subscription, no allowance, no prior on-chain setup). This is exactly the context annotations don't carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six dense sentences front-loaded with purpose and payment model, then mechanism, alternative, catalog URL, and usage rules in logical order. Every sentence carries distinct info, though the enumeration of the 10 POST oracles duplicates the schema's feed description — a mild redundancy rather than waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering idempotency/safety traits, the description fills all remaining gaps for a money-spending call: settlement mechanics, wallet/PRIVATE_KEY prerequisite, feed discovery URL, GET vs POST input rules, and explicit sibling routing. An agent has everything needed to invoke this tool correctly and understand what will happen.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both `feed` (with all 12 slugs and prices) and `body` (POST-oracle requirements) are already fully documented. The description restates the GET/POST switching rule and the oracle list in prose, adding marginal browsing value but no new meaning beyond the schema. Baseline 3 for high coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Buy a single data packet from any PayPerByte feed via the x402 payment gateway.' It explicitly differentiates from siblings by naming byte_subscribe ('continuous stream') and the feed schema names byte_query_fact for fact-oracle Q&A, so an agent can tell this purchase tool apart from subscription and query tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives exdirect when-to-use vs alternatives: 'Use byte_subscribe instead if you want a continuous stream of broadcasts from a publisher,' plus a schema note pointing to byte_query_fact for Q&A. It also tells the agent where to discover feed slugs (the free catalog GET) and exactly when to supply `body` — the GET feeds vs 10 POST oracles split.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_check_subscriptionA
Read-onlyIdempotent
Inspect

Check if an address is subscribed to a specific publisher on PayPerByte.

ParametersJSON Schema
NameRequiredDescriptionDefault
publisherYesPublisher Ethereum address (0x...)
subscriberYesSubscriber Ethereum address (0x...)

Output Schema

ParametersJSON Schema
NameRequiredDescription
subscribedYesTrue if the subscriber has an active subscription to the publisher

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description's lack of explicit safety caveat is acceptable. However, the description does not add behavioral context beyond the annotation: it doesn't mention response details (e.g., whether it returns boolean, subscription info), or if any edge cases (e.g., invalid addresses) exist. It adds minimal value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that clearly conveys the tool's purpose. It is front-loaded and has no unnecessary words or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two simple parameters, both documented, with a clear purpose), a single sentence is likely sufficient. The output schema exists, so return details are covered by that. However, the description could benefit from telling the agent whether the tool returns a boolean, status, or detailed subscription info, but that may be unnecessary given the output schema. It's minimally complete but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter has a clear description ('Subscriber Ethereum address', 'Publisher Ethereum address'). The tool description rephrases the parameters but doesn't add deeper semantic context (e.g., how these addresses are used, what format is expected beyond '0x...', or any relationship to the subscription). Since the schema already covers the parameters, the description adds little extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Check if an address is subscribed'), the specific resource (a subscription on PayPerByte), and the key entities (address and publisher). It distinguishes itself from siblings like byte_list_my_subscriptions (which lists current user's subscriptions) and byte_subscription_health (which likely assesses health).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description implies the tool is for checking a specific subscription status given an address and publisher, it does not provide explicit guidance on when to use this versus alternatives like byte_list_my_subscriptions, byte_subscription_health, or byte_get_token_balances. No exclusions or alternative suggestions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_get_network_statsA
Read-onlyIdempotent
Inspect

Get PayPerByte network-wide statistics: total publishers, messages streamed, and total subscriber fees settled in USDC.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
messagesNoTotal messages streamed all-time
publishersNoActive publisher count network-wide
totalSubscriberFeesUsdcNoTotal subscriber fees settled (USDC, decimal string)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate safe read-only, idempotent, non-destructive behavior. The description adds context about what statistics are returned (publishers, messages, fees), but does not disclose additional behaviors like pagination or latency. With annotation coverage, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads 'Get' and the resource name, then enumerates the specific statistics. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters and an output schema present, the description fully covers what the tool does. It clearly states the scope (network-wide) and the key data points (publishers, messages, fees), making it complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so the baseline is 4. The description adds no parameter information because none is needed; the schema fully covers the (empty) parameter set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and specific resource ('PayPerByte network-wide statistics') with concrete details (total publishers, messages streamed, USDC fees). This clearly distinguishes it from sibling tools that target individual publishers or specific data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for global network statistics versus publisher-specific tools like byte_get_publisher or byte_list_feeds, but it doesn't explicitly state when to use it or name alternatives. The context is clear but no exclusions or comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_get_publisherA
Read-onlyIdempotent
Inspect

Get on-chain info for a specific PayPerByte publisher: status, subscriber and message counts, USDC revenue, and the registered schema (size bounds, cadence, price-per-KB).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPublisher Ethereum address (0x...)

Output Schema

ParametersJSON Schema
NameRequiredDescription
schemaNoRegistered schema (topic, sizes, cadence, price)
statusNoOn-chain publisher status
addressYesPublisher Ethereum address
messagesNoTotal messages published
lastActiveNoUnix timestamp of last on-chain activity
revenueUsdcNoTotal USDC revenue (decimal string)
subscribersNoActive subscriber count
registeredAtNoUnix timestamp of publisher registration

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value by enumerating the exact data returned (status, counts, revenue, schema), giving context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with a clear verb and a parenthetical list of returned fields. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool with an output schema present, the description adequately covers the tool's function and output. The sibling context confirms its specific niche, and no critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage for the single 'address' parameter is 100%, and the schema already describes it as a 'Publisher Ethereum address (0x...)'. The description does not add new parameter-level meaning but is consistent with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get on-chain info for a specific PayPerByte publisher' with a detailed list of returned data. The verb 'Get' and resource 'specific PayPerByte publisher' distinguish it from sibling tools like byte_search_publishers or byte_list_feeds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a specific publisher but does not explicitly state when to use it over alternatives or mention exclusions. The phrase 'specific PayPerByte publisher' suggests this is for fetching details by address, but no direct comparison to sibling tools is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_get_token_balancesA
Read-onlyIdempotent
Inspect

Get USDC and ETH balances for an address on Arbitrum Sepolia (the on-chain testnet layer — MockUSDC settles subscriptions and fact-oracle queries there). Does NOT show the Base-mainnet USDC balance that byte_buy_data spends.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesEthereum address (0x...)

Output Schema

ParametersJSON Schema
NameRequiredDescription
ethNoETH balance (wei)
usdcNoUSDC balance (atomic, 6 decimals)
addressNoEchoed address

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond this, such as the testnet nature of Arbitrum Sepolia, the role of MockUSDC in settling subscriptions and fact-oracle queries, and the exclusion of Base-mainnet balances. This helps the agent understand the operational context and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: two sentences, with the main action front-loaded in the first sentence and critical clarification in the second. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and an existing output schema, this description is highly complete. It specifies the exact tokens, network, the address scope, and explicitly mentions what it does not include, providing sufficient context for correct tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage for the single 'address' parameter with a clear description ('Ethereum address (0x...)'). The tool description adds no additional parameter-specific information, so baseline 3 is appropriate since the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: getting USDC and ETH balances for an address on Arbitrum Sepolia. It specifically names the tokens and network, and distinguishes from sibling tool byte_buy_data by explicitly stating what it does NOT show, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when checking USDC/ETH balances on Arbitrum Sepolia, and it explicitly notes it does not show Base-mainnet USDC spent by byte_buy_data. This implies the alternative for Base-mainnet balances but does not explicitly say 'use byte_buy_data for that', so it is not a full when-to-use guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_list_feedsA
Read-onlyIdempotent
Inspect

List all active data feeds in the PayPerByte catalog with topics, price-per-KB, and frequency.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
feedsNoCatalog of active feeds

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds specific behavioral context by stating it returns active feeds with topics, price-per-KB, and frequency, which is meaningful beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is clear, front-loaded, and contains no unnecessary words. It efficiently communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, comprehensive annotations, and an existing output schema, the description is complete. It explains what the tool does and what data it provides, leaving no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so the description does not need to add parameter information. Schema description coverage is 100%. The description adds value by clarifying what the tool returns, meeting the baseline of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('active data feeds in the PayPerByte catalog'), and mentions what details are included ('topics, price-per-KB, and frequency'). It clearly distinguishes from siblings like byte_search_publishers and byte_list_my_subscriptions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for browsing the catalog but does not explicitly state when to use this tool versus alternatives. No direct guidance on exclusions or when-not-to-use is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_list_my_subscriptionsA
Read-onlyIdempotent
Inspect

List every active subscription for a given wallet address. Each entry has the publisher address, topic, status, when you subscribed, messages received in 7/30 days, USDC spent in 7/30 days, and the timestamp of the last message received. Use this to see what you're currently paying for and decide whether to unsubscribe.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexerUrlNoOptional indexer URL override (default: INDEXER_URL/BYTE_INDEXER_URL env or https://feeds.payperbyte.io)
subscriberYesWallet address to list subscriptions for

Output Schema

ParametersJSON Schema
NameRequiredDescription
subscriptionsNoActive subscriptions for the given wallet

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior. The description adds behavioral detail beyond annotations by explaining that it returns all active subscriptions with specific per-entry fields, and frames the operation as a read-only review activity. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: first the operation, then the exact output fields, then the intended use. Every sentence earns its place with no redundant phrasing or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list-type read-only tool with a rich output schema and complete annotations, this description is sufficient. It tells the agent what the tool returns, why it should be used, and provides enough context alongside the schema for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `subscriber` and `indexerUrl` are already documented in the schema. The description only reiterates that the wallet address is used to list subscriptions, adding little semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: 'List every active subscription for a given wallet address.' It precisely identifies the resource (subscriptions), the scope (active, per wallet), and even enumerates the returned fields. This clearly separates it from sibling tools like byte_check_subscription, which checks an individual subscription.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear when-to-use statement: 'Use this to see what you're currently paying for and decide whether to unsubscribe.' It does not explicitly mention alternative tools or exclusions, but the context is unambiguous for the primary use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_publish_dataA
Destructive
Inspect

Publish data to a subscriber via the PayPerByte DataStream contract. Hashes the payload, records size on-chain, and settles the fee in USDC. Requires PRIVATE_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesData payload to publish (will be hashed on-chain)
maxFeeYesMaximum fee in USDC willing to pay for this publish (e.g. 0.05)
subscriberYesSubscriber Ethereum address (0x...)

Output Schema

ParametersJSON Schema
NameRequiredDescription
txHashNoPublish transaction hash
successNoTrue if publish landed on-chain
payloadHashNokeccak256 of the payload as recorded on-chain
payloadSizeNoPayload size recorded on-chain (bytes)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by explaining what the action entails: 'Hashes the payload, records size on-chain, and settles the fee in USDC.' This is consistent with the destructiveHint and readOnlyHint in the annotations, and it discloses the side effects clearly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary action, and every sentence adds value. It is concise without excessive detail, making it easy for an agent to quickly grasp the tool's purpose and key behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a write operation with fee settlement), the description covers the essential behavioral aspects: hashing, on-chain recording, fee settlement, and the private key requirement. The presence of an output schema and full parameter descriptions fills the remaining gaps, making this reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the input schema, so the description does not need to add parameter-level details. The description's mention of hashing and settling fees partially clarifies the purpose of 'data' and 'maxFee', but does not significantly exceed what the schema already provides. Thus, baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Publish data to a subscriber via the PayPerByte DataStream contract.' This is a specific verb and resource that distinguishes it from sibling tools like 'subscribe' or 'buy_data'. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is used to publish data to a subscriber, but it does not explicitly state when to use it versus alternatives. It does mention a prerequisite ('Requires PRIVATE_KEY'), which provides some usage context, but there is no explicit guidance on when to prefer this tool over other byte_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_query_factAInspect

Query a PayPerByte fact-oracle publisher for a signed answer with citations. Posts the question to a registered fact-oracle publisher (topic='fact-oracle'), waits for the on-chain BroadcastStreamed response, and returns the answer plus structured citation URLs. The signed receipt proves which publisher produced the answer (provenance + tamper-evidence), NOT that the answer is correct — ground your output in the cited sources, not in a truth guarantee. Availability: this requires a registered fact-oracle publisher actively broadcasting; if none is live the call returns a timeout rather than an answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesThe factual question to ask (e.g. 'What was last night's Lakers vs Warriors score?'). Should be specific and verifiable.
topic_filterNoOptional topic filter (e.g. 'fact-oracle' default; future: 'sports', 'finance').
max_byte_costNoMax response payload bytes you're willing to pay for (defaults to 2000, ≈$1 at $0.0005/byte). Publisher refuses if can't fit answer.
min_publisher_pqsNoMinimum PQS to consider (BPS scale, 0-10000). 9000 = Elite-only, 7500 = Premium+.
subscriber_addressYesYour wallet address. You MUST be subscribed to the chosen publisher (with sufficient USDC escrow) or the publisher's on-chain broadcast will be skipped.
max_response_latency_msNoMax time to wait for the publisher's broadcast (default 30000 ms). Local-LLM publishers (Ollama + Searxng + 3-sample NLI gate) take ~30-60s; Anthropic + passthrough takes ~10-20s. Hard ceiling 180s.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message if the query failed (no eligible publisher, broadcast timeout, etc.)
answerNoPublisher's grounded answer to the question
citationsNoURLs/sources cited by the publisher in support of the answer
confidenceNoPublisher-reported confidence (0-1)
elapsed_msNoEnd-to-end time to obtain the answer (ms)
request_idNoRequest id binding the query to this answer
payload_hashNokeccak256 of the response payload
publisher_pqsNoPublisher quality score (PQS) at fulfillment
publisher_addressNoPublisher address that fulfilled the query
response_size_bytesNoSize of the response payload (bytes)
publisher_tx_or_statusNoDelivery status or settlement reference

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors: posts a question, waits for broadcast, returns answer + citations. Emphasizes that signed receipt proves provenance, not answer correctness. Also provides latency estimates. No contradiction with annotations (readOnlyHint=false, openWorldHint=true).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise yet comprehensive: 5-6 sentences covering purpose, process, caveats, and parameter specifics. No wasted words; front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 params, output schema exists), the description covers all essential aspects: what it does, how it works, caveats, parameter meanings, and publisher availability. Output schema presumably handles return values, so no gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even with 100% schema coverage, the description adds meaningful context for all parameters: question (specific/verifiable), topic_filter (default), max_byte_cost (cost estimation), min_publisher_pqs (BPS scale), subscriber_address (subscription requirement), max_response_latency_ms (typical times). Goes beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: query a fact-oracle publisher for a signed answer with citations. It distinguishes from sibling tools (e.g., searching publishers, subscribing) by focusing on the querying process.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (need a signed answer with citations) and prerequisites (must be subscribed to a publisher). Also explains caveats like availability and timeout, and mentions the proof vs. correctness distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_register_publisherA
Destructive
Inspect

Register as a data publisher on PayPerByte. Registers a schema and the publisher on-chain. Requires PRIVATE_KEY. PayPerByte v1 publishers are first-party and unstaked — leave stake at '0'; a non-zero USDC stake is approved to DataRegistry first if you choose to post one.

ParametersJSON Schema
NameRequiredDescriptionDefault
stakeYesUSDC reputation stake to post, as a decimal string. Default '0' — PayPerByte v1 publishers are unstaked.
topicYesData feed topic (e.g. 'eth-price', 'weather-nyc', 'gas-tracker')
maxSizeYesMaximum payload size in bytes per message
frequencyYesExpected publishing frequency in seconds
pricePerKBYesPrice per kilobyte in USDC (e.g. 0.003)
expectedSizeYesExpected payload size in bytes per message

Output Schema

ParametersJSON Schema
NameRequiredDescription
topicNoRegistered feed topic
txHashNoPublisher-registration transaction hash
successNoTrue if registration landed on-chain
publisherNoRegistered publisher address (the signer)
stakeUsdcNoUSDC stake posted (decimal string; '0' for v1 first-party)
schemaTxHashNoSchema-registration transaction hash
approveTxHashNoUSDC stake approval tx hash, if a non-zero stake was posted

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a destructive, non-read-only operation. The description adds important context: requires PRIVATE_KEY, registers on-chain, and explains the stake approval flow. This goes beyond what annotations provide and shows no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, front-loaded with the core purpose, and every sentence contributes new information. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a registration tool with six parameters and an output schema, the description covers the essential context: purpose, on-chain side effects, private key requirement, and stake behavior. It does not detail parameter relationships or prerequisites beyond stake, but remains complete enough for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All six parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description adds a little extra meaning, mainly reinforcing the stake parameter's default and approval step, but does not significantly compensate for any missing parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Register as a data publisher') and specifies that it 'Registers a schema and the publisher on-chain.' This is specific and distinguishes it from sibling tools like byte_publish_data or byte_subscribe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance for the stake parameter ('leave stake at 0') and notes the approval requirement for non-zero stakes, giving practical context. However, it does not explicitly name alternative tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_search_publishersA
Read-onlyIdempotent
Inspect

Search PayPerByte publishers by topic and sort order. Returns publisher addresses, topics, subscriber counts, message counts, and price-per-KB.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20)
queryNoTopic keyword to search (e.g. 'weather', 'crypto', 'cve')
sortByNoSort field: 'subscribers', 'revenue', 'messages'

Output Schema

ParametersJSON Schema
NameRequiredDescription
publishersNoMatching publishers, sorted by the requested field

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and side-effect transparency. The description adds concrete behavioral details about the return fields (addresses, topics, subscriber counts, message counts, price-per-KB) and the search/sort behavior, which is useful beyond the annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action and includes essential return information. Every word earns its place, with no redundancy or fluff. It is appropriately sized for a simple search tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 optional params, no required args, no nested objects) and the presence of an output schema (as per context signals), the description fully covers what the agent needs: what it searches, how results are ordered, and what fields are returned. The annotations and schema handle the rest. This is complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: all three parameters (limit, query, sortBy) have descriptions in the schema. The description adds no extra parameter meaning beyond what the schema already provides. The mention of 'topic' and 'sort order' mirrors the schema fields, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the exact action ('Search PayPerByte publishers') and scope ('by topic and sort order'), clearly distinguishing it from siblings like byte_get_publisher (likely single publisher lookup) and byte_list_feeds (listing feeds). The verb 'Search' plus the explicit resource and modifiers makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when searching publishers by topic with sort/limit options. It does not explicitly mention alternatives or exclusions, though the sibling tool names provide context. Without explicit 'when to use vs. alternatives' guidance, it falls at the 'implied usage' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_subscribeAInspect

Subscribe to a PayPerByte publisher's data feed. By default also sets USDC allowance to DataStreamLib to type(uint256).max so the subscription doesn't silently lose payments when allowance depletes (the contract's allowance-skip path emits DataStreamed with amount=0 on transferFrom failure rather than reverting). Pass skipAllowance: true to opt out and set a finite cap manually. Requires PRIVATE_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
publisherYesPublisher Ethereum address (0x...) to subscribe to
skipAllowanceNoIf true, don't bundle the USDC approve(max) call. Default false. Auto-approve is also skipped when the wallet already has ≥ $1000 USDC of allowance to DataStreamLib.

Output Schema

ParametersJSON Schema
NameRequiredDescription
txHashNoSubscribe transaction hash
successNoTrue if subscribe landed on-chain
publisherNoPublisher subscribed to
allowanceTxHashNoUSDC approve(max) transaction hash, if bundled

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations (readOnlyHint=false, destructiveHint=false) by detailing the default USDC allowance behavior, the allowance-skip path with its silent payment loss mitigation, the `skipAllowance` opt-out, and the PRIVATE_KEY requirement. It also explains the contract's transferFrom failure behavior, providing deep behavioral insight that helps the agent predict side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and front-loaded with the main purpose. Each subsequent sentence adds distinct value: the allowance default, the skipAllowance option, and the PRIVATE_KEY requirement. While it is a bit dense with technical details, it is appropriately sized for the complexity and does not contain redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and the moderate complexity of the tool, the description covers all essential aspects: what the tool does, the default allowance behavior, the opt-out path, and a critical requirement (PRIVATE_KEY). It doesn't need to describe return values because the output schema exists, and it provides enough context for an agent to select and invoke the tool correctly without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the `publisher` and `skipAllowance` parameters with 100% coverage. The description adds a small but useful nuance: 'Pass skipAllowance: true to opt out and set a finite cap manually.' This adds a new semantic (finite cap) not explicitly mentioned in the schema, slightly enhancing the parameter understanding. Given the high schema coverage, a score of 4 is appropriate for the extra value added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Subscribe to a PayPerByte publisher's data feed.' It uses a specific verb ('Subscribe') and resource ('data feed'), and it adds the key behavior of setting an allowance, which distinguishes it from sibling tools like byte_buy_data or byte_unsubscribe. The scope is unambiguous and aligns with the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context for when to use the tool (when you want to subscribe to a data feed), but it does not explicitly mention alternatives or when-not-to-use cases. It does explain the `skipAllowance` option, which is a parameter-level guideline, but there is no explicit comparison to sibling tools like byte_buy_data or byte_list_my_subscriptions. This is implied rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_subscription_healthA
Read-onlyIdempotent
Inspect

Get the content-drift signal for a publisher. Compares their last 7 days of publishing activity (cadence, message count) against their 23-day baseline (days 8-30). Returns 'stable' (steady publishing), 'moderate' (20-50% cadence shift or 24-48h silence), 'significant' (>50% shift or >48h silence), or 'unknown' (new publisher, insufficient baseline). Use this to detect when a publisher you subscribe to has pivoted content or gone dormant.

ParametersJSON Schema
NameRequiredDescriptionDefault
publisherYesPublisher address to check
indexerUrlNoOptional indexer URL override

Output Schema

ParametersJSON Schema
NameRequiredDescription
signalNoContent-drift bucket for the publisher
publisherNoPublisher address checked
messages7dNoMessages in the last 7 days
messages30dNoMessages in the last 30 days
messages_7dNoMessages in the last 7 days (indexer key)
messages_30dNoMessages in the last 30 days (indexer key)
silence_hoursNoHours since the last message (null if never)
volume_ratio_bpsNo7d/baseline volume ratio (bps)
cadence_drift_bpsNoCadence drift vs 23-day baseline (bps)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the readOnly/idempotent annotations by explaining the exact comparison windows (7 days vs 23-day baseline), the thresholds for each return value, and the edge case 'unknown' for new publishers. No contradictions with annotations; the description and annotations agree this is a read-only, idempotent operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: one for purpose, one for algorithm and returns, one for usage. Every sentence carries necessary information and there is no redundancy. The most distinguishing content (signal categories and thresholds) is compactly and clearly presented.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present for return values, the description still adds the algorithmic context, threshold meanings, and intended use-case. It covers the edge cases (new publisher, insufficient baseline) and enough operational detail that an agent can select and invoke the tool correctly without further clarification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: publisher and indexerUrl already have clear descriptions in the schema. The description adds only contextual flavor ('a publisher you subscribe to') without introducing new parameter meaning, syntax, or format details, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get the content-drift signal for a publisher.' It further distinguishes itself from siblings by describing a unique comparison of recent activity against a baseline and enumerating the exact signal categories. The use case ('detect when a publisher you subscribe to has pivoted content or gone dormant') makes the tool's role in the sibling set unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context with 'Use this to detect when a publisher you subscribe to has pivoted content or gone dormant.' It does not explicitly name sibling alternatives or state when not to use it, such as versus byte_check_subscription for plain subscription status, so it stops short of full exclusionary routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_unsubscribeAInspect

Unsubscribe from a publisher's data feed. Takes effect next block: no more billing, no more data flow. Reversible — you can resubscribe later via byte_subscribe. Use this when a publisher has pivoted content (check with byte_subscription_health first) or when you simply don't want the feed anymore. Requires PRIVATE_KEY for the connected wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
publisherYesPublisher address to unsubscribe from

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoReceipt status ('success' | 'reverted')
txHashNoUnsubscribe transaction hash
publisherNoPublisher unsubscribed from
subscriberNoSubscriber address (the signer)
blockNumberNoBlock number the tx landed in

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it discloses the timing effect ('next block'), the consequences ('no more billing, no more data flow'), reversibility, and the authentication requirement (PRIVATE_KEY). This complements the annotations (readOnlyHint=false, destructiveHint=false) without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main action, then adds key details in just three sentences. Every sentence provides essential information—purpose, effects, reversibility, use case, and auth—without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with good annotations and an output schema, the description fully covers the lifecycle: when to use, what happens, reversibility, and prerequisites. There are no critical gaps; it elegantly combines purpose, usage, and technical effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the parameter described as 'Publisher address to unsubscribe from,' which is clear. The description doesn't add extra parameter semantics, but the baseline for full schema coverage is a 3, and the description's mention of 'publisher' aligns with the schema. No additional insight needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Unsubscribe from a publisher's data feed.' It uses a specific verb and resource, and distinguishes itself from sibling tools by immediately referencing the reverse operation (byte_subscribe) and the health check tool (byte_subscription_health).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use: 'when a publisher has pivoted content... or when you simply don't want the feed anymore.' It also names alternatives like checking byte_subscription_health first and resubscribing via byte_subscribe, giving clear guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

byte_verify_payloadA
Read-onlyIdempotent
Inspect

Verify-before-act: confirm a data payload an agent is about to act on actually matches what the publisher cryptographically attested to on-chain. Recomputes keccak256 of the received bytes and compares it to the on-chain EIP-712 PayloadAttestation hash. ALWAYS call this on BYTE-sourced data before acting on it; if verified=false the bytes were tampered/corrupted in transit and MUST NOT be used. Anchor the check with EITHER expectedHash (an on-chain payloadHash you already hold, e.g. from byte_query_fact / byte_buy_data) OR txHash (the settlement tx — also recovers the attestation signer and confirms it is the named publisher). Read-only; no wallet or payment required.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe exact payload bytes the agent received and is about to act on — the raw delivered string, or a 0x-prefixed hex byte string.
txHashNoSettlement tx hash whose on-chain BroadcastStreamed attestation to verify against. When provided, also recovers the EIP-712 signer and confirms it is the attesting publisher.
hashModeNoHow to hash structured payloads: 'raw' (keccak of the utf8 string, default — matches byte_publish_data) or 'canonical' (keccak of key-sorted, whitespace-free JSON).
expectedHashNoOn-chain payloadHash to verify against (0x + 64 hex), e.g. the payloadHash returned by byte_query_fact or byte_buy_data.

Output Schema

ParametersJSON Schema
NameRequiredDescription
reasonYesHuman-readable verdict an agent can surface when it acts or refuses
signerNoRecovered EIP-712 attestation signer (txHash mode)
sourceNoWhich anchor was used: 'txHash' or 'expectedHash'
txHashNoSettlement tx hash verified against (txHash mode)
expiredNoWhether the attestation's EIP-712 deadline has passed at check time — the same rule the contract enforces (block.timestamp > deadline). txHash mode only; absent in expectedHash mode, which carries no deadline. NOT folded into `verified`: the chain refuses to emit an already-expired attestation, so every historical settlement reads expired=true as a matter of course, and refusing those would break provenance audits without proving anything. verified answers 'did the publisher sign exactly these bytes'; expired answers 'is that attestation still inside its validity window'. If you need freshness, require verified && !expired.
deadlineNoAttestation deadline as UNIX seconds (decimal string) — txHash mode only
verifiedYesTrue only if the recomputed hash matches the on-chain attested hash AND (when a signer was recovered) the signer is the publisher. If false: do NOT act on the data.
checkedAtNoWall-clock time the expiry comparison was made, UNIX seconds (decimal string)
hashMatchYesWhether the recomputed hash equals the on-chain hash
blockNumberNoBlock number of the settlement tx (txHash mode)
onChainHashYesThe on-chain attested payloadHash compared against
signerMatchNoWhether the recovered signer is the attesting publisher
recomputedHashYeskeccak256 of the received bytes
attestingPublisherNoPublisher named in the on-chain event (txHash mode)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint/idempotentHint annotations by explaining the exact mechanism (recompute keccak256 and compare to EIP-712 PayloadAttestation hash), the signer-recovery behavior when txHash is provided, and the operational consequence of verified=false. It also states 'Read-only; no wallet or payment required,' adding auth/context value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense. It front-loads the core purpose with 'Verify-before-act', immediately states the critical safety rule, then supplies anchoring options and read-only status. Each sentence contributes distinct value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers the full lifecycle: what it does, when it must be used, both verification modes, failure semantics, and read-only/auth implications. The presence of an output schema means return-value details are already handled, so the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful usage semantics beyond the schema: expectedHash is sourced from byte_query_fact/byte_buy_data, txHash recovers the attestation signer, and hashMode 'raw' matches byte_publish_data. This enriches parameter understanding without duplicating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: verify a data payload against an on-chain attestation hash. It clearly distinguishes this from sibling tools by framing it as the verify-before-act counterpart to publish/query/buy data operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call the tool ('ALWAYS call this on BYTE-sourced data before acting on it'), what to do on failure ('if verified=false the bytes were tampered/corrupted... MUST NOT be used'), and how to anchor the check with either expectedHash or txHash. This is strong, actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.11.13
    • Changedbyte_buy_data1 field changed
      • changedInput schema / properties / feed / description
        Previous value: -"Feed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), merchant-screen ($0.100), positioning-snapshot ($0.030). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"New value: +"Feed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), merchant-screen ($0.100), positioning-snapshot ($0.030), cctp-attestation-latency ($0.010), regime-signal ($0.020). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"
    • Changedbyte_list_my_subscriptions6 fields changed
      • removedOutput schema / properties / subscriptions / items / properties / lastMessageAt / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "type": "number"
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / subscriptions / items / properties / lastMessageAt / type
        Added value: +[
        +  "number",
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / subscriptions / items / properties / status / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "number"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / subscriptions / items / properties / status / type
        Added value: +[
        +  "string",
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / subscriptions / items / properties / subscribedAt / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "type": "number"
        -      },
        -      {
        -        "type": "string"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / subscriptions / items / properties / subscribedAt / type
        Added value: +[
        +  "number",
        +  "string",
        +  "null"
        +]
    • Changedbyte_subscription_health14 fields changed
      • removedOutput schema / properties / cadence_drift_bps / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / cadence_drift_bps / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / messages30d / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages30d / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / messages7d / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages7d / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / messages_30d / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages_30d / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / messages_7d / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / messages_7d / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / silence_hours / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / silence_hours / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / volume_ratio_bps / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / volume_ratio_bps / type
        Added value: +[
        +  "number",
        +  "null"
        +]
  2. 5 tool updatesv0.11.12
    • Changedbyte_buy_data2 fields changed
      • changedInput schema / properties / feed / description
        Previous value: -"Feed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), evidence-pack ($0.100), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), liquidation-stream ($0.030), positioning-snapshot ($0.030). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"New value: +"Feed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), merchant-screen ($0.100), positioning-snapshot ($0.030). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"
      • changedOutput schema / properties / verification / description
        Previous value: -"Two-leg verify-before-act result: {gatewayVerified, hashMatch, signerMatch, recovered, attester, embeddedAttestation, reason, note}. gatewayVerified=true means the GATEWAY delivered these exact bytes (signed by the pinned gateway attester) — it does NOT verify the per-feed publisher's embedded attestation (answer.attestation). When embeddedAttestation==='present', verify that leg before trusting the data (see note)."New value: +"Two-leg verify-before-act result: {gatewayVerified, hashMatch, signerMatch, recovered, attester, expired, deadline, checkedAt, embeddedAttestation, reason, note}. gatewayVerified=true means the GATEWAY delivered these exact bytes (signed by the pinned gateway attester) — it does NOT verify the per-feed publisher's embedded attestation (answer.attestation). When embeddedAttestation==='present', verify that leg before trusting the data (see note). expired=true means the receipt's EIP-712 deadline had already passed on arrival (deadline/checkedAt are UNIX-second strings); a freshly minted receipt cannot be expired, so that indicates a replayed/cached response or clock skew and the tool refuses (isError) even if the signature checks out."
    • Addedbyte_check_subscription
    • Addedbyte_publish_data
    • Addedbyte_register_publisher
    • Changedbyte_verify_payload3 fields changed
      • addedOutput schema / properties / checkedAt
        Added value: +{
        +  "description": "Wall-clock time the expiry comparison was made, UNIX seconds (decimal string)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / deadline
        Added value: +{
        +  "description": "Attestation deadline as UNIX seconds (decimal string) — txHash mode only",
        +  "type": "string"
        +}
      • addedOutput schema / properties / expired
        Added value: +{
        +  "description": "Whether the attestation's EIP-712 deadline has passed at check time — the same rule the contract enforces (block.timestamp > deadline). txHash mode only; absent in expectedHash mode, which carries no deadline. NOT folded into `verified`: the chain refuses to emit an already-expired attestation, so every historical settlement reads expired=true as a matter of course, and refusing those would break provenance audits without proving anything. verified answers 'did the publisher sign exactly these bytes'; expired answers 'is that attestation still inside its validity window'. If you need freshness, require verified && !expired.",
        +  "type": "boolean"
        +}
  3. 4 tool updatesv0.11.11
    • Changedbyte_buy_data4 fields changed
      • addedInput schema / properties / body
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Optional JSON query body for POST oracles. Supplying it switches the call from GET to POST. Required by the verdict oracles, e.g. address-reputation {domain,address[,amount,chain]}, sanctions-screen {address|name}, pkg-verdict {ecosystem,package[,version]}, reasoning-verdict {subject}. Omit for GET data feeds (weather, earthquakes, …).",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / feed / description
        Previous value: -"Feed slug — one of: defi-yields ($0.030), weather ($0.0050), earthquakes ($0.0030), space-weather ($0.0030), news-feed ($0.010), code-pulse ($0.020), runtime-eol ($0.020), threat-intel ($0.050), x402-pulse ($0.010), stablecoin-rails ($0.030), perp-funding ($0.020), usc-statute ($0.050), evidence-pack ($0.020), address-reputation ($0.050), pkg-verdict ($0.050), sanctions-screen ($0.050), reasoning-verdict ($0.050), liquidation-stream ($0.030), positioning-snapshot ($0.030), agent-compute ($0.050), agent-memory ($0.050), agent-tools ($0.050). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"New value: +"Feed slug — one of: weather ($0.0050), earthquakes ($0.0030), runtime-eol ($0.020), threat-intel ($0.050), evidence-pack ($0.100), address-reputation ($0.100), pkg-verdict ($0.100), sanctions-screen ($0.100), reasoning-verdict ($0.100), liquidation-stream ($0.030), positioning-snapshot ($0.030). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"
      • changedOutput schema / properties / price / description
        Previous value: -"USDC paid for this packet (e.g. '$0.001000'); omitted on free feeds"New value: +"USDC paid for this packet (e.g. '$0.003000'); omitted on free feeds"
      • addedOutput schema / properties / verification
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Two-leg verify-before-act result: {gatewayVerified, hashMatch, signerMatch, recovered, attester, embeddedAttestation, reason, note}. gatewayVerified=true means the GATEWAY delivered these exact bytes (signed by the pinned gateway attester) — it does NOT verify the per-feed publisher's embedded attestation (answer.attestation). When embeddedAttestation==='present', verify that leg before trusting the data (see note).",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Removedbyte_check_subscription
    • Removedbyte_publish_data
    • Removedbyte_register_publisher
  4. 1 tool updatev0.10.9
    • Changedbyte_buy_data1 field changed
      • changedInput schema / properties / feed / description
        Previous value: -"Feed slug — one of: defi-yields ($0.049), weather ($0.021), earthquakes ($0.0015), space-weather ($0.0024), news-feed ($0.0063), code-pulse ($0.010), runtime-eol ($0.069), threat-intel ($0.026), x402-pulse ($0.015), stablecoin-rails ($0.020), perp-funding ($0.0073), usc-statute ($0.012), evidence-pack ($0.100), address-reputation ($0.050), pkg-verdict ($0.050), sanctions-screen ($0.050), liquidation-stream ($0.0079), positioning-snapshot ($0.037). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"New value: +"Feed slug — one of: defi-yields ($0.030), weather ($0.0050), earthquakes ($0.0030), space-weather ($0.0030), news-feed ($0.010), code-pulse ($0.020), runtime-eol ($0.020), threat-intel ($0.050), x402-pulse ($0.010), stablecoin-rails ($0.030), perp-funding ($0.020), usc-statute ($0.050), evidence-pack ($0.020), address-reputation ($0.050), pkg-verdict ($0.050), sanctions-screen ($0.050), reasoning-verdict ($0.050), liquidation-stream ($0.030), positioning-snapshot ($0.030), agent-compute ($0.050), agent-memory ($0.050), agent-tools ($0.050). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"
  5. 1 tool updatev0.10.8
    • Changedbyte_buy_data1 field changed
      • changedInput schema / properties / feed / description
        Previous value: -"Feed slug — one of: weather, earthquakes, space-weather, news-feed, code-pulse, runtime-eol, threat-intel, btc-metrics, pkg-facts, cve-facts, wiki-facts, merchant-trust, crypto-top100, defi-yields, byte-status. (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"New value: +"Feed slug — one of: defi-yields ($0.049), weather ($0.021), earthquakes ($0.0015), space-weather ($0.0024), news-feed ($0.0063), code-pulse ($0.010), runtime-eol ($0.069), threat-intel ($0.026), x402-pulse ($0.015), stablecoin-rails ($0.020), perp-funding ($0.0073), usc-statute ($0.012), evidence-pack ($0.100), address-reputation ($0.050), pkg-verdict ($0.050), sanctions-screen ($0.050), liquidation-stream ($0.0079), positioning-snapshot ($0.037). Full catalog: https://x402.payperbyte.io/feeds (free GET). (For fact-oracle Q&A use byte_query_fact instead — it uses a different request-response flow.)"
  6. 12 tool updatesv0.10.7
    • Changedbyte_buy_data8 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedOutput schema / properties / detail
        Added value: +{
        +  "description": "Additional error detail, if any",
        +  "type": "string"
        +}
      • addedOutput schema / properties / paid
        Added value: +{
        +  "description": "True if an x402 payment was made (false on free/cached feeds)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / payer
        Added value: +{
        +  "description": "Wallet that signed the EIP-3009 authorization",
        +  "type": "string"
        +}
      • removedOutput schema / properties / payloadHash
        Removed value: -{
        -  "description": "keccak256 of the response payload",
        -  "type": "string"
        -}
      • addedOutput schema / properties / price
        Added value: +{
        +  "description": "USDC paid for this packet (e.g. '$0.001000'); omitted on free feeds",
        +  "type": "string"
        +}
      • removedOutput schema / properties / pricePaid
        Removed value: -{
        -  "description": "USDC paid for this packet (atomic)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "HTTP status of the (post-payment) gateway response",
        +  "type": "number"
        +}
    • Changedbyte_get_network_stats6 fields changed
      • addedOutput schema / properties / messages
        Added value: +{
        +  "description": "Total messages streamed all-time",
        +  "type": "number"
        +}
      • addedOutput schema / properties / publishers
        Added value: +{
        +  "description": "Active publisher count network-wide",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalMessages
        Removed value: -{
        -  "description": "Total messages streamed all-time",
        -  "type": "number"
        -}
      • removedOutput schema / properties / totalPublishers
        Removed value: -{
        -  "description": "Active publisher count network-wide",
        -  "type": "number"
        -}
      • removedOutput schema / properties / totalSubscriberFees
        Removed value: -{
        -  "description": "Total subscriber fees settled (USDC atomic)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / totalSubscriberFeesUsdc
        Added value: +{
        +  "description": "Total subscriber fees settled (USDC, decimal string)",
        +  "type": "string"
        +}
    • Changedbyte_get_publisher4 fields changed
      • addedOutput schema / properties / lastActive
        Added value: +{
        +  "description": "Unix timestamp of last on-chain activity",
        +  "type": "number"
        +}
      • addedOutput schema / properties / registeredAt
        Added value: +{
        +  "description": "Unix timestamp of publisher registration",
        +  "type": "number"
        +}
      • removedOutput schema / properties / revenue
        Removed value: -{
        -  "description": "Total USDC revenue (atomic)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / revenueUsdc
        Added value: +{
        +  "description": "Total USDC revenue (decimal string)",
        +  "type": "string"
        +}
    • Changedbyte_list_feeds5 fields changed
      • changedOutput schema / properties / feeds / items / properties / pricePerKB / description
        Previous value: -"Price per KB in USDC"New value: +"Price per KB in USDC (decimal string)"
      • changedOutput schema / properties / feeds / items / properties / pricePerKB / type
        Previous value: -"number"New value: +"string"
      • addedOutput schema / properties / feeds / items / properties / publisher
        Added value: +{
        +  "description": "Publisher address for the feed",
        +  "type": "string"
        +}
      • removedOutput schema / properties / feeds / items / properties / slug
        Removed value: -{
        -  "description": "Feed slug used in x402 routes",
        -  "type": "string"
        -}
      • removedOutput schema / properties / feeds / items / properties / status
        Removed value: -{
        -  "description": "Feed status",
        -  "type": "string"
        -}
    • Changedbyte_list_my_subscriptions12 fields changed
      • changedInput schema / properties / indexerUrl / description
        Previous value: -"Optional indexer URL override (default: BYTE_INDEXER_URL env or http://localhost:8080)"New value: +"Optional indexer URL override (default: INDEXER_URL/BYTE_INDEXER_URL env or https://feeds.payperbyte.io)"
      • addedOutput schema / properties / subscriptions / items / properties / lastMessageAt / anyOf
        Added value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "string"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / subscriptions / items / properties / lastMessageAt / type
        Removed value: -"number"
      • addedOutput schema / properties / subscriptions / items / properties / spend30dUsdc
        Added value: +{
        +  "description": "USDC spent in last 30 days (decimal string)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / subscriptions / items / properties / spend7dUsdc
        Added value: +{
        +  "description": "USDC spent in last 7 days (decimal string)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / subscriptions / items / properties / spent30d
        Removed value: -{
        -  "description": "USDC spent in last 30 days (atomic)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / subscriptions / items / properties / spent7d
        Removed value: -{
        -  "description": "USDC spent in last 7 days (atomic)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / subscriptions / items / properties / status / anyOf
        Added value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / subscriptions / items / properties / status / description
        Previous value: -"Subscription status"New value: +"Subscription status (string label or numeric code)"
      • removedOutput schema / properties / subscriptions / items / properties / status / type
        Removed value: -"string"
      • addedOutput schema / properties / subscriptions / items / properties / subscribedAt / anyOf
        Added value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "type": "number"
        +      },
        +      {
        +        "type": "string"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / subscriptions / items / properties / subscribedAt / type
        Removed value: -"number"
    • Changedbyte_publish_data3 fields changed
      • removedOutput schema / properties / error
        Removed value: -{
        -  "description": "Error message if the operation failed",
        -  "type": "string"
        -}
      • removedOutput schema / properties / feePaid
        Removed value: -{
        -  "description": "Actual USDC fee paid (atomic)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / payloadSize
        Added value: +{
        +  "description": "Payload size recorded on-chain (bytes)",
        +  "type": "number"
        +}
    • Changedbyte_query_fact15 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • changedOutput schema / properties / citations / description
        Previous value: -"URLs cited by the publisher in support of the answer"New value: +"URLs/sources cited by the publisher in support of the answer"
      • removedOutput schema / properties / citations / items / type
        Removed value: -"string"
      • addedOutput schema / properties / confidence
        Added value: +{
        +  "description": "Publisher-reported confidence (0-1)",
        +  "type": "number"
        +}
      • addedOutput schema / properties / elapsed_ms
        Added value: +{
        +  "description": "End-to-end time to obtain the answer (ms)",
        +  "type": "number"
        +}
      • removedOutput schema / properties / feePaid
        Removed value: -{
        -  "description": "USDC fee paid for the broadcast (atomic)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / payloadHash
        Removed value: -{
        -  "description": "keccak256 of the response payload",
        -  "type": "string"
        -}
      • addedOutput schema / properties / payload_hash
        Added value: +{
        +  "description": "keccak256 of the response payload",
        +  "type": "string"
        +}
      • removedOutput schema / properties / publisher
        Removed value: -{
        -  "description": "Publisher address that fulfilled the query",
        -  "type": "string"
        -}
      • addedOutput schema / properties / publisher_address
        Added value: +{
        +  "description": "Publisher address that fulfilled the query",
        +  "type": "string"
        +}
      • addedOutput schema / properties / publisher_pqs
        Added value: +{
        +  "description": "Publisher quality score (PQS) at fulfillment",
        +  "type": "number"
        +}
      • addedOutput schema / properties / publisher_tx_or_status
        Added value: +{
        +  "description": "Delivery status or settlement reference",
        +  "type": "string"
        +}
      • addedOutput schema / properties / request_id
        Added value: +{
        +  "description": "Request id binding the query to this answer",
        +  "type": "string"
        +}
      • addedOutput schema / properties / response_size_bytes
        Added value: +{
        +  "description": "Size of the response payload (bytes)",
        +  "type": "number"
        +}
      • removedOutput schema / properties / txHash
        Removed value: -{
        -  "description": "BroadcastStreamed transaction hash",
        -  "type": "string"
        -}
    • Changedbyte_register_publisher8 fields changed
      • addedOutput schema / properties / approveTxHash
        Added value: +{
        +  "description": "USDC stake approval tx hash, if a non-zero stake was posted",
        +  "type": "string"
        +}
      • removedOutput schema / properties / error
        Removed value: -{
        -  "description": "Error message if the operation failed",
        -  "type": "string"
        -}
      • addedOutput schema / properties / publisher
        Added value: +{
        +  "description": "Registered publisher address (the signer)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / publisherAddress
        Removed value: -{
        -  "description": "Registered publisher address (the signer)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / schemaTxHash
        Added value: +{
        +  "description": "Schema-registration transaction hash",
        +  "type": "string"
        +}
      • addedOutput schema / properties / stakeUsdc
        Added value: +{
        +  "description": "USDC stake posted (decimal string; '0' for v1 first-party)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / topic
        Added value: +{
        +  "description": "Registered feed topic",
        +  "type": "string"
        +}
      • changedOutput schema / properties / txHash / description
        Previous value: -"Register transaction hash"New value: +"Publisher-registration transaction hash"
    • Changedbyte_subscribe6 fields changed
      • addedOutput schema / properties / allowanceTxHash
        Added value: +{
        +  "description": "USDC approve(max) transaction hash, if bundled",
        +  "type": "string"
        +}
      • removedOutput schema / properties / approveTx
        Removed value: -{
        -  "description": "USDC approve(max) transaction hash, if bundled",
        -  "type": "string"
        -}
      • removedOutput schema / properties / error
        Removed value: -{
        -  "description": "Error message if the operation failed",
        -  "type": "string"
        -}
      • addedOutput schema / properties / publisher
        Added value: +{
        +  "description": "Publisher subscribed to",
        +  "type": "string"
        +}
      • removedOutput schema / properties / subscribeTx
        Removed value: -{
        -  "description": "Subscribe transaction hash",
        -  "type": "string"
        -}
      • addedOutput schema / properties / txHash
        Added value: +{
        +  "description": "Subscribe transaction hash",
        +  "type": "string"
        +}
    • Changedbyte_subscription_health12 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedOutput schema / properties / cadence_drift_bps
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Cadence drift vs 23-day baseline (bps)"
        +}
      • removedOutput schema / properties / details
        Removed value: -{
        -  "description": "Underlying counts, cadence ratios, and last-message timestamp"
        -}
      • addedOutput schema / properties / messages30d
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Messages in the last 30 days"
        +}
      • addedOutput schema / properties / messages7d
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Messages in the last 7 days"
        +}
      • addedOutput schema / properties / messages_30d
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Messages in the last 30 days (indexer key)"
        +}
      • addedOutput schema / properties / messages_7d
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Messages in the last 7 days (indexer key)"
        +}
      • addedOutput schema / properties / publisher
        Added value: +{
        +  "description": "Publisher address checked",
        +  "type": "string"
        +}
      • addedOutput schema / properties / signal
        Added value: +{
        +  "description": "Content-drift bucket for the publisher",
        +  "enum": [
        +    "stable",
        +    "moderate",
        +    "significant",
        +    "unknown"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / silence_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Hours since the last message (null if never)"
        +}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Content-drift bucket for the publisher",
        -  "enum": [
        -    "stable",
        -    "moderate",
        -    "significant",
        -    "unknown"
        -  ],
        -  "type": "string"
        -}
      • addedOutput schema / properties / volume_ratio_bps
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "7d/baseline volume ratio (bps)"
        +}
    • Changedbyte_unsubscribe6 fields changed
      • addedOutput schema / properties / blockNumber
        Added value: +{
        +  "description": "Block number the tx landed in",
        +  "type": "string"
        +}
      • removedOutput schema / properties / error
        Removed value: -{
        -  "description": "Error message if the operation failed",
        -  "type": "string"
        -}
      • addedOutput schema / properties / publisher
        Added value: +{
        +  "description": "Publisher unsubscribed from",
        +  "type": "string"
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "Receipt status ('success' | 'reverted')",
        +  "type": "string"
        +}
      • addedOutput schema / properties / subscriber
        Added value: +{
        +  "description": "Subscriber address (the signer)",
        +  "type": "string"
        +}
      • removedOutput schema / properties / success
        Removed value: -{
        -  "description": "True if the unsubscribe landed on-chain",
        -  "type": "boolean"
        -}
    • Changedbyte_verify_payload3 fields changed
      • addedOutput schema / properties / blockNumber
        Added value: +{
        +  "description": "Block number of the settlement tx (txHash mode)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / source
        Added value: +{
        +  "description": "Which anchor was used: 'txHash' or 'expectedHash'",
        +  "type": "string"
        +}
      • addedOutput schema / properties / txHash
        Added value: +{
        +  "description": "Settlement tx hash verified against (txHash mode)",
        +  "type": "string"
        +}
  7. 15 tool updatesv0.10.5
    • Addedbyte_buy_data
    • Addedbyte_check_subscription
    • Addedbyte_get_network_stats
    • Addedbyte_get_publisher
    • Addedbyte_get_token_balances
    • Addedbyte_list_feeds
    • Addedbyte_list_my_subscriptions
    • Addedbyte_publish_data
    • Addedbyte_query_fact
    • Addedbyte_register_publisher
    • Addedbyte_search_publishers
    • Addedbyte_subscribe
    • Addedbyte_subscription_health
    • Addedbyte_unsubscribe
    • Addedbyte_verify_payload

TDQS

A4/5.0

Scored across 15 tools

Disambiguation4/5

Each tool targets a distinct resource+action (publisher, subscription, feed, payload, balance), with clear separation between discover/subscribe/buy/publish/verify flows. The closest overlaps are byte_search_publishers vs byte_list_feeds and byte_check_subscription vs byte_list_my_subscriptions, but the descriptions clarify catalog-level discovery vs wallet-specific checks well enough to prevent misselection.

Naming Consistency4/5

The dominant pattern is byte_verb_noun (get_publisher, list_feeds, buy_data, verify_payload), and the byte_ prefix gives every tool a strong family identity. Deviations like byte_subscription_health (no verb) and byte_subscribe/byte_unsubscribe (verb-only) are conventional and readable but break the strict pattern.

Tool Count5/5

15 tools sits at the top of the well-scoped range, and each tool earns its place across two user roles (subscriber and publisher) plus payment, balance, and verification concerns. The breadth is justified by the data-marketplace domain, which naturally requires discovery, subscription lifecycle, publishing, pay-per-call purchasing, and attestation verification.

Completeness4/5

The subscriber lifecycle is fully covered (discover, subscribe, monitor health, unsubscribe), and the publisher side supports register and publish, complemented by pay-per-call purchase, fact-oracle queries, and payload verification. Notable gaps are publisher self-service (no schema/price update, no unregister) and no historical message retrieval beyond counts, but the core v1 workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers