io. github. 0rkz/ byte-protocol
by 0rkz · remote · local (npm) · no sign-in to list tools · v0.13.0 · published by GitHub user 0rkz
PayPerByte — per-byte data for AI agents: x402 USDC on Base, EIP-712-attested. No token.
15 tools: 2 can delete or cancel things, 6 change things and 7 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things6Claude Code: ask: see these tools
- Only reads7Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http byte-protocol https://mcp.payperbyte.io/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnbyte_query_fact
The server marks "byte_query_fact" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "byte_query_fact" says "query": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 2Claude Code: deny
byte_publish_dataPublish data to a subscriber via the PayPerByte DataStream contract.No findings
Why it is in this group
- The name "byte_publish_data" says "publish": a word for a change that another call does not undo.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Publish data
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
byte_register_publisherRegister as a data publisher on PayPerByte.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Register publisher
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Changes things 6Claude Code: ask
byte_buy_dataBuy a single data packet from any PayPerByte feed via the x402 payment gateway.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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 POST oracles (see https://x402.payperbyte.io/feeds for the live list and each feed's `method`) 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 and listed per feed at https://x402.payperbyte.io/feeds — the signed EIP-712 attestation over the exact response bytes proves delivery, not that a verdict itself is correct. Use a dedicated wallet holding only what you intend to spend.
Annotations the server declares
- title: Buy data
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
byte_check_subscriptionCheck if an address is subscribed to a specific publisher on PayPerByte.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if an address is subscribed to a specific publisher on PayPerByte.
Annotations the server declares
- title: Check subscription
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_query_factQuery a PayPerByte fact-oracle publisher for a signed answer with citations.1 finding
Why it is in this group
- The name "byte_query_fact" says "query": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "byte_query_fact" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "byte_query_fact" says "query": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Query fact
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
byte_subscribeSubscribe to a PayPerByte publisher's data feed.No findings
Why it is in this group
- The name "byte_subscribe" says "subscribe": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Subscribe
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
byte_unsubscribeUnsubscribe from a publisher's data feed.No findings
Why it is in this group
- The name "byte_unsubscribe" says "unsubscribe": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Unsubscribe
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
byte_verify_payloadVerify-before-act: confirm a data payload an agent is about to act on actually matches what the publisher cryptographically attested to on-chain.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify payload (verify-before-act)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 7Claude Code: allow
byte_get_network_statsGet PayPerByte network-wide statistics: total publishers, messages streamed, and total subscriber fees settled in USDC.No findings
Why it is in this group
- The name "byte_get_network_stats" says "get": a word for reading.
Description, as the server wrote it Get PayPerByte network-wide statistics: total publishers, messages streamed, and total subscriber fees settled in USDC.
Annotations the server declares
- title: Get network stats
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_get_publisherGet 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).No findings
Why it is in this group
- The name "byte_get_publisher" says "get": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- title: Get publisher info
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_get_token_balancesGet USDC and ETH balances for an address on Arbitrum Sepolia (the on-chain testnet layer — MockUSDC settles subscriptions and fact-oracle queries there).No findings
Why it is in this group
- The name "byte_get_token_balances" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get token balances
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_list_feedsList all active data feeds in the PayPerByte catalog with topics, price-per-call, and frequency (pricePerKB is a deprecated alias).No findings
Why it is in this group
- The name "byte_list_feeds" says "list": a word for reading.
Description, as the server wrote it List all active data feeds in the PayPerByte catalog with topics, price-per-call, and frequency (pricePerKB is a deprecated alias).
Annotations the server declares
- title: List feeds
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_list_my_subscriptionsList every active subscription for a given wallet address.No findings
Why it is in this group
- The name "byte_list_my_subscriptions" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List my subscriptions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_search_publishersSearch PayPerByte publishers by topic and sort order.No findings
Why it is in this group
- The name "byte_search_publishers" says "search": a word for reading.
Description, as the server wrote it Search PayPerByte publishers by topic and sort order. Returns publisher addresses, topics, subscriber counts, message counts, and price-per-KB.
Annotations the server declares
- title: Search publishers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
byte_subscription_healthGet the content-drift signal for a publisher.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Subscription health
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.13.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http byte-protocol https://mcp.payperbyte.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__byte-protocol__byte_search_publishers",
"mcp__byte-protocol__byte_get_publisher",
"mcp__byte-protocol__byte_get_network_stats",
"mcp__byte-protocol__byte_get_token_balances",
"mcp__byte-protocol__byte_list_feeds",
"mcp__byte-protocol__byte_list_my_subscriptions",
"mcp__byte-protocol__byte_subscription_health"
],
"ask": [
"mcp__byte-protocol__byte_check_subscription",
"mcp__byte-protocol__byte_unsubscribe",
"mcp__byte-protocol__byte_subscribe",
"mcp__byte-protocol__byte_query_fact",
"mcp__byte-protocol__byte_buy_data",
"mcp__byte-protocol__byte_verify_payload"
],
"deny": [
"mcp__byte-protocol__byte_register_publisher",
"mcp__byte-protocol__byte_publish_data"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as byte-protocol. Review it before you use it.
