[
  {
    "name": "wallet_list_integrations",
    "description": "List producer MCP servers whose plans Cloud Wallet accepts, with URLs and handoff notes. The user connects them separately; this grants nothing.",
    "inputSchema": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_get_account",
    "description": "Read one account: metadata, network status, service authority, transaction policy and this connection's requests. Balances: wallet_fetch_balances; other contract reads: wallet_batch_eth_call.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        }
      },
      "required": [
        "account_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_get_transaction_policy",
    "description": "Read an account's transaction policy, revision, JSON schema and this connection's proposals. Rules are ordered: allow executes, deny rejects, an unmatched call goes to owner review.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        }
      },
      "required": [
        "account_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_prepare_transfers",
    "description": "Build an unsigned ERC-8410 plan for 1–1024 ordered transfers from one account; amount and token_id are decimal base units. Fields by kind — native: recipient, amount; erc20: token, recipient, amount; erc721: token, recipient, token_id, safe (default true), data; erc1155: token, recipient, token_id, amount, data. Nothing is checked, signed or sent: pass the returned plan unchanged to wallet_simulate_execution_plan.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "transfers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "native",
                  "erc20",
                  "erc721",
                  "erc1155"
                ]
              },
              "recipient": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              "token": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              "amount": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$"
              },
              "token_id": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$"
              },
              "safe": {
                "type": "boolean"
              },
              "data": {
                "type": "string",
                "pattern": "^0x(?:[0-9a-fA-F]{2})*$"
              }
            },
            "required": [
              "kind",
              "recipient"
            ]
          },
          "minItems": 1,
          "maxItems": 1024
        }
      },
      "required": [
        "account_id",
        "transfers"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_list",
    "description": "List the accounts this connection may use: account_id, networks, networkChange (an enable or disable in progress; read its kind before its transactionHash) and the scope held on each. Global scopes cover future accounts; write includes read.",
    "inputSchema": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_get_execution_status",
    "description": "Read a request's status; poll until terminal. pending_review waits for the owner. awaiting_funds: nothing was signed or sent because the wallet cannot pay gas (the error states the shortfall); the owner funds it and retries in the dashboard. Never resubmit. Large execution evidence is stored separately: set include_evidence only when you need the full raw receipts, which can be several megabytes. evidence.status=pending means storage is retrying; it does not change transaction status.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "request_id": {
          "type": "string"
        },
        "include_evidence": {
          "type": "boolean"
        }
      },
      "required": [
        "account_id",
        "request_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_propose_transaction_policy",
    "description": "Propose a complete transaction policy for owner passkey review (write access). The active policy is unchanged until the owner saves it. Call wallet_get_transaction_policy first and follow its schema; never invent a policy shape.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "idempotency_key": {
          "type": "string",
          "format": "uuid"
        },
        "policy": {
          "type": "object",
          "additionalProperties": {}
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        }
      },
      "required": [
        "account_id",
        "idempotency_key",
        "policy",
        "reason"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "destructiveHint": false,
      "idempotentHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_simulate_execution_plan",
    "description": "Simulate an ERC-8410 v1 plan as one atomic batch at a pinned block, as inline plan or artifact_reference (fetched and digest-verified by the wallet); nothing is signed, sent or recorded. Write access. Applies the policy and risk checks of a send, fee preparation and an effects trace. status: succeeded, failed or unavailable. Only succeeded and sendable returns simulation_id: one use, 120 s, voided by any policy, grant, network or risk-list change. Effects are one RPC's view of one block, not a promise of the result; signing does not simulate again, so bound outcomes such as minimum output in the calls. Pass producer plans unchanged; they may carry further ERC-8410 fields.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "plan": {
          "type": "object",
          "properties": {
            "schema_version": {
              "type": "string",
              "const": "1"
            },
            "chain_id": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)$"
            },
            "caip2_chain_id": {
              "type": "string"
            },
            "sender": {
              "type": "string",
              "pattern": "^0x[0-9a-fA-F]{40}$"
            },
            "ordered_steps": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "step": {
                    "type": "integer",
                    "exclusiveMinimum": 0
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "execution",
                      "approval",
                      "allowance_cleanup",
                      "signature_dependent_execution",
                      "other"
                    ]
                  },
                  "transaction": {
                    "type": "object",
                    "properties": {
                      "chain_id": {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      },
                      "from": {
                        "type": "string",
                        "pattern": "^0x[0-9a-fA-F]{40}$"
                      },
                      "to": {
                        "type": "string",
                        "pattern": "^0x[0-9a-fA-F]{40}$"
                      },
                      "data": {
                        "type": "string",
                        "pattern": "^0x(?:[0-9a-fA-F]{2})*$"
                      },
                      "value": {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      },
                      "gas": {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    },
                    "required": [
                      "chain_id",
                      "from",
                      "to",
                      "data",
                      "value"
                    ]
                  }
                },
                "required": [
                  "step",
                  "kind",
                  "transaction"
                ]
              },
              "minItems": 1,
              "maxItems": 1024
            },
            "required_capabilities": {
              "type": "array",
              "items": {
                "type": "string",
                "const": "atomic_batch"
              }
            }
          },
          "required": [
            "schema_version",
            "chain_id",
            "caip2_chain_id",
            "sender",
            "ordered_steps"
          ]
        },
        "artifact_reference": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "artifact_reference"
            },
            "artifact_type": {
              "type": "string",
              "const": "execution_plan"
            },
            "url": {
              "type": "string"
            },
            "bytes": {
              "type": "integer",
              "exclusiveMinimum": 0
            },
            "integrity": {
              "type": "object",
              "properties": {
                "algorithm": {
                  "type": "string",
                  "const": "keccak256"
                },
                "value": {
                  "type": "string",
                  "pattern": "^0x[0-9a-fA-F]{64}$"
                }
              },
              "required": [
                "algorithm",
                "value"
              ]
            }
          },
          "required": [
            "kind",
            "artifact_type",
            "url",
            "bytes",
            "integrity"
          ]
        }
      },
      "required": [
        "account_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "destructiveHint": false
    }
  },
  {
    "name": "wallet_send_execution_plan",
    "description": "Send the calls recorded by a succeeded simulation; nothing is fetched again. Write access; fresh UUID idempotency_key. Refused as simulation_expired (over 120 s), simulation_invalidated, simulation_consumed or simulation_mismatch. Every call is screened: a sanctioned address rejects; a listed scam address, or must_review, holds the request for the owner; scan_unavailable means retry later. Findings are in scan.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "idempotency_key": {
          "type": "string",
          "format": "uuid"
        },
        "simulation_id": {
          "type": "string",
          "pattern": "^sim_[A-Za-z0-9_-]{43}$"
        },
        "must_review": {
          "type": "boolean"
        }
      },
      "required": [
        "account_id",
        "idempotency_key",
        "simulation_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "idempotentHint": true
    }
  },
  {
    "name": "wallet_sign_typed_data",
    "description": "Request an ERC-1271 service-key signature over EIP-712 typed data, as inline request (kind is exactly \"typed_data_signature_request\") or artifact_reference. Write access to wallet_id, the bare 0x address, not an account_id. The signing policy of verification_chain_id decides: allow signs now, unmatched waits for owner approval, deny refuses. That network and any domain.chainId must be enabled, else account_not_enabled. The consumer must verify ERC-1271; there is no EOA or raw-digest signing. Poll wallet_get_signature_result.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "wallet_id": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "idempotency_key": {
          "type": "string",
          "format": "uuid"
        },
        "request": {
          "type": "object",
          "properties": {
            "schema_version": {
              "type": "string",
              "const": "1"
            },
            "kind": {
              "type": "string",
              "const": "typed_data_signature_request"
            },
            "signer": {
              "type": "string",
              "pattern": "^0x[0-9a-fA-F]{40}$"
            },
            "typed_data": {
              "type": "object",
              "properties": {
                "types": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "type"
                      ]
                    }
                  }
                },
                "primaryType": {
                  "type": "string"
                },
                "domain": {
                  "type": "object",
                  "additionalProperties": {}
                },
                "message": {
                  "type": "object",
                  "additionalProperties": {}
                }
              },
              "required": [
                "types",
                "primaryType",
                "domain",
                "message"
              ]
            },
            "verification_chain_id": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "description": "Network where the signature is valid; defaults to domain.chainId, required without one"
            },
            "valid_until": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)$",
              "description": "Unix seconds"
            }
          },
          "required": [
            "schema_version",
            "kind",
            "signer",
            "typed_data"
          ]
        },
        "artifact_reference": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "artifact_reference"
            },
            "artifact_type": {
              "type": "string",
              "const": "typed_data_signature_request"
            },
            "url": {
              "type": "string"
            },
            "bytes": {
              "type": "integer",
              "exclusiveMinimum": 0
            },
            "integrity": {
              "type": "object",
              "properties": {
                "algorithm": {
                  "type": "string",
                  "const": "keccak256"
                },
                "value": {
                  "type": "string",
                  "pattern": "^0x[0-9a-fA-F]{64}$"
                }
              },
              "required": [
                "algorithm",
                "value"
              ]
            }
          },
          "required": [
            "kind",
            "artifact_type",
            "url",
            "bytes",
            "integrity"
          ]
        }
      },
      "required": [
        "wallet_id",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "idempotentHint": true
    }
  },
  {
    "name": "wallet_get_signature_result",
    "description": "Read a signature request's result; write access to wallet_id (bare 0x address), originating grant only. Each read re-applies the current signing policy of policy_chain_id; expired or denied requests release nothing.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "wallet_id": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "request_id": {
          "type": "string",
          "format": "uuid"
        }
      },
      "required": [
        "wallet_id",
        "request_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_sign_message",
    "description": "Request an ERC-1271 service-key signature over an EIP-191 personal message given as hex bytes (never raw eth_sign); request.kind is exactly \"personal_message_signature_request\". Write access to wallet_id, the bare 0x address, not an account_id. The signing policy of verification_chain_id, which must be enabled and where alone the signature is valid, decides: allow signs now, unmatched waits for owner approval, deny refuses. No EOA fallback. Poll wallet_get_signature_result.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "wallet_id": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "idempotency_key": {
          "type": "string",
          "format": "uuid"
        },
        "request": {
          "type": "object",
          "properties": {
            "schema_version": {
              "type": "string",
              "const": "1"
            },
            "kind": {
              "type": "string",
              "const": "personal_message_signature_request"
            },
            "signer": {
              "type": "string",
              "pattern": "^0x[0-9a-fA-F]{40}$"
            },
            "message": {
              "type": "string",
              "pattern": "^0x(?:[0-9a-fA-F]{2})*$"
            },
            "verification_chain_id": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "description": "Network where the signature is valid"
            },
            "valid_until": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*)$",
              "description": "Unix seconds"
            }
          },
          "required": [
            "schema_version",
            "kind",
            "signer",
            "message",
            "verification_chain_id"
          ]
        }
      },
      "required": [
        "wallet_id",
        "idempotency_key",
        "request"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "idempotentHint": true
    }
  },
  {
    "name": "wallet_get_signing_policy",
    "description": "Read a wallet's signing policy on one network (wallet_id is the bare 0x address): rules, revision, JSON schema and this connection's proposals. Each network has its own; a new one has no rules, so every signature there needs owner review. Transaction policies never authorize signatures.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "wallet_id": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "chain_id": {
          "type": "integer",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "wallet_id",
        "chain_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_propose_signing_policy",
    "description": "Propose a complete signing policy for one network of a wallet (wallet_id is the bare 0x address), for owner passkey review (write access). Once saved it replaces only that network's signing policy; the active one is unchanged until then. Call wallet_get_signing_policy first and follow its schema; never invent a policy shape.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "wallet_id": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "chain_id": {
          "type": "integer",
          "exclusiveMinimum": 0
        },
        "idempotency_key": {
          "type": "string",
          "format": "uuid"
        },
        "policy": {
          "type": "object",
          "additionalProperties": {}
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        }
      },
      "required": [
        "wallet_id",
        "chain_id",
        "idempotency_key",
        "policy",
        "reason"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "destructiveHint": false,
      "idempotentHint": true,
      "openWorldHint": false
    }
  },
  {
    "name": "wallet_batch_eth_call",
    "description": "Run 1–1024 eth_calls on one network at one block through Cloud Wallet's RPC: inline calls, or a producer read_calls_reference as reference. Returns raw return_data per call with its id echoed; nothing is ABI-decoded. Without from, all calls run in one Multicall3 aggregate3 (msg.sender is Multicall3) for one RPC request; with from, each runs as that caller for one request each. Budgeted per owner and per client IP; honor retry_after. Reads bypass policy and never sign or send.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "chain_id": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[1-9]\\d{0,15}$"
            },
            {
              "type": "integer",
              "exclusiveMinimum": 0
            }
          ],
          "description": "Decimal chain ID of a supported network"
        },
        "block_parameter": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "latest",
                "pending",
                "safe",
                "finalized",
                "earliest"
              ]
            },
            {
              "type": "string",
              "pattern": "^0x(?:0|[1-9a-f][0-9a-f]{0,15})$"
            }
          ],
          "description": "Block tag or lowercase 0x hex block number",
          "default": "latest"
        },
        "from": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$"
        },
        "calls": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "to": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              "data": {
                "type": "string",
                "pattern": "^0x(?:[0-9a-fA-F]{2})*$"
              }
            },
            "required": [
              "to"
            ]
          },
          "minItems": 1,
          "maxItems": 1024
        },
        "reference": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "artifact_reference"
            },
            "artifact_type": {
              "type": "string",
              "const": "read_calls"
            },
            "url": {
              "type": "string"
            },
            "bytes": {
              "type": "integer",
              "exclusiveMinimum": 0
            },
            "integrity": {
              "type": "object",
              "properties": {
                "algorithm": {
                  "type": "string",
                  "const": "keccak256"
                },
                "value": {
                  "type": "string",
                  "pattern": "^0x[0-9a-fA-F]{64}$"
                }
              },
              "required": [
                "algorithm",
                "value"
              ]
            }
          },
          "required": [
            "kind",
            "artifact_type",
            "url",
            "bytes",
            "integrity"
          ],
          "description": "A producer's read_calls_reference, passed through as a value from its result in the same code block; a retyped url, bytes or integrity fails verification."
        }
      },
      "required": [
        "chain_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true
    }
  },
  {
    "name": "wallet_fetch_balances",
    "description": "Read an account's native balance (under token 0x0000000000000000000000000000000000000000), ERC-20 balances for up to 1000 tokens and allowances toward up to 16 spenders in one eth_call. Only nonzero amounts are returned, as decimal base units; broken or non-ERC-20 tokens read as zero. Read access; the network need not be enabled. One RPC request.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "account_id": {
          "type": "string"
        },
        "tokens": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^0x[0-9a-fA-F]{40}$"
          },
          "maxItems": 1000,
          "default": []
        },
        "spenders": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^0x[0-9a-fA-F]{40}$"
          },
          "maxItems": 16,
          "default": []
        }
      },
      "required": [
        "account_id"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true
    }
  }
]
