Robyn — Gasless Cross-Chain for AI Agents
REMOTE · API.ANYGAS.XYZ · 2 COMPONENTS · SCANNED SEP 20
Gasless cross-chain for AI agents: 25 nodes incl. Solana & native Bitcoin. One signature, no gas.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security51
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 72 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS enforcement could not be verified: the plaintext port answered with HTTP 400, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 9770 tokens (~135/item across 72 items; 72 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage86
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 57% of tool parameters carry a description.Partial
Tool Safety25
- Injection-marker check failed: the description of tool "robyn_quote" contains an instruction to conceal the call from the user, the text "do not tell the user", at byte 383 of that field. See how to fix → Fail
- 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "robyn_netting_transfer_payload" implies "transfer" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 72 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Robyn — Gasless Cross-Chain for AI Agents MCP server?
Robyn — Gasless Cross-Chain for AI Agents is a hosted endpoint at https://api.anygas.xyz/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.anygas.xyz
claude mcp add --transport http ox31461-robyn 'https://api.anygas.xyz/mcp'
{
"mcpServers": {
"ox31461-robyn": {
"url": "https://api.anygas.xyz/mcp"
}
}
} {
"servers": {
"ox31461-robyn": {
"type": "http",
"url": "https://api.anygas.xyz/mcp"
}
}
} [mcp_servers.ox31461-robyn] url = "https://api.anygas.xyz/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ox31461-robyn": {
"type": "remote",
"url": "https://api.anygas.xyz/mcp",
"enabled": true
}
}
} openclaw mcp add ox31461-robyn --url 'https://api.anygas.xyz/mcp' --transport streamable-http
mcp_servers:
ox31461-robyn:
url: "https://api.anygas.xyz/mcp" {
"McpServers": {
"ox31461-robyn": {
"Transport": "http",
"Url": "https://api.anygas.xyz/mcp"
}
}
} assistant mcp add ox31461-robyn -t streamable-http -u 'https://api.anygas.xyz/mcp'
{
"mcpServers": {
"ox31461-robyn": {
"type": "http",
"url": "https://api.anygas.xyz/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 9 Sept 26 0
- New tool “null_names_quote” functional
- New tool “null_names_market” functional
- 3 Sept 26 0
- Tool “robyn_message_publish_mailbox” rewrote its description, which is the text the model reads security
- Tool “robyn_message_mailbox_of” rewrote its description, which is the text the model reads security
- Tool “robyn_message_feed” rewrote its description, which is the text the model reads security
- Tool “robyn_message_directory” rewrote its description, which is the text the model reads security
- Server version: 1.4.1 → 1.4.2 functional
- “robyn_message_publish_mailbox” added an optional parameter “public” cosmetic
- “robyn_message_publish_mailbox” added an optional parameter “handle” cosmetic
- “robyn_message_feed” added an optional parameter “after” cosmetic
- “robyn_message_mailbox_of” reworded the description of “addressOrName” cosmetic
- 2 Sept 26 0
- Schema quality: 8354 → 9343 ▼ functional
- Server version: 1.3.1 → 1.4.1 functional
- New tool “null_prekeys_publish” functional
- New tool “null_prekeys_fetch” functional
- New tool “null_agent_guide” functional
- New tool “null_balance” functional
- New tool “null_ecosystem” functional
- 26 Aug 26 −3
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → pass security
- 24 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Aug 26 72
- Tool “robyn_message_info” rewrote its description, which is the text the model reads security
- Tool “robyn_message_info” changed its title: Messaging v2 — status, suite and parameters → Sonar (private messenger) — status, suite and parameters cosmetic
- 21 Aug 26 0
- Schema quality: 6685 → 8331 ▼ functional
- Server version: 1.1.0 → 1.3.1 functional
- New tool “robyn_receipt_deliver” functional
- New tool “robyn_message_anchor_proof” functional
- New tool “robyn_message_directory” functional
- New tool “robyn_message_erasure” functional
- New tool “robyn_message_feed” functional
- New tool “robyn_message_info” functional
- New tool “robyn_message_mailbox_of” functional
- New tool “robyn_message_publish_mailbox” functional
- New tool “robyn_message_send” functional
- New tool “robyn_plus_claim” functional
- New tool “robyn_plus_info” functional
- New tool “robyn_plus_invoice” functional
- New tool “robyn_plus_invoice_status” functional
- New tool “robyn_plus_trial” functional
- New tool “robyn_privacy_posture” functional
- New tool “robyn_receipt_verify” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://api.anygas.xyz/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=anygas.xyz | CN=WE1,O=Google Trust Services,C=US | 10 Sept 2026 | 9 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | a38eb472ef66b707133b94c22dc11d1c |
| SANs: anygas.xyz, *.anygas.xyz | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.anygas.xyz. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| xyz. | present | 3599, 18130 | 8, 8 | Verified |
| anygas.xyz. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'self'; script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; img-src 'self' data: https:; connect-src 'self' https://anygas.xyz https://api.anygas.xyz https://relay.nightferry.net https://snowpiercer.me; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self' |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), microphone=(), camera=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.anygas.xyz/mcp | Verified | 200 | |
| http (plaintext) | http://api.anygas.xyz/mcp | Inconclusive | 400 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
null_agent_guide NULL — the complete agent handbook (do everything, correctly) ~107
One read that teaches an agent to use every NULL capability with the right privacy posture: create an identity, seal + send + scan, start forward-secret sessions, drop an anonymous tip, check a Legacy heartbeat, make/detect stealth payments, and what each action reveals to whom. All crypto is local (SDK at /svc/msg2-sdk.mjs; browser bundle /svc/anygas-web.js); this MCP only relays sealed/signed material. Read-only, static knowledge.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
null_balance NULL Pay — IP-blind balance read ~149
Reads an address balance through the NULL server-side RPC proxy, so YOUR IP never reaches any public RPC provider (this host queries upstream from its own address). BE HONEST ABOUT THE TRADE: querying a stealth address you derived LINKS that address, your session, and the time of interest AT THIS RELAY — exactly the linkage stealth addressing hides from everyone else. Nothing reaches the RPC about you, but if relay-side unlinkability matters, batch several addresses (including decoys) in one sitting rather than polling one address on a schedule. Chains: Base + Arbitrum (unified). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | 0x address (e.g. a derived stealth payment address) |
No output schema declared.
No examples provided.
null_ecosystem NULL — discover the whole ecosystem in one call ~99
The live NULL manifest: every product (messenger, Pay, Vault, Drop, Legacy, Agent Wire, forward secrecy), its status, its page, the wired/proposed integrations between them, the security spine, and the concept pipeline. This is the same single source of truth the owner console and the human Suite read — a new product that ships appears here automatically. Pair it with null_agent_guide for the how-to. Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
null_names_market NULL Names - the secondary market (signed listings + how to buy/sell/transfer) ~108
Live listings of premium handles for sale, plus the full deal protocol: agree peer-to-peer in a sealed chat, pay stealth or via NULL Escrow 2-of-3, then finalize with the dual-signed (secp + ML-DSA) witness-chained transfer and a 2% ($1 min) fee receipt. Listing your own handle: sign null-name-list/v1|name|priceUsd|ts with your identity spend key and POST /api/nullnames/list.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
null_names_quote NULL Names - price any handle (ENS-seeded, 7+ chars free forever) ~108
Quotes a handle: 3ch $512/yr, 4ch $128/yr, 5-6ch $4/yr (deliberately under ENS), 7+ characters FREE forever. Includes live state (available/registered/grace/premium with the 21-day Dutch decay) and the exact register->pay->claim steps. Names are public by definition - quoting one reveals nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | 3-32 chars, leading alphanumeric |
No output schema declared.
No examples provided.
null_prekeys_fetch NULL forward secrecy — fetch a peer prekey bundle (consumes one one-time key) ~311
Fetches {spk, sigSpk, otk, otksLeft} for a recipient so you can start an X3DH-PQ forward-secret session (SDK: fs.startOutbound). ALWAYS fetch by META-ADDRESS: the sigSpk check verifies against the meta-address spendPub (sha256("null-fs-spk/v1:"+spk), secp256k1) and CANNOT run on a handle fetch (the SDK tags those fsUnverified — treat as unauthenticated keys). The nonce is MANDATORY and idempotent: a retry with the SAME nonce returns the SAME one-time key instead of draining the pool; use a fresh random 12-64 url-safe chars per new session. If otk comes back null the pool is empty or rate-limited (issuance is capped per recipient to slow drain attacks): proceed SPK-only — still forward-secret via the ratchet, slightly weaker for the first message — and the recipient replenishes automatically. A failed sigSpk check means a key-substituting relay: abort to the static seal and treat it as an incident, not a fallback. Read (consumes one otk per fresh nonce).
| Name | Type | Req | Description |
|---|---|---|---|
| nonce | string | yes | 12-64 url-safe chars; SAME nonce on retry = same key returned, no drain |
| recipient | string | yes | st:eth:0x… meta-address (REQUIRED for the SPK signature check; a handle fetch returns unverifiable keys) |
No output schema declared.
No examples provided.
null_prekeys_publish NULL forward secrecy — publish a PRE-SIGNED prekey bundle ~323
Makes you reachable with forward secrecy: publishes your signed prekey bundle (medium-term spk + one-time otks) so peers can start X3DH-PQ sessions TO you. Generate and sign locally with the SDK (fs.genBundle + publishPrekeys — sigSpk is secp256k1 over sha256("null-fs-spk/v1:"+spk) by your spend key; sig is EIP-191 over the bundle statement). The server VERIFIES sigSpk against the meta-address’s own spend key and binds the slot to that identity — no other wallet can occupy or squat your slot, and a valid signature reclaims one. This server forwards the signed record unchanged and never sees a secret. Same spk on re-publish = one-time keys are set-merged (top-up); a new spk resets the pool. Monotonic by ts.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | – |
| handle | string | – | – |
| metaAddress | string | yes | st:eth:0x… |
| otks | array | yes | base64 one-time pubkeys |
| sig | string | yes | EIP-191 signature over the prekey statement by address |
| sigSpk | string | yes | compact secp256k1 hex over sha256("null-fs-spk/v1:"+spk) by the identity spend key |
| spk | string | yes | base64 hybrid ML-KEM-768+X25519 pubkey |
| ts | number | yes | unix seconds, ±10 min |
No output schema declared.
No examples provided.
robyn_7702_check Verify an EIP-7702 authorization ~73
Check that a signed EIP-7702 authorization tuple recovers the expected account, and whether its nonce matches the live account nonce. Free, read-only, moves nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| authorization | object | yes | the signed 7702 authorization tuple |
| chainId | number | yes | chain the authorization targets |
No output schema declared.
No examples provided.
robyn_7702_delegate EIP-7702 delegate + rail info ~67
The canonical Robyn EIP-7702 batch-executor delegate: its address on each of the 22 EVM chains, the ABI, and the EIP-712 scheme for executeSigned. Delegate to this and the relayer can sponsor your transactions. Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_attestation Signed proof the router is live AND private, right now ~104
Returns a relayer-SIGNED attestation that, as of a signed timestamp, every component was up (router, signing daemons, MCP, privacy relay) AND the privacy invariants held — the adversary probes could not distinguish cover traffic from real (classifier = chance) and the k-anonymity floor is enforced. Verify the signature yourself (recover the signer over the digest). Use this to programmatically decide whether to trust this router before routing value through it.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_capability_snapshot What Robyn can actually do right now (signed) ~171
A signed, timestamped record of current capability: which chains can actually be PAID OUT ON right now, which are merely policy-eligible, which rails are execute-ready, and whether delivery figures are measured or estimated. USE `serviceableNow`, NOT `policyEligible`, when deciding where to send funds — a chain can be eligible by policy while holding no inventory, in which case the instant lane is unavailable and the transfer falls through to a bridge rail. `notServiceable` lists the difference. Fetch this BEFORE committing to a multi-step plan and keep it with your decision: if the plan later fails you can show what you were told. It is a RECORD, not a guarantee — it does not promise the same capability a minute later, and the signature does not make it an SLA.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_changelog What changed since I integrated? ~128
Machine-readable API history. Pass the version your integration was built against as `since` and you get only what has changed after it, with an explicit `breaking` flag on each entry. CHECK `mustAct` FIRST: if true there are breaking changes and an existing integration may ALREADY be failing — read `entries[].action` for each. `breaking:true` means an existing correct integration could stop working; it is a compatibility claim, not a measure of importance.
| Name | Type | Req | Description |
|---|---|---|---|
| since | string | – | the API version you built against, e.g. "3.9.0" |
No output schema declared.
No examples provided.
robyn_counterparty_check Have I paid this address before? ~180
Your OWN payment history with a recipient address: how many times, how recently, and whether this amount is typical. Call it before paying an address you have not confirmed. THIS IS NOT A REPUTATION SCORE and says nothing about whether the address is honest. A familiar address is NOT a safe address — keys get compromised. Never tell a user an address is "trusted" or "safe" on the basis of this. A `first-time-recipient` result is NOT a warning about the recipient — every legitimate relationship has a first payment. It is the moment to confirm the address through a second channel, because address substitution can only be caught before you send. Read `coverage`: float-lane payouts are NOT included, so "first time" can be wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | – | – |
| toAddress | string | yes | – |
No output schema declared.
No examples provided.
robyn_cross_chain Move value cross-chain, gasless ~130
Plan a gasless cross-chain move and get the exact payload to sign. This hosted server never holds your key: call this, sign what it returns with your own wallet, then call robyn_submit to have the relayer broadcast it and pay the gas.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | amount in fromToken base units |
| fromChain | number|string | yes | – |
| fromToken | string | yes | token address on the source chain |
| toAddress | string | – | – |
| toChain | number|string | yes | – |
| toToken | string | yes | token address / symbol on the destination |
No output schema declared.
No examples provided.
robyn_delivery_stats Measured delivery times ~78
How long settlements ACTUALLY take, per rail and per corridor — not a single advertised constant. CHECK `basis`/`status`: below the sample threshold this returns `insufficient-data` and the figure is a static ESTIMATE, not a measurement. Say which you are quoting when you tell a user how long something will take.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_errors Error contract ~43
The full error taxonomy: every errorCode, whether it is retryable, and the suggested recovery action. Read this once and branch on errorCode instead of parsing messages.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_evidence_bundle One signed bundle of all evidence about a transfer ~198
Assembles EVERYTHING about a settled transfer in one call: the on-chain verification, the unit-by-unit fee breakdown, what the alternative route would have cost, and whether the delivery time is measured or estimated — signed as a whole. This is the artefact to hand to a principal who was not there; swapping any component invalidates the signature. READ `verdict` BEFORE PRESENTING IT: the bundle verdict is the WEAKEST of its parts. A complete fee breakdown does not mean the transfer was confirmed — if `verdict` is `undetermined`, settlement was NOT verified and you must not describe it as complete. Components that could not be produced appear as `unavailable` with a reason; check `incomplete`.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | settled transfer id |
| minAmount | string | – | assert the minimum that should have arrived |
| recipient | string | – | assert who should have been paid |
No output schema declared.
No examples provided.
robyn_fee_forensics Where every unit of a fee went ~101
Reconstruct a settled transfer unit by unit: destination payout gas, Robyn margin, or a Robyn SUBSIDY where Robyn absorbed a loss. Each line names who was paid and how the figure was derived. Anything that cannot be attributed is returned as `unattributed` rather than folded into another line — if you see that field, report it rather than presenting the breakdown as complete.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | settled transfer id |
No output schema declared.
No examples provided.
robyn_improve_cost What would make this transfer cheaper? ~177
Turns a price into a decision. Returns concrete, QUANTIFIED changes — a cheaper destination chain with the exact saving, the size at which a fixed payout cost stops dominating, whether the instant float lane applies, and whether rails that would have competed were unavailable. CRITICAL: suggestions with `changesOutcome: true` move WHERE THE MONEY LANDS. Never apply those silently as cost savings — confirm with the user that the alternative destination is acceptable first, or you will have saved gas by delivering to the wrong place. If nothing can be improved it says so rather than inventing filler.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | – |
| fromChain | number|string | yes | – |
| fromToken | string | – | – |
| toAddress | string | – | – |
| toChain | number|string | yes | – |
| toToken | string | – | – |
No output schema declared.
No examples provided.
robyn_integration_lint Is the request I am about to send safe? ~132
Post the request you INTEND to make and get back what is missing or unsafe, with the concrete consequence. Run this before your first live execute. Findings marked `unsafe` can lose money or make you report something untrue — fix them, do not proceed. IMPORTANT: it lints the REQUEST only. A clean lint does NOT mean your integration is correct — it cannot see whether you branch on all three verification verdicts or treat `undetermined` as success.
| Name | Type | Req | Description |
|---|---|---|---|
| endpoint | string | yes | the endpoint you intend to call |
| payload | object | yes | the body you intend to send |
No output schema declared.
No examples provided.
robyn_mandate_certificate Signed proof the agent stayed within its budget ~134
A signed certificate listing every spend counted against a mandate, the budget, the total spent, and whether it stayed inside. Hand it to the principal at the end of a period. Every spend listed was VERIFIED ON-CHAIN before counting, and the amount is what the chain showed arrived — not what the agent reported. IMPORTANT WHEN PRESENTING IT: this certifies adherence to a ROBYN budget. It does NOT certify that the agent spent nothing elsewhere, because Robyn can only account for money that moved through Robyn. Do not describe it as proof of total spending.
| Name | Type | Req | Description |
|---|---|---|---|
| mandateId | string | yes | – |
No output schema declared.
No examples provided.
robyn_mandate_check Does this spend fit the budget my principal set? ~135
Check a proposed spend against a signed spending mandate BEFORE making it. Returns WITHIN_MANDATE, EXCEEDS_MANDATE or EXPIRED plus the remaining budget. If EXCEEDS_MANDATE, do NOT split the spend into smaller pieces to get under the limit — that defeats the control your principal set. Ask them to raise the budget. NOTE THE SCOPE: a mandate covers spending THROUGH ROBYN only. It is not custody and does not stop spending elsewhere with the same key.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | proposed spend in base units |
| mandateId | string | yes | the mandate digest |
No output schema declared.
No examples provided.
robyn_mandate_cosign_request Does this spend need the principal to approve it? ~126
For mandates with a co-sign threshold, check whether a specific spend needs the principal to approve it and get the exact digest they must sign. The digest binds the mandate, the transfer AND the amount, so an approval cannot be reused for a different payment — do not attempt to reuse one. If a large spend is refused for want of a countersignature, present the digest to the principal rather than splitting the spend to slip under the threshold.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | – |
| mandateId | string | yes | – |
| transferId | string | yes | – |
No output schema declared.
No examples provided.
robyn_mandate_events What has happened to my budgets ~104
Poll for spend, nearly-exhausted, exhausted, approval-required and revoked events on a principal's mandates. Pass the returned `cursor` back as `since` for only what is new. Use this to tell a principal their budget is running low or that a large payment is waiting on their approval, instead of making them check each mandate by hand.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | – |
| principal | string | – | – |
| since | string | – | – |
No output schema declared.
No examples provided.
robyn_mandate_list Every budget a principal has granted ~87
List all mandates granted by a principal address, with remaining budget, co-sign threshold, expiry and revocation state. Use this before telling a user they are safe: live mandates can still be drawn against WITHOUT further approval, and a forgotten grant is the one that hurts. Anything they no longer intend to honour should be revoked.
| Name | Type | Req | Description |
|---|---|---|---|
| principal | string | yes | the principal address |
No output schema declared.
No examples provided.
robyn_mandate_status How much of my budget is left? ~51
Remaining and consumed budget for a signed mandate. Consumption counts ONLY transfers verified on-chain, so the figure cannot be inflated by claiming spends that did not happen.
| Name | Type | Req | Description |
|---|---|---|---|
| mandateId | string | yes | – |
No output schema declared.
No examples provided.
robyn_mesh Robyn mesh ~43
List the Robyn gasless chains and the cross-chain route graph (22 EVM nodes + Stellar), plus the relayer/Permit2 addresses. No credentials needed.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_message_anchor_proof Messaging v2 — anchoring proof for a feed row ~74
Merkle inclusion proof for an anchored row id: leaf, path, root, the signer’s EIP-191 signature over the batch statement and the on-chain tx when enabled. Verify locally with plus-sdk verifyAnchorProof(). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | 16-hex feed row id |
No output schema declared.
No examples provided.
robyn_message_directory Messaging v2 — all mailboxes (oblivious lookup) ~106
Every published v2 mailbox. PUBLIC rows carry {address, metaAddress, kemPub}; PRIVATE rows (the default since 2026-08-28) carry {handle, metaAddress, kemPub} and deliberately NO address. Identical for every reader, so fetching it reveals nothing about whom you intend to message — pick the recipient locally. Seal with the SDK: seal({metaAddress, kemPub}, {text, ts, from?, sig?}). Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_message_erasure Messaging v2 — signed proof of erasure ~35
The last purge statement (expired count, cumulative, root of purged ids) signed by the operator. Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_message_feed Messaging v2 — public feed to scan with your viewing key ~156
Returns released rows {id, ephemeralPubKey, viewTag, ct, releaseAt, nextAfter}, identical for every reader. Scan locally with the SDK (inbox(identity)) — checkStealthAddress with your viewPriv, then open ct with your KEM secret. Page with after=<nextAfter> (exact compound cursor — never skips same-tick rows); since=<releaseAt ms> also works but is best-effort at page boundaries. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | exact compound cursor from a prior page’s nextAfter (preferred for paging) |
| limit | number | – | 1–200, default 100 |
| since | number | – | releaseAt cursor in ms (default 0) |
No output schema declared.
No examples provided.
robyn_message_info Sonar (private messenger) — status, suite and parameters ~133
Sonar — PRIVATE · SEALED · POST-QUANTUM MESSENGER (broadcast to everyone, understood by one, remembered by none). Hybrid ML-KEM-768+X25519 encryption, a one-time stealth handle per message, fixed-size ciphertexts, 60 s release grid. The server stores only (ephemeralPubKey, viewTag, ct) — no sender, no recipient, no IP. Returns mode, ciphertext sizes, release grid, cover-row rate and the honest anonymity accounting (kContribution is 0: rotating handles give unlinkability, not extra participants). Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_message_mailbox_of Messaging v2 — resolve a Robyn name to its mailbox ~113
For a Robyn name or NULL handle the server must resolve it, so this reveals your intended recipient to the server — prefer robyn_message_directory when you have an address. Returns {address|handle, metaAddress, kemPub} (private-handle rows carry no address by design). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| addressOrName | string | yes | 0x address, a NULL handle (e.g. alice.null), or label.robyn.id / .robynchain.eth / .rhood.eth |
No output schema declared.
No examples provided.
robyn_message_publish_mailbox Messaging v2 — publish a PRE-SIGNED mailbox ~301
Registers a mailbox so others can seal to you. PRIVATE BY DEFAULT: the server stores only a salted hash of your signing address — pass `handle` to be reachable by name (agents get the same handle claim browsers have), or `public:true` to bind your bare 0x address in the open directory instead. Generate keys locally (SDK createIdentity(); keep spendPriv/viewPriv/kemSecret secret — this server must never see them) and sign mailboxMessage(address, metaAddress, kemPub, ts, handle?) with the wallet or identitySigner (EIP-191; the handle line is part of the signed statement when present). Monotonic by ts: re-publish with fresh keys to rotate. Forwards the signed record unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | – |
| handle | string | – | claim a reachable-by-name handle (3-32 chars a-z 0-9 . _ -); must be in the signed statement |
| kemPub | string | yes | base64 hybrid ML-KEM-768+X25519 public key |
| metaAddress | string | yes | st:eth:0x<spendPub><viewPub> |
| public | boolean | – | true = legacy public mode: your 0x address appears in the directory |
| sig | string | yes | EIP-191 signature by address |
| ts | number | yes | unix seconds used in the signed message (±10 min) |
No output schema declared.
No examples provided.
robyn_message_send Messaging v2 — deliver an ALREADY-sealed message ~179
Relays a message you sealed locally with /svc/msg2-sdk.mjs (seal(mailbox, inner) → {ephemeralPubKey, viewTag, ct}). This tool cannot encrypt for you: sending plaintext here would expose it to the relay, so it only accepts the sealed triple. Replay-idempotent (a resend returns duplicate:true). The message appears in the public feed at releaseAt. If you cannot run the SDK, use v1 (POST /api/messages/send) and know that v1 is plaintext.
| Name | Type | Req | Description |
|---|---|---|---|
| ct | string | yes | base64 ciphertext from seal(); must be one of the fixed bucket sizes |
| ephemeralPubKey | string | yes | 0x + 33-byte compressed secp256k1 point from seal() |
| viewTag | string | yes | 0x + 1 byte from seal() |
No output schema declared.
No examples provided.
robyn_netting_account Netting balance, enrolment state and next nonce ~76
Whether an address is enrolled (and therefore custodied), its internal balance, recent history, and `nextNonce` — which you MUST use when signing the next transfer or withdrawal. An address that never enrolled is reported as not custodied. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | EVM address (0x…) |
No output schema declared.
No examples provided.
robyn_netting_enroll_payload Get the consent text a user must sign to open a netting account ~155
Returns the EXACT message the account must sign with its OWN key to open a custodial balance. This endpoint holds no key and enrols nobody — it returns the text; the user signs it, then POST {address, signature} to /api/netting/enroll. CUSTODIAL — this is the ONE part of Robyn that holds your balance; every other tool here moves funds without Robyn ever holding them. Tell the user that plainly before they enrol. Show the user the full consent text before they sign it: it states that the balance is held by Robyn, is not insured, and could be lost.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | the address that will own the netting account |
No output schema declared.
No examples provided.
robyn_netting_info What netting accounts are (opt-in, custodial) ~111
Explains the opt-in netting ledger: transfers between two ENROLLED accounts settle as a book entry — no chain, no gas, no fee, instant, at ANY size including amounts below every per-chain cost floor. CUSTODIAL — this is the ONE part of Robyn that holds your balance; every other tool here moves funds without Robyn ever holding them. Tell the user that plainly before they enrol. Read-only. Returns the caps, the published limits and the fee model.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_netting_preview What a netting withdrawal would actually deliver ~165
Free and read-only. Given an amount, ranks EVERY exit chain by what actually arrives after the destination payout cost is deducted. Those costs differ by more than 1000x (Avalanche delivers ~$0.99994 of a dollar; Linea ~$0.927), so which chain you leave on is a real decision. Pass toChain to price one chain and learn whether it would succeed at all. Internal transfers between netting accounts remain free at any size — this cost applies only to leaving for a real on-chain balance.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | amount in USDC base units (6dp), e.g. "1000000" = $1.00 |
| toChain | number|string | – | price a single chain instead of ranking all |
No output schema declared.
No examples provided.
robyn_netting_reserves Proof of reserves for the custodial ledger ~78
Publishes what Robyn OWES across all netting accounts against the real relayer float backing it, per chain. Solvency is checkable rather than asserted. Deposits are refused if they would push liabilities above a safe share of the float. Read-only — a user considering a custodial balance should be shown this.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_netting_statement Full, untruncated netting history for an address ~109
Internal transfers produce NO transaction hash because no transaction occurs — this append-only journal is their only record. Never truncated; page with `before` (a seq number). Use this when a user asks to verify or dispute an internal payment, since there is no chain to check.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | EVM address (0x…) |
| before | string | – | return entries with seq below this, for paging |
| limit | number | – | max entries (default 200) |
No output schema declared.
No examples provided.
robyn_netting_transfer_payload Build the message to sign for a FREE internal transfer ~150
Returns the exact string to sign, with the correct next nonce, for a free instant transfer between two ENROLLED accounts. Signs nothing and moves nothing — the sender signs the returned message, then POSTs {from,to,amount,nonce,signature} to /api/netting/transfer. BOTH parties must already be enrolled: Robyn will not hold a balance for a recipient who never consented, so to pay an unenrolled address use the ordinary non-custodial route instead.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | USDC base units (6dp) |
| from | string | yes | sender (must be enrolled) |
| to | string | yes | recipient (must ALSO be enrolled) |
No output schema declared.
No examples provided.
robyn_payment_request_prepare Prepare a payment request for the payee to sign ~151
Build a canonical payment request (payee, chain, token, amount, memo, expiry) and return the digest for THE PAYEE to sign with their own wallet. Robyn does not sign these and holds no payee keys — a request signed by Robyn would prove nothing about the payee. Use this when an agent needs to ASK another agent for money in a way the payer can actually check.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | base units |
| chain | number|string | yes | destination chain id or name |
| expiresInSec | number | – | – |
| memo | string | – | – |
| payee | string | yes | address that should be paid |
| token | string | – | – |
No output schema declared.
No examples provided.
robyn_payment_request_settlement Prove a payment request was satisfied on-chain ~95
After paying, prove it: re-checks the transfer against the DESTINATION CHAIN and confirms the payee was paid at least the amount requested. Returns paid=true only on a verified on-chain result; paid=null means undetermined, which is NOT evidence you satisfied the request.
| Name | Type | Req | Description |
|---|---|---|---|
| request | object | yes | – |
| signature | string | yes | – |
| transferId | string | yes | the transfer that paid it |
No output schema declared.
No examples provided.
robyn_payment_request_verify Verify a payment request before paying it ~134
ALWAYS run this before paying a request you received. It confirms the payee address, chain, token and amount were signed by whoever controls the payee address, and that the request has not expired. If `signedByPayee` is false, DO NOT PAY — that is what an altered payee address looks like, and address substitution is the most common theft in this space. A valid signature proves AUTHENTICITY, not that the payment is owed and not that the payee is trustworthy.
| Name | Type | Req | Description |
|---|---|---|---|
| request | object | yes | the canonical request object |
| signature | string | yes | the payee signature |
No output schema declared.
No examples provided.
robyn_plan Validate a multi-step plan before executing any of it ~132
Validate a WHOLE multi-step workflow up front instead of one hop at a time. Fees and durations accumulate across steps. Evaluation stops at the first unroutable step rather than reporting speculative results behind it. If the plan cannot work, the response names the BINDING CONSTRAINT and the value that would work (`bindingConstraint`, `whatWouldMakeThisWork`) — use that to adjust rather than retrying blindly. READ-ONLY: nothing is signed, reserved or moved. Use this before spending on step one.
| Name | Type | Req | Description |
|---|---|---|---|
| constraints | object | – | – |
| steps | array | yes | the hops, in order |
No output schema declared.
No examples provided.
robyn_plus_claim Plus — claim blind signatures after paying ~111
Submit BLINDED tokens (base64, from plus-sdk blindTokens()) with the payment txHash. Payment is verified on-chain (recipient, amount, confirmation; one tx pays one invoice), then each blinded token is signed blind. Unblind locally (plus-sdk claim() does all of this). This tool never sees an unblinded pass.
| Name | Type | Req | Description |
|---|---|---|---|
| blinded | array | yes | – |
| invoiceId | string | yes | – |
| txHash | string | – | EVM payment tx; omit for btc |
No output schema declared.
No examples provided.
robyn_plus_info Plus — what is sold, prices, mint key ~123
Plus sells capacity (rate-limit-exempt sends), funded cover rows and signed/anchored Merkle proofs — never a "more private lane" (that would be a smaller crowd). Paid in ETH (Robinhood Chain, Ethereum, Arbitrum, Base), USDC (Base, Arbitrum) or BTC (Chainflip). Redeemed with RFC 9474 blind passes the server cannot link to any payment. Returns products, assets, the mint public key (JWK) and honest what-we-learn / what-we-do-not. Read-only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
robyn_plus_invoice Plus — create an invoice ~104
Creates an invoice for one bundle (500 passes, $3 quoted in the chosen asset). Returns {invoiceId, payTo, amount (base units), human, chainId, expires}. Pay from any wallet; then blind tokens locally with the SDK and call robyn_plus_claim. For btc pass refundAddress (your BTC address) — the invoice returns a Chainflip deposit address.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| refundAddress | string | – | btc only |
No output schema declared.
No examples provided.
robyn_plus_invoice_status Plus — invoice status ~33
Status, remaining passes and payment details for an invoice. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| invoiceId | string | yes | – |
No output schema declared.
No examples provided.
What is the Robyn — Gasless Cross-Chain for AI Agents MCP server?
Robyn — Gasless Cross-Chain for AI Agents is an MCP server listed in the public MCP registry as io.github.ox31461/robyn. Gasless cross-chain for AI agents: 25 nodes incl. Solana & native Bitcoin. One signature, no gas. This page covers its hosted endpoint (https://api.anygas.xyz/mcp).
Is the Robyn — Gasless Cross-Chain for AI Agents MCP server safe to use?
Robyn — Gasless Cross-Chain for AI Agents scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Robyn — Gasless Cross-Chain for AI Agents MCP server expose?
Robyn — Gasless Cross-Chain for AI Agents exposes 72 tools: robyn_privacy_posture, robyn_receipt_deliver, robyn_receipt_verify, robyn_mesh, robyn_quote, and 67 more. Their descriptions and schemas cost roughly 9,770 tokens of context every time the server is loaded.
Does the Robyn — Gasless Cross-Chain for AI Agents MCP server require authentication?
No. We connected to Robyn — Gasless Cross-Chain for AI Agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Robyn — Gasless Cross-Chain for AI Agents MCP server still maintained?
Robyn — Gasless Cross-Chain for AI Agents is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.