Skip to main content
Glama
ODATANO

@odatano/nightgate-mcp

Official
by ODATANO

send_token

Sends shielded tokens from a wallet to another shielded address with a sponsor paying the fee, then submits the proven transfer and returns settlement status and receipt for payouts or invoices.

Instructions

Send an amount of a shielded token from this wallet to another shielded address, with the sponsor paying the fee: a payout, a salary, an invoice settlement. The transfer is built and proven here from the wallet's coins (at most maxInputs of them); only the fee-unpaid bytes go to the server, which records the declared type and amount and submits. The recipient needs nothing but its address. Needs sponsorTransfer in the grant, the type on the sponsor's list and NIGHTGATE 0.39.0. The tool also waits for the block (about a minute more) and then carries the instance's signed receipt; if that wait runs out, receipt is null and the same call again fetches it. The tool waits until the job settled (about 1 minute) and returns { status, txHash, transactionHash, result }. failed: next says what to do. If the call was cut off or came back pending, run it again with the same arguments: it picks up the job it started and submits nothing new (the answer says deduplicated). A second, separate call with the same arguments needs a new idempotencyKey.

Input Schema

NameRequiredDescriptionDefault
toYesThe recipient's shielded address (mn_shield-addr_...), as its get_attester_identity or get_swap_wallet shows it
amountYesAtoms to send; a decimal string is exact
tokenTypeYesRaw token type (64 hex), what derive_token_type or mint_token returns
idempotencyKeyNoDedupes retries

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.20.3

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: the transfer is built and proven locally from the wallet's coins, only fee-unpaid bytes reach the server, the recipient needs only an address. It also discloses the two blocking waits (~1 minute each), the returned shape { status, txHash, transactionHash, result }, that receipt can be null and re-fetched, and that failed results carry a `next` instruction.

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

Conciseness3/5

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

Front-loaded with the purpose, which is good, but the middle is a run-on with duplicated waiting language ('waits for the block (about a minute more)' then 'waits until the job settled (about 1 minute)') and a redundant 'txHash, transactionHash' pair. Several sentences could be merged without losing information.

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 sponsored transfer with no annotations and no output schema, the description covers prerequisites, local proof construction, server interaction, latency, return shape, receipt-null handling, and idempotent retry. Minor gaps: what happens on insufficient coins, and the maxInputs reference that has no corresponding parameter.

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, but the description adds real meaning to idempotencyKey beyond the schema's bare 'Dedupes retries': same-argument retries are absorbed into the existing job and a separate transfer requires a fresh key. It also explains that at most maxInputs coins are consumed, though maxInputs is oddly referenced without being a declared parameter.

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

Purpose4/5

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

States a specific verb and resource with concrete scope: send a shielded token amount from this wallet to another shielded address, fee paid by the sponsor. The example uses (payout, salary, invoice settlement) make the intent unambiguous. It does not name any sibling tool to contrast against (e.g. sponsor_finalized_transaction or build_sponsorable_transaction), so it stops short of full sibling differentiation.

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?

Gives clear preconditions (sponsorTransfer in the grant, token type on the sponsor's list, NIGHTGATE 0.39.0) and explicit retry rules: reuse the same arguments after a cut-off/pending call to dedupe, and use a new idempotencyKey only for a genuinely separate transfer. What it lacks is any 'use X instead when...' routing against the many sibling sponsor tools.

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