Walletguide
DevelopersMCP

The tools

What an agent connected to Walletguide can actually call, how the tools are named, and which ones are marked destructive.

One tool per API route, generated from the same OpenAPI document as the endpoint reference. A tool takes the parameters its route takes.

Naming

<resource>_<action>, from the URL shape:

RouteTool
GET /walletswallets_list
GET /wallets/{walletId}/assetsassets_list
GET /wallets/{walletId}/assets/{id}assets_get
POST /wallets/{walletId}/transactions/searchtransactions_search
POST /wallets/{walletId}/data/netWorthTimeSeriesdata_netWorthTimeSeries

How many

47 read-only. With writes enabled, 149.

That gap is the argument for leaving writes off unless you need them: the read-only catalogue is roughly 12k tokens of context against 40k, spent before the model has read a single number of yours.

A grant without write access is not shown the mutating tools. They are absent from the catalogue rather than present and refused, so an agent never plans around a tool it cannot use.

Annotations

Every tool carries the three MCP hints, always set:

  • readOnlyHint — true for the 47
  • destructiveHint — true for deletes, bulk deletes, and merges
  • openWorldHint — always false; everything is scoped to one wallet

A merge is marked destructive even though it is a POST, because folding one thing into another deletes the original. A client that asks before running a destructive tool will ask for those.

The ones worth reaching for

  • data_* — the seventeen slices. Any question about a total, an average or a series belongs here.
  • transactions_search — a POST that only reads; its filters are too structured for a query string. It is available to read-only grants for exactly that reason.
  • wallets_list — the first call an OAuth-connected agent should make, since a grant can reach several wallets and tools need to be told which.

Results

Every tool answers { result: … }, with the route's response inside, unchanged. The envelope is declared in the output schema and the contents are not — describing every response shape put outputSchema at nearly half of the whole catalogue payload, which is context better spent on the inputs that tell a model what to send.

On this page