Skip to main content
Glama
BananaCrystal

BananaCrystal MCP Server

Official

Agent Payment Infrastructure

The MCP Server That Gives AI Agents a Wallet

One endpoint. Every payment capability. The financial primitive of the agent economy.

Get API Key npm License: MIT Hedera MCP

Works with Claude · LangChain · CrewAI · AutoGPT · Cursor · Windsurf · Any MCP client

"The agent economy is forming now. Developers who integrate payment rails first will define how AI agents transact. This is that infrastructure."


If this project helps you build payment-capable agents, please star the repo on GitHub because it helps other developers find it.

Star on GitHub

How to star: Open the repo, then click the ⭐ Star button in the top-right corner (free GitHub account required).


What this is

BananaCrystal provides agent payment infrastructure, which is the missing financial layer of the AI agent stack.

Traditional payment rails (banks, card networks, legacy APIs) were built for humans: human identity, human authorization, human operating hours. When AI agents try to use them they fail architecturally. Fixed fees make micropayments economically impossible, KYC requirements are difficult for agents to satisfy, and 3 to 5 day settlement windows break autonomous workflows.

This MCP server is the alternative. One configuration line gives any AI agent:

  • An agent wallet with a real stablecoin balance

  • Autonomous payment authority within operator-defined spending limits

  • 150+ currencies, including USDb, EURb, NGNb, GBPb, CADb, and more

  • On-chain settlement in under 5 seconds on Hedera

  • An immutable audit trail where every agent action is recorded

  • Real-time currency data via the dedicated rate service for current rates, historical data, batch conversions, and statistics

This is not a product feature. This is a new category: autonomous payments, the financial primitive of the agent economy built for machines from first principles.


Related MCP server: remit.md MCP Server

Why AI agents need their own payment rails

Traditional rails

BananaCrystal

Fee per transaction

$0.30 + 2.9% (Stripe) · $15–35 (wire)

0.3% transfers · 0.5% swaps · free for reads

Settlement speed

1–5 business days

Under 5 seconds, absolute finality

Identity model

Human KYC required

Programmatic Agent ID

Authorization

Human approval per transaction

Autonomous programmatic policy

Operating hours

Banking hours, weekdays

24/7/365

Micropayments

Impossible at $0.30/tx

Native and sub-cent viable

Spending controls

Card limit only

Per-tx caps, daily limits, allowlists, scopes

Audit trail

Monthly statements

Immutable on-chain, machine-readable

1,000 transactions/day on Stripe: $109,500/year in fees alone. 1,000 transactions/day on BananaCrystal: $365/year. The agent economy runs on micropayments. The infrastructure fee must be microscopic or the economics will collapse entirely.


Quick start: A working agent in 5 minutes

Step 1: Install

npm install -g @bananacrystal/mcp-server

Step 2: Get a free API key

Sign up at agents.bananacrystal.comAccount → API Keys → Create MCP key.

Fees: Transfers: 0.3% of amount · Swaps: 0.5% of amount · Read-only operations (balances, history, rates): free. Rate service (historical data, batch conversions, statistics): free with "rate" scope key.

Start with a Sandbox key for fake money, zero risk, and full functionality. Sandbox keys start with bc_test_ so you can always tell them apart from live keys. Switch to a Live key (no prefix) when ready.

Step 3: Pick your agent framework

Create a Sandbox key at agents.bananacrystal.com/account → API Keys → Create Sandbox Key.

Sandbox keys start with bc_test_. This prefix is how you and the package know it's a test key with no real money. Live keys have no prefix. The package automatically routes each key to the correct endpoint.

{
  "mcpServers": {
    "bananacrystal": {
      "command": "bananacrystal-mcp",
      "env": {
        "BANANACRYSTAL_API_KEY": "bc_test_your_sandbox_key_here"
      }
    }
  }
}

Sandbox behaviour:

  • Pre-seeded balances: 10,000 USDb · 5,000,000 NGNb · 50,000 GHSb · 1,000,000 KESb · 150,000 ZARb

  • All 40 MCP payment tools available

  • Rate service endpoints available at /mcp/sandbox/rate/* (no auth needed)

  • OTP codes are returned directly in the API response, so no email is sent

  • KYC always approved

  • Spend limits unlimited

  • Reset balances anytime with the reset_sandbox_balance tool

Switch to a live key when you're ready. Same tools, same config, real money and live rates.

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "bananacrystal": {
      "command": "bananacrystal-mcp",
      "env": {
        "BANANACRYSTAL_API_KEY": "bc_live_your_key_here"
      }
    }
  }
}

Restart Claude Desktop. Then ask it:

"Check my BananaCrystal balance"
"Transfer 50 USDb to 0.0.12345 as payment for the data report"
"Swap 100 USDb to NGNb at the current rate"
"Show my last 10 transactions"

Your agent now has a payment wallet.

Add to your IDE MCP config:

{
  "mcpServers": {
    "bananacrystal": {
      "command": "bananacrystal-mcp",
      "env": {
        "BANANACRYSTAL_API_KEY": "bc_live_your_key_here"
      }
    }
  }
}

Your coding agent can now pay for API calls, data feeds, and compute per use.

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
import asyncio, os

async def create_payment_agent():
    client = MultiServerMCPClient({
        "bananacrystal": {
            "command": "bananacrystal-mcp",
            "env": {
                "BANANACRYSTAL_API_KEY": os.getenv("BANANACRYSTAL_API_KEY")
            },
            "transport": "stdio"
        }
    })
    tools = await client.get_tools()
    llm = ChatOpenAI(model="gpt-4o", temperature=0)
    prompt = ChatPromptTemplate.from_messages([
        ("system", """You are a financial operations AI agent with an
        agent wallet on BananaCrystal agent payment infrastructure.
        Always check balance before large transfers.
        Always include a memo with every payment.
        Report the transaction ID for every settled payment."""),
        ("human", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad")
    ])
    agent = create_openai_tools_agent(llm, tools, prompt)
    return AgentExecutor(agent=agent, tools=tools, verbose=True)

agent = asyncio.run(create_payment_agent())
result = agent.invoke({
    "input": "Check balance, then pay 12.50 USDb to vendor:data-provider-01 for today's market data report"
})
# Agent checks balance → verifies limits → requests OTP → executes transfer
# Settlement confirmed on Hedera in 3.2s · txId: 0.0.789@1711234567
from crewai import Agent, Task, Crew
from langchain_mcp_adapters.client import MultiServerMCPClient
import asyncio, os

async def setup_payment_tools():
    client = MultiServerMCPClient({
        "bananacrystal": {
            "command": "bananacrystal-mcp",
            "env": {"BANANACRYSTAL_API_KEY": os.getenv("BANANACRYSTAL_API_KEY")},
            "transport": "stdio"
        }
    })
    return await client.get_tools()

payment_tools = asyncio.run(setup_payment_tools())

treasury_agent = Agent(
    role="Autonomous Treasury Manager",
    goal="Monitor stablecoin balances and execute payments within defined limits",
    backstory="""You are an AI-native finance agent on the BananaCrystal
    agent payment infrastructure. You manage a multi-currency stablecoin
    treasury, executing transfers, swaps, and vendor payments autonomously.""",
    tools=payment_tools,
    verbose=True
)

treasury_task = Task(
    description="""Check USDb balance. If above 10,000 USDb, swap 5,000 USDb
    to EURb. Then pay vendor invoice of 500 USDb to vendor:accounting-service-01.""",
    agent=treasury_agent,
    expected_output="Balance checked, swap executed, vendor paid. All transaction IDs logged."
)

result = Crew(agents=[treasury_agent], tasks=[treasury_task]).kickoff()
plugins:
  - name: BananaCrystal Payments
    package: "@bananacrystal/mcp-server"
    description: >
      Agent payment infrastructure with autonomous stablecoin transfers, 
      currency swaps, and fiat operations on the Hedera blockchain.
    env:
      BANANACRYSTAL_API_KEY: "${BC_API_KEY}"

40 production-ready payment tools

Every tool an agent needs for complete autonomous payment capability. All live. All guarded.

Tool

What it does

ping

Health check

get_server_info

Server version and environment

echo

Echo a message

get_my_profile

Your profile, wallets, and MCP key info

get_balances

Token balances (all or specific token)

get_exchange_rate

Live buy/sell rates for any currency

list_supported_currencies

All supported stablecoins

list_available_tokens

All Hedera token IDs

get_transaction_history

Paginated transaction log with filters

get_my_limits

API key spending limits and current usage

estimate_swap_fees

Calculate fees before swapping

get_agent_config

Look up another agent's payment config

check_approval_status

Status of a pending approval request

get_kyc_status

KYC verification status

get_deposit_status

Fiat deposit status by transfer ID

get_withdrawal_status

Fiat withdrawal requests

get_escrow_balances

Escrow balance breakdown

get_escrow_history

Full escrow transaction history

list_offers

Browse prediction market offers

get_offer

Single offer details

get_my_offers

Your offers

list_trades

Browse all trades

get_trade

Single trade details

get_my_trades

Your trades

Tool

What it does

request_transfer_otp

Step 1: Request OTP code (email in live, returned directly in sandbox)

transfer_tokens

Step 2: Execute transfer with OTP

Tool

What it does

swap_currency

Swap between any two supported stablecoins

Tool

What it does

initiate_kyc

Start KYC verification

initiate_deposit

Deposit via ACH or wire

request_withdrawal

Withdraw to bank account

Tool

What it does

create_offer

Create a prediction market offer

update_offer

Edit an offer (before any trades)

delist_offer

Remove offer from marketplace

delete_offer

Permanently delete offer

engage_offer

Trade against an offer

cancel_trade

Cancel an active trade

Tool

What it does

request_agent_transaction

Request a transaction from another user's agent

execute_approved_transaction

Execute after approval

update_my_agent_settings

Configure approval rules and webhook URL

Tool

What it does

reset_sandbox_balance

Reset fake balances to defaults


Backend rate service (separate from MCP tools)

Beyond the 40 MCP tools above, BananaCrystal backend provides a separate rate service for comprehensive currency exchange operations:

The rate service is a backend HTTP API, not an MCP tool. It's available to agents via REST endpoints (not through this MCP server's tool interface):

Endpoint

What it does

GET /mcp/rate/currencies

List all supported currencies

GET /mcp/rate/current?from=USD&to=NGN

Get current exchange rate between two currencies

GET /mcp/rate/convert?from=USD&to=NGN&amount=100

Convert amount from one currency to another

POST /mcp/rate/batch-convert

Convert multiple currency pairs in one request

GET /mcp/rate/history?from=USD&to=NGN&startDate=...&endDate=...

Get historical rates over a date range

GET /mcp/rate/stats?from=USD&to=NGN&days=30

Get rate statistics (high/low/average) for a period

How to use: Create an API key with rate scope, then call these endpoints directly from your agent or backend:

# Get current rate
curl -H "x-api-key: bc_live_your_key_with_rate_scope" \
     "https://agentic.bananacrystal.com/api/v1/mcp/rate/current?from=USD&to=NGN"

# Response:
{
  "from": "USD",
  "to": "NGN",
  "rate": 1250.50,
  "timestamp": "2026-04-28T17:08:24Z"
}

Note: These are backend HTTP endpoints, not MCP tools. If you need real-time rate data in your agent workflows, integrate these endpoints directly into your agent logic rather than using the MCP tool interface.

Sandbox testing: Use /mcp/sandbox/rate/* endpoints (no authentication required) to test rate operations.


Real-world agent economy use cases

Task:    "Monitor USDb balance. If above 50,000, swap 20% to EURb."

Flow:    get_balances → check threshold → estimate_swap_fees
         → swap_currency → audit log written to Hedera

Result:  Rebalanced $42,000 in 4.2 seconds.
         Human involvement: zero.
         Fee: 0.5% of swap amount.
Task:    "Process refund for order #84921. Customer verified. Amount: 45.00 USDb."

Flow:    Verify eligibility → transfer_tokens → settlement confirmed

Result:  Before: 48-hour queue, 3 staff touchpoints.
         After:  2.8 second settlement. Zero staff involvement.
Task:    "Verify task completion by agent:worker-03. If verified, pay 12.50 USDb."

Flow:    Orchestrator verifies output → request_agent_transaction
         → agent:worker-03 receives payment atomically

This is the agent economy: agents hiring agents, paying for output.
Task:    "Pay Nigerian vendor 500 USD equivalent in NGNb."

Flow:    get_exchange_rate (USDb/NGNb: 1,580)
         → swap_currency (500 USDb → 790,000 NGNb)
         → transfer_tokens to vendor wallet

Traditional wire: 3–5 days, $35 fee.
BananaCrystal:    4.1 seconds, 0.3% fee.
Task:    "Query the pricing data API. Pay per result."

Flow:    Agent calls data provider → provider returns HTTP 402
         → agent calls transfer_tokens (0.3% of transfer amount)
         → data unlocked → agent continues workflow

1,000 queries/day = $1.00 in payments + $1.00 in fees.
Economically impossible on Stripe ($300/day in fees alone).
Task:    "Show me rates and convert amounts for USD/NGN/EUR/GHS."

Flow:    Agent calls rate service (no MCP needed):
         GET /api/v1/mcp/rate/current?from=USD&to=NGN
         → returns {rate: 1580.50, timestamp, source}

         For batch: POST /api/v1/mcp/rate/batch-convert
         → converts [USD→NGN, EUR→GHS, GBP→NGN] in one call

         For analytics: GET /api/v1/mcp/rate/history
         → retrieves historical rates (high/low/average over days/weeks)

Rate service is a free query; use it alongside payment tools for complete
currency workflows. Create a "rate" scope key for access.

Security architecture

Layer

Mechanism

What it prevents

API Key Scopes

read_only, transfer, swap, fiat per key

Agent scope creep

Spending Limits

Per-tx max + daily cap enforced server-side

Runaway agent spending

OTP Verification

6-digit code to registered email for transfers

Unauthorized payments

Idempotency Keys

Redis deduplication per request

Double-spend on retries

Rate Limiting

Per-key per-minute and per-day caps

Runaway agent loops

Immutable Audit

Every tool call written to Hedera consensus layer

Tampered transaction history

What this package does NOT have access to:

  • Your private keys, which are managed server-side

  • Other users' wallets or data

  • The ability to modify its own spending limits

  • Anything outside your API key's scope

This MCP server is a thin authenticated client. All security enforcement executes server-side at BananaCrystal's infrastructure layer, not in this package.


Configuration

Variable

Required

Default

Description

BANANACRYSTAL_API_KEY

Yes

N/A

Your API key from agents.bananacrystal.com/account. Sandbox keys start with bc_test_ (no real money). Live keys have no prefix.

BANANACRYSTAL_API_URL

No

https://agentic.bananacrystal.com/mcp

Override API endpoint (for MCP tools). Rate service uses /api/v1/mcp/rate/* endpoints on same domain.

DEBUG

No

false

Enable verbose debug logging

API Scopes: Different API keys can have different scopes:


Pricing

All MCP payment tools (40 tools) included with any API key. Rate service adds optional enhanced currency operations.

Read-only operations are always free. Fees only apply when moving money or accessing advanced rate features.

Operation

Fee

Balance checks, history, rates, profile

Free

Basic rate lookups (MCP tools)

Free

Advanced rate service (historical, batch, stats)

Free (with "rate" scope)

Token transfers (transfer_tokens)

0.3% of transfer amount

Currency swaps (swap_currency)

0.5% of swap amount

Fiat deposits / withdrawals

Varies by rail (ACH, wire)

Tier

Volume

Cost

For

Free

First 1,000 API calls/month

$0

Development and testing

Pay-per-use

1,001+ /month

0.3% transfers · 0.5% swaps

Production agents at any scale

Enterprise

Unlimited

Contact us

High-volume autonomous payment networks

No monthly fee. No seat pricing. No lock-in.

Note: Rate service queries (historical data, statistics, batch conversions) are included in your API call tier. Create a "rate" scope key to use these operations; see Rate Service for details.


Frequently asked questions

Agent payment infrastructure is the class of financial technology designed from first principles for AI agents as the primary economic actor. It provides agent wallets with programmatic identity (no human KYC), autonomous transaction authorization without per-transaction human approval, machine-speed settlement, and machine-readable audit trails.

Traditional payment infrastructure (Stripe, bank APIs, card networks) assumes a human is the accountable party behind every payment. Agent payment infrastructure assumes the payer may be an autonomous software process operating 24/7 at machine speed. These are architecturally different requirements, which is why BananaCrystal exists as a category, not just a product.

Seven architectural differences:

  1. Identity: Stripe requires human KYC and a legal entity, whereas BananaCrystal issues agent wallets with programmatic identity in seconds.

  2. Authorization: Stripe requires a human to authorize each transaction (3DS2, card PIN, etc.), while BananaCrystal uses programmatic spending policy set once by the operator.

  3. Fees: Stripe charges $0.30 + 2.9% per transaction, making micropayments economically impossible. BananaCrystal charges a percentage of the amount (0.3% for transfers, 0.5% for swaps) with no fixed fee, making micropayments viable.

  4. Settlement: Stripe settlements take 2 to 3 days, but BananaCrystal settles on Hedera in under 5 seconds with absolute finality.

  5. Hours: Banks and card networks have operating hours, while BananaCrystal is available 24/7/365.

  6. Fraud detection: Stripe's fraud system is trained on human transaction patterns and flags automated agent behavior as suspicious, but BananaCrystal is designed for machine transaction patterns.

  7. Spending controls: Stripe offers card limits only, whereas BananaCrystal offers per-transaction caps, daily limits, recipient allowlists, and currency restrictions, all enforced at the infrastructure level.

Spending controls are enforced at the infrastructure layer rather than in your application or agent's code, so the agent cannot override them.

You set:

  • Daily spending cap: A hard limit on total daily spend (e.g. $100/day)

  • Per-transaction maximum: No single payment over a threshold (e.g. $25 max)

  • Recipient allowlist: The agent can only pay pre-approved wallet addresses

  • Currency restrictions: The agent can only transact in currencies you permit

  • OTP requirement: Transfers above a threshold require a 6-digit email code

A runaway agent hitting its limit receives a SpendingLimitExceeded error and stops. No funds move.

An agent wallet is a non-custodial financial account owned and operated by an AI agent instead of a human. Its identity derives from a programmatic agent ID rather than government documents or personal KYC verification. The wallet holds a real stablecoin balance, has an on-chain Hedera address, and can send and receive value autonomously within the spending limits you configure.

When you sign up at agents.bananacrystal.com/account and create an API key, an agent wallet is automatically provisioned. Your agents reference it via the API key, so they never need to know private keys or manage cryptographic identity directly.

Any framework that supports the Model Context Protocol (MCP). Confirmed integrations:

  • Claude Desktop (Anthropic) has native MCP support

  • Cursor, Windsurf, and Cline are IDE agents with MCP support

  • LangChain support is available via the langchain-mcp-adapters package

  • CrewAI works via the LangChain MCP adapter

  • AutoGPT works via plugin configuration

  • Custom agents, or any agent that can call JSON-RPC over stdio or HTTP, are supported

OpenAI adopted MCP in March 2025, and Microsoft added it to Copilot Studio in May 2025. Gartner projects that 75% of API gateway vendors will support MCP by 2026. Since this is the standard, you should build on it.

150+ stablecoin currency pairs. The core flow:

  1. Deposit USDC (external stablecoin) into your BananaCrystal account

  2. Convert to USDb (BananaCrystal's native 1:1 USD stablecoin)

  3. Swap USDb to any of 150+ local currency stablecoins

  4. Withdraw back to USDC or your local bank anytime

Every swap settles on Hedera in under 5 seconds. No banks. No SWIFT. No weekends.

Fees: Token transfers cost 0.3% of the transfer amount. Currency swaps cost 0.5% of the swap amount. All other operations are free.

A sample of supported currencies:

Currency

Token

Currency

Token

US Dollar

USDb

Nigerian Naira

NGNb

Euro

EURb

Ghanaian Cedi

GHSb

British Pound

GBPb

Kenyan Shilling

KESb

UAE Dirham

AEDb

South African Rand

ZARb

Indian Rupee

INRb

Egyptian Pound

EGPb

Canadian Dollar

CADb

Ethiopian Birr

ETBb

Australian Dollar

AUDb

Moroccan Dirham

MADb

Japanese Yen

JPYb

Ugandan Shilling

UGXb

View all 150+ supported currencies →

Use list_available_tokens to get the live list with Hedera token IDs and current exchange rates.

Hedera is an enterprise-grade public distributed ledger chosen for three properties critical to autonomous agent payments:

  • Absolute finality in under 5 seconds: Unlike Ethereum's probabilistic finality or Bitcoin's 10-minute blocks, Hedera's hashgraph consensus provides certainty that a transaction has cleared. An agent's next action depends on knowing the payment settled, making absolute finality a functional requirement rather than a preference.

  • Low transaction fees: Hedera's fee structure makes agent micropayments economically viable at scale. No other production blockchain offers this combination of speed and cost.

  • Carbon-negative network: This is the only carbon-negative public distributed ledger, which matters for enterprises running agents at millions of transactions per month.

Yes, it is MIT licensed. The server is a thin authenticated client that makes HTTP requests to BananaCrystal's API. You can fork it, modify it, and run it locally. A mock server is included for development without a real API key.

To run locally without an API key:

git clone https://github.com/BananaCrystal/mcp-server-bananacrystal.git
cd mcp-server-bananacrystal
npm install && npm run mock

The mock server returns realistic data so you can build integrations, write tests, and explore all 40 tools without touching production.

The agent economy is the emerging economic layer where AI agents participate as independent economic actors. They are not just tools that assist humans, but participants that earn, spend, negotiate, and operate on their own financial behalf.

It requires three new infrastructure primitives: agent wallets (programmatic identity, no human KYC), autonomous payments (programmatic spending policy, not per-transaction human approval), and machine-speed settlement (on-chain, under 5 seconds, machine-readable confirmation).

BananaCrystal is the agent payment infrastructure layer. We don't sell a product; we represent a category called AI-native finance, which is a financial system built for machines rather than adapted from one built for humans. The agent economy is forming now, and developers who integrate payment rails first will define how it works.

Do not open a public GitHub issue for security vulnerabilities. Email support@bananacrystal.com with:

  1. Description of the vulnerability

  2. Steps to reproduce

  3. Potential impact

We will acknowledge within 24 hours and aim to resolve critical issues within 72 hours. We do not currently have a formal bug bounty program but we recognize responsible disclosures publicly and in our changelog.

Yes, and you should always start there.

Create a Sandbox key at agents.bananacrystal.com/account → API Keys → Create Sandbox Key. Sandbox keys start with bc_test_ so you can always tell them apart from live keys (which have no prefix). The package automatically routes each key to the correct endpoint.

What sandbox gives you:

  • Pre-seeded balances: 10,000 USDb · 5,000,000 NGNb · 50,000 GHSb · 1,000,000 KESb · 150,000 ZARb

  • OTP codes are returned directly in the API response, so there is no email sent and no waiting

  • KYC always approved instantly

  • Spending limits are unlimited

  • Reset balances anytime with the reset_sandbox_balance tool

All 40 MCP tools work identically in sandbox. Additionally, rate service endpoints are available in sandbox at /mcp/sandbox/rate/* without requiring authentication, which is perfect for testing currency exchange operations.

When you're ready to go live, swap bc_test_your_key for a live key. It uses the same configuration and tools but with real money.

There is also a local mock server for contributors who want to develop without any API key at all:

git clone https://github.com/BananaCrystal/mcp-server-bananacrystal.git
cd mcp-server-bananacrystal
npm install && npm run mock

The mock server runs on http://localhost:3000 and returns realistic data for all tools.

The rate service is a separate backend HTTP API (not part of the 40 MCP tools). It provides comprehensive currency exchange operations:

  • List all supported currencies

  • Get current exchange rates between any two currencies

  • Convert amounts instantly

  • Batch convert multiple currency pairs

  • Retrieve historical rate data over date ranges

  • Get rate statistics (high/low/average)

Key difference: MCP tools are accessed through the MCP server interface (as described above). The rate service is accessed directly via HTTP REST endpoints.

How to use rate service:

  1. Create an API key with rate scope at agents.bananacrystal.com/account

  2. Call rate endpoints directly:

curl -H "x-api-key: bc_live_your_key_with_rate_scope" \
     "https://agentic.bananacrystal.com/api/v1/mcp/rate/current?from=USD&to=NGN"

Sandbox testing: Use /mcp/sandbox/rate/* endpoints (no authentication required).

When to use rate service vs MCP tools:

  • Use rate service for standalone rate lookups or integration into backend systems

  • Use MCP tools for autonomous agent workflows with full payment capabilities

  • They are complementary, so you can use both if you need rates and payments

See Backend rate service section for full endpoint reference.

After installing the package globally (npm install -g @bananacrystal/mcp-server), the bananacrystal-mcp binary is available on your PATH.

Primary use: Running the MCP server

bananacrystal-mcp
# Starts the MCP server over stdio, ready for Claude Desktop or any MCP client

Check version:

bananacrystal-mcp --version

Debug mode: Verbose logging to stderr

DEBUG=true bananacrystal-mcp

Override the API endpoint (e.g. point to local mock):

BANANACRYSTAL_API_URL=http://localhost:3001 bananacrystal-mcp

Test with MCP Inspector (interactive tool explorer):

export BANANACRYSTAL_API_KEY=bc_test_your_key_here
npx @modelcontextprotocol/inspector node dist/index.js

The MCP Inspector opens a browser UI where you can call any of the 40 tools interactively. This is useful for exploring the API before wiring it into an agent.


Development and local testing

# Clone
git clone https://github.com/BananaCrystal/mcp-server-bananacrystal.git
cd mcp-server-bananacrystal

# Install
npm install

# Start mock server: No API key needed
# All 40 MCP tools + rate service endpoints return realistic mock data
npm run mock

# Build from source
npm run build

# Run in development mode (requires real API key with appropriate scopes)
export BANANACRYSTAL_API_KEY=bc_test_your_sandbox_key
npm run dev

# Test rate service endpoints on mock server (no auth needed):
curl http://localhost:3001/api/v1/mcp/sandbox/rate/currencies
curl http://localhost:3001/api/v1/mcp/sandbox/rate/current?from=USD&to=NGN

# Test with MCP Inspector (for 40 MCP tools)
export BANANACRYSTAL_API_KEY=bc_test_your_key_here
npx @modelcontextprotocol/inspector node dist/index.js

Configure your agent to use the mock server (includes rate service):

{
  "mcpServers": {
    "bananacrystal": {
      "command": "bananacrystal-mcp",
      "env": {
        "BANANACRYSTAL_API_KEY": "bc_mock_test",
        "BANANACRYSTAL_API_URL": "http://localhost:3001"
      }
    }
  }
}

Troubleshooting

  • Verify the key is copied correctly from agents.bananacrystal.com/account

  • Sandbox keys start with bc_test_ for testing without real money. Live keys have no prefix.

  • Verify key is active at agents.bananacrystal.com/account → API Keys

  • Check the key has the required scope for the tool being called (transfer scope for transfer_tokens, swap scope for swap_currency, rate scope for rate service)

  • Check for whitespace or truncation in the environment variable

This is working as designed; limits are enforced at the infrastructure level and cannot be bypassed.

To increase limits: agents.bananacrystal.com/account → API Keys → Edit → adjust daily cap or per-transaction maximum.

If you are building a production agent, set limits conservatively first and increase after observing real usage patterns.

  1. Validate config file is valid JSON at jsonlint.com

  2. Confirm file is at the correct path for your OS

  3. Restart the application completely (full quit, not just reload)

  4. Check the application's MCP logs for the exact error message

  • Check spam/junk folder for email from BananaCrystal

  • OTP expires in 10 minutes, so request a fresh one if needed

  • Verify your registered email at agents.bananacrystal.com/account

  • Implement exponential backoff in your agent retry logic

  • The error response includes a retry_after field in seconds, which you should respect

  • For high-volume production agents, contact support to increase rate limits

Rate service endpoints (/api/v1/mcp/rate/* and /api/v1/mcp/sandbox/rate/*) require keys with rate scope:

  • Create a new key at agents.bananacrystal.com/account

  • When creating the key, enable rate scope

  • Sandbox rate endpoints (/mcp/sandbox/rate/*) require no authentication, so you can use them for free testing


Contributing

We are building the financial infrastructure of the agent economy. This is early. Your contributions shape the category.

git clone https://github.com/BananaCrystal/mcp-server-bananacrystal.git
cd mcp-server-bananacrystal
npm install
npm run mock   # develop against mock: No API key needed
npm run dev

What to work on

The highest-impact contributions right now:

Area

What we need

Impact

Framework guides

Eliza, Dify, n8n, Zapier AI integration examples

Expands reach to new developer communities

Language SDKs

Python wrapper (pip install bananacrystal), Go client

Makes the package accessible to non-JS developers

Agent workflow examples

Refund bots, treasury agents, payroll orchestrators

Developers copy real-world patterns directly

Test coverage

Unit and integration tests against mock server

Makes every PR reviewable with confidence

Documentation

Edge cases, error handling, advanced patterns

Reduces support burden, accelerates adoption

Platform integrations

OpenWebUI, LibreChat, Continue.dev MCP configs

Puts BananaCrystal in front of new developer audiences

How to contribute

  1. Check open issues on GitHub for good first issue labels

  2. Fork the repo and create a branch: git checkout -b feature/your-contribution

  3. Make your changes against the mock server (no API key needed)

  4. Submit a PR with a clear description of what you built and why

  5. We review within 48 hours

See CONTRIBUTING.md for the full guide and GETTING_STARTED.md for a developer walkthrough.

Recognition

All contributors are credited in the commit history. Significant contributions (new framework integrations, language SDKs, major examples) are highlighted in the project README.

If you build something interesting with this MCP server, open an issue tagged showcase and we will feature it.


Star, share, and spread the category

If BananaCrystal has been useful:

Star the repo to help other developers find agent payment infrastructure when they need it. Visit github.com/BananaCrystal/mcp-server-bananacrystal to star.

Share it by posting in your AI agent community, Discord, or newsletter. The agent economy needs infrastructure, and developers building agents need to know this exists.

Open an issue if something doesn't work, if you need a framework that isn't supported, or if you have ideas. Every issue makes the project more useful for everyone.



MIT licensed · Built by BananaCrystal

Agent Payment Infrastructure · Autonomous Payments · AI-Native Finance

Get started free · Read the docs · View on GitHub

Available Tools

40 tools
cancel_tradeA

Cancel an active trade and release your locked escrow. Only possible while trade is active.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoTrader's external user ID (must be the trade owner). Defaults to your own user ID.
tradeIdYesTrade UUID

TDQS

A4.3/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It discloses the primary side effect (release of escrow) and the active-trade precondition. It does not address irreversibility in detail, but the word 'cancel' and the escrow release provide adequate transparency for a simple cancellation action.

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

Conciseness5/5

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

The description is one sentence, two clauses, with no extraneous words. It front-loads the action and the key condition, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two well-documented parameters, no output schema, no nesting), the description adequately covers the action, the effect on escrow, and the precondition. There is no missing contextual information for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters (tradeId and userId), covering 100% of the schema. The tool description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool cancels an active trade and releases locked escrow. It uses a specific verb and resource, and it is clearly distinct from sibling tools like list_trades or get_offer.

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?

The description explicitly notes that cancellation is only possible while the trade is active, providing clear context for when to use it. However, it does not mention alternatives or explicitly exclude other states, so it stops short of full guidance.

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

check_approval_statusB

Check the status of a pending agent transaction approval

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalRequestIdYesApproval request ID from request_agent_transaction

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the burden of disclosing side effects and behavior. It only states 'Check the status', which implies a read-only operation but doesn't explicitly confirm no side effects, nor does it describe what happens for invalid IDs, whether the status is blocking, or what fields are returned. The absence of output schema makes this gap significant.

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

Conciseness5/5

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

The description is a single sentence of 8 words, extremely concise and free of redundancy. It gets straight to the point with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema. However, the description does not explain the return format, possible statuses, or behavior on errors. While low complexity reduces the need for extensive detail, the lack of any response information leaves the agent uncertain about what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a description for the single parameter, approvalRequestId, with a pointer to request_agent_transaction. The tool description adds no further detail about parameters, but since schema coverage is 100%, the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Check') and resource ('status of a pending agent transaction approval'), clearly distinguishing it from sibling status tools like get_deposit_status or get_kyc_status. It states exactly what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool relative to alternatives. It does not mention that this should be used after requesting a transaction or before executing it, nor does it rule out other status checks. Only the input schema hints at its place in the workflow via the parameter description referencing request_agent_transaction, but the description itself lacks usage context.

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

create_offerA

Create a prediction market offer. The creator locks totalAmount in escrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesBase amount
userIdNoExternal user ID. Defaults to your own user ID.
currencyYesCurrency code (e.g. "NGN", "GHS", "USD")
leverageYesLeverage multiplier (e.g. "5x")
rateModeNoRate mode: fixed | market_at_creation | market_at_engagement
userNameNoCreator's display name
offerTypeYesOffer type (e.g. "buy", "sell")
userEmailNoCreator's email for notifications
advertiserYesDisplay name shown on the marketplace
cutoffDateNoISO date to close engagement (for specific_date cutoff)
cutoffTypeNoEngagement cutoff: immediate | duration | specific_date
predictionYesPrice direction prediction: "up" or "down"
totalAmountYesTotal leveraged amount locked in escrow
exchangeRateNoExchange rate (required when rateMode is "fixed")
cutoffMinutesNoMinutes after creation to close engagement (for duration cutoff)
durationHoursYesOffer duration in hours (e.g. 24, 48, 72)

TDQS

A3.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of disclosing side effects. It explicitly states 'The creator locks totalAmount in escrow,' which is a critical behavioral consequence for an agent to understand before invocation. However, it does not mention other potential traits such as response format, reversibility, or permission requirements, so it is not fully transparent.

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

Conciseness5/5

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

The description is two short sentences that front-load the core verb and resource, followed by a key consequence. Every word contributes meaning; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 16 parameters and no output schema, the description provides only the basic request and one side effect. It does not explain what happens after creation, how to interpret the response, or any prerequisites, leaving substantial context gaps for such a complex financial operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description is not required to explain each parameter. The only addition—'locks totalAmount in escrow'—merely repeats the schema description for totalAmount ('Total leveraged amount locked in escrow'), adding no new semantic value beyond the structured data.

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

Purpose5/5

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

The description states 'Create a prediction market offer' with a specific verb and resource, clearly distinguishing it from sibling operations like update_offer, delete_offer, and list_offers. It also appends a unique behavioral detail about escrow locking, reinforcing its purpose as a creation action with financial commitment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating an offer through the imperative verb 'Create', but it does not explicitly state when to prefer this tool over alternatives or mention any exclusions/prerequisites. The escrow-locking note hints at a condition (locking funds) but does not provide explicit guidance versus sibling tools.

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

delete_offerA

Permanently delete your own offer. Blocked if the offer has active trades.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoOwner's external user ID. Defaults to your own user ID.
offerIdYesOffer UUID

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly discloses destructive behavior ('Permanently delete'), ownership requirement ('your own offer'), and an important business rule ('Blocked if the offer has active trades'). This goes beyond minimal requirements, though it could be richer (e.g., effects on linked data).

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

Conciseness5/5

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

One sentence, highly compact, front-loaded with the action and key qualifiers. No fluff or redundant details.

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?

The tool has only 2 params and no output schema, so the description is largely adequate. It covers the essential behavior and a key blocking condition. It does not mention return values or other failure modes, but these are not critical for a simple delete operation. Overall, it is sufficiently complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the input schema already provides 100% parameter descriptions, the baseline is 3. The description does not add new parameter-level detail; 'your own offer' is already reflected in the schema's userId description. No additional context is provided.

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

Purpose5/5

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

The description clearly states the verb and resource: 'delete your own offer.' It also specifies permanence ('Permanently') and a condition ('Blocked if the offer has active trades'), which distinguishes it from related tools like delist_offer.

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?

The description provides clear context on when to use this tool: for permanent deletion of one's own offer, with the caveat that it cannot be used when trades are active. However, it does not explicitly mention alternatives or exclusions, so it stops short of a 5.

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

delist_offerA

Delist (deactivate) your own offer from the marketplace. Releases locked escrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoOwner's external user ID. Defaults to your own user ID.
offerIdYesOffer UUID

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the key behavioral consequence of releasing locked escrow, which goes beyond the schema. However, it does not mention reversibility, permissions, or what happens to the offer after deactivation.

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

Conciseness5/5

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

The description is a single, efficient sentence of 12 words. It front-loads the action and includes the key side effect with no filler.

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 tool with one required parameter and no output schema, the description covers the essential action and a critical consequence (escrow release). It could be improved by mentioning reversibility or return value, but it is generally adequate for a simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters already documented. The description adds little beyond a general sense of ownership ('your own offer'), which is already implied by the schema's 'Owner's external user ID'. Thus baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool delists (deactivates) the user's own offer and releases escrow, using a specific verb and resource. It implicitly distinguishes from 'delete_offer' by using 'deactivate' and restricting to 'your own offer'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like update_offer or delete_offer. The description only states the action itself, leaving the agent to infer the appropriate context, with no exclusions or alternative suggestions.

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

echoA

Echoes the input message back to the caller

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message to echo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that the input message is returned back to the caller, implying a pure echo with no side effects or hidden requirements. It does not detail the exact return format or error handling, but for a trivial echo tool this is sufficient.

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

Conciseness5/5

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

The description is a single sentence that is concise and to the point, with no redundant or unnecessary content. Every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one fully-documented parameter and no side effects, the description is complete. The return value is obvious from the description, and no output schema is needed. There are no hidden prerequisites or error cases that would require additional explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single parameter 'message' is fully described as 'The message to echo'. The description adds no semantic value beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'echoes' and resource 'input message', clearly stating what the tool does. It distinguishes itself from the sibling trading tools by being a simple utility that returns the input, so there is no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives, but the purpose is self-evident given the tool name and the context of sibling tools. A hint about using it for testing connectivity or debugging would improve the guidance.

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

engage_offerC

Engage (trade against) an open offer. The trader locks the same totalAmount in escrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesTrade amount
userIdNoTrader's external user ID. Defaults to your own user ID.
offerIdYesOffer UUID to engage
currencyYesCurrency code matching the offer (e.g. "NGN")
userNameNoTrader's display name
tradeTypeYesYour prediction: "long" (price goes up) or "short" (price goes down)
userEmailNoTrader's email for settlement notifications
buyerProfileIdYesBuyer profile ID
sellerProfileIdYesSeller profile ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions escrow locking ('locks the same totalAmount in escrow') but omits side effects like trade creation, offer state changes, and financial implications. The statement is vague and doesn't fully convey the operation's impact.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It states the primary action and a key behavioral trait efficiently, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no annotations, and no output schema, the description is underspecified. It doesn't explain parameter roles beyond the schema, the meaning of 'same totalAmount', or the expected outcome/response, leaving significant gaps for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds no extra parameter-level meaning; it uses 'totalAmount' without mapping to the 'amount' parameter or clarifying the relationship between buyerProfileId/sellerProfileId and userId.

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?

The description uses a specific verb 'Engage' with a clear resource ('an open offer') and explains it as 'trade against', making the core function unambiguous. It doesn't explicitly contrast with sibling tools like create_offer or cancel_trade, but the action is distinct enough to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description only states what the tool does and mentions escrow locking, but does not cover prerequisites, selection criteria, or when to prefer it over related trade operations.

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

estimate_swap_feesA

Estimate fees for a currency swap before executing

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount to swap
toCurrencyYesTarget currency code (e.g. NGN)
fromCurrencyYesSource currency code (e.g. USD)

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'estimate fees' with no mention of side effects, whether it is read-only, how fees are calculated, or if it makes any external calls. The minimal wording leaves safety and operational behavior ambiguous.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It conveys the essential action and timing in a compact form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with no output schema and no annotations, and the description only says it estimates fees. It does not disclose what the fee estimate consists of (e.g., currency, breakdown) or any caveats, which would be valuable for an agent deciding whether to proceed. It is minimally complete but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter having a clear description (e.g., 'Source currency code (e.g. USD)'). The tool description adds no parameter-level semantics beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly uses the specific verb 'estimate' and names the resource 'fees for a currency swap,' which differentiates it from executing tools like swap_currency and rate tools like get_exchange_rate. It precisely states what the tool does: computes fee estimates, not rates or actual swaps.

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?

The phrase 'before executing' provides clear context that this tool should be used prior to swap_currency. However, it does not explicitly mention alternative tools or when not to use it, so it stops short of a full usage-guide.

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

execute_approved_transactionB

Execute a transaction after it has been approved

ParametersJSON Schema
NameRequiredDescriptionDefault
executionTokenYesExecution token received after approval
approvalRequestIdYesApproval request ID

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It says 'execute a transaction' but does not disclose side effects, irreversibility, idempotency, or whether it can be called multiple times. It also lacks details on failure modes or the need for valid approval credentials.

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

Conciseness5/5

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

The description is a single, concise sentence that conveys the core purpose without unnecessary words. It is appropriately sized for a tool with simple parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool executes a transaction and has no output schema or annotations, the description is too sparse to be complete. It does not explain the approval workflow, how the request ID and token are obtained, or what happens upon execution. This is a significant gap for a mutating tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters (approvalRequestId and executionToken) with clear descriptions. The description adds no additional meaning beyond the schema, so the baseline of 3 applies due to high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's action ('Execute') and resource ('a transaction') with a condition ('after it has been approved'). This distinguishes it from other transaction tools like transfer_tokens or swap_currency, which are not approval-based.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'after it has been approved' implies the tool should be used only after an approval step, but it does not explicitly mention when not to use it or name alternative tools. There is clear context but no exclusions or alternatives.

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

get_agent_configB

Look up another user's agent configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
targetOwnerUserExtIdYesTarget user ID or email address

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of explaining behavior. It only states 'look up,' which implies a read operation, but it does not disclose permissions, return format, error behavior, or any side effects. This is a minimal disclosure.

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

Conciseness5/5

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

The description is a single, focused sentence with no unnecessary words. It is appropriately sized for a simple lookup tool and front-loads the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, no output schema), the description conveys the essential purpose, but it lacks details about return values, error conditions, or prerequisites. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter described as 'Target user ID or email address.' The tool description does not add any further meaning to the parameter beyond what the schema already provides, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the action ('look up') and the resource ('another user's agent configuration'). It is specific and distinguishes this tool from siblings like get_my_profile or get_server_info, as it targets another user's agent configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The phrase 'another user's' implies it is not for your own config, but no explicit context, exclusions, or alternative tools are provided.

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

get_balancesA

Get Hedera account balances for all tokens or a specific token

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenIdNoSpecific token ID to check (e.g. 0.0.67890). Omit for all tokens.
accountIdNoHedera account ID (e.g. 0.0.12345). Defaults to your account.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. The word 'Get' implies a read-only operation, but the description does not explicitly confirm no side effects, nor does it mention defaults for unspecified parameters or return format. This is adequate but minimal.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that directly states the action and scope. It contains zero filler and is highly efficient.

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 simple two-parameter query tool, the description covers the core intent. However, it lacks a note on return format (e.g., whether both HBAR and HTS tokens are included) and does not differentiate from the similar-sounding 'get_escrow_balances'. These are minor gaps given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both 'tokenId' and 'accountId'. The description adds little beyond the schema—'all tokens or a specific token' maps to tokenId but provides no syntax or format details. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get Hedera account balances for all tokens or a specific token.' The verb 'Get' and resource 'Hedera account balances' are specific, and the scope is unambiguous. It also implicitly distinguishes itself from sibling tool 'get_escrow_balances' by focusing on account balances.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool to query account balances. However, it does not explicitly provide when-not-to-use guidance or mention alternatives such as 'get_escrow_balances'. Since sibling tools exist and are not referenced, the guidance is limited.

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

get_deposit_statusA

Get the status of a fiat deposit by transfer ID

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID (for audit). Defaults to your own user ID.
transferIdYesBrale transfer ID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description relies on the verb 'Get' to imply a read-only operation. It does not disclose additional behavioral traits such as authentication requirements, error behavior, or what the status response contains.

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

Conciseness5/5

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

The description is a single short sentence that is front-loaded with the action and resource. Every word is necessary; there is no verbosity.

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 simple getter with full schema parameter descriptions and no output schema, the description adequately states the tool's purpose and key identifier. However, it could benefit from mentioning what statuses are returned or how to identify a deposit transfer ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides full descriptions for both parameters (100% coverage), so the baseline is 3. The description adds minimal semantic value by specifying 'fiat deposit', which clarifies the domain of the transfer ID. It does not elaborate on the userId parameter.

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

Purpose5/5

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

The description uses the specific verb 'Get' and names the resource 'status of a fiat deposit' with a qualifier 'by transfer ID'. This clearly distinguishes it from sibling tools like get_withdrawal_status and initiate_deposit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it should be used to check a deposit's status using its transfer ID, but does not explicitly state when to use it instead of alternatives like get_withdrawal_status or get_transaction_history. No exclusions or prerequisites are mentioned.

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

get_escrow_balancesA

Get a user's escrow balance breakdown, including total, available, and locked amounts

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID. Defaults to your own user ID.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the action and output structure, with no mention of authentication requirements, rate limits, or side effects. The default userId behavior is mentioned in the schema, not the description.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the verb and resource, with no unnecessary words or repetition.

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?

The tool is simple with one optional parameter and no output schema. The description adequately explains the return value (breakdown with total, available, locked). However, it lacks behavioral or usage context, which is a minor gap for such a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with userId fully described including its default behavior. The tool description adds no additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool gets a user's escrow balance breakdown with specific components (total, available, locked). This distinguishes it from siblings like get_balances (general balances) and get_escrow_history (escrow history).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking escrow balances, but does not explicitly state when to use this tool versus alternatives like get_balances or get_escrow_history. No exclusions or alternative guidance provided.

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

get_escrow_historyB

Get a user's full escrow transaction history, covering locks, releases, wins, losses, and fees

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID. Defaults to your own user ID.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It doesn't mention that this is a read-only operation, nor does it describe return format, pagination, authentication needs, or whether 'full' includes pending or historical states. This lack of context leaves the agent without important safety and outcome information.

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

Conciseness5/5

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

A single, well-structured sentence that leads with the action and resource, then enumerates the covered categories. No filler or redundant phrasing. It is concise and front-loaded.

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 simple single-parameter tool with no output schema, the description covers the main scope (escrow transaction history) and lists included transaction types. However, it lacks behavioral details like pagination or ordering, and doesn't help disambiguate from the general get_transaction_history. These gaps prevent a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes the only parameter (userId) as 'External user ID. Defaults to your own user ID.' with 100% coverage. The description simply says 'a user's' and adds no additional meaning or constraints beyond what the schema already provides. Baseline 3 is appropriate.

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?

The description clearly states the verb 'Get' and the specific resource 'user's full escrow transaction history' with coverage of locks, releases, wins, losses, and fees. This makes the tool's purpose obvious. However, it doesn't explicitly distinguish it from sibling tools like get_transaction_history or get_escrow_balances, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: use this to retrieve a user's escrow transaction history. There is no explicit guidance on when not to use it or which alternative to choose (e.g., get_transaction_history for general history). The description would benefit from mentioning that get_transaction_history covers non-escrow transactions or that this tool is solely for escrow-related records.

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

get_exchange_rateA

Get current buy/sell exchange rates for a currency

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyYesCurrency code (e.g. USD, NGN, EUR)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It accurately indicates that the tool returns buy/sell rates (implying a read-only operation), but does not clarify whether rates are real-time, indicative, or how 'current' is defined. This is a modest baseline for a simple getter.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It immediately states the action and object, making it very easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and no output schema, the description partially covers return values by mentioning buy/sell rates. However, it does not specify the structure of the response or any additional context like rate timing or source. This is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the sole parameter (currency) with an example format. The description adds no new semantic information beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('current buy/sell exchange rates for a currency'), clearly distinguishing it from sibling tools like swap_currency (which performs conversion) or list_supported_currencies (which lists codes). It precisely conveys what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as swap_currency or estimate_swap_fees. It simply states what it does without any context for selection.

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

get_kyc_statusB

Get KYC verification status for a user

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID to get KYC status for. Defaults to your own user ID.

TDQS

B3.1/5.0
Behavior2/5

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

The description restates the tool's name without adding behavioral context. Since no annotations are provided, it fails to disclose whether the operation is read-only, what the response format looks like, or any authentication requirements.

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

Conciseness5/5

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

The description is a single, focused sentence with no wasted words. It is concise and front-loaded, appropriately sized for a simple getter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is minimally adequate but lacks details about the return value or potential statuses. Without an output schema or annotations, the agent may not know what to expect beyond the name. More context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the sole parameter (userId) with a clear description and default behavior. The description adds no additional parameter semantics, but the high schema coverage justifies a baseline score of 3.

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?

The description clearly states the action ('Get') and the resource ('KYC verification status'), which distinguishes it from siblings like initiate_kyc. However, it does not explicitly differentiate itself or mention scope, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as initiate_kyc. There is no mention of prerequisites, typical use cases, or situations where another tool would be more appropriate.

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

get_my_limitsA

Get your API key limits and current usage

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries full responsibility for disclosing behavior. It implies a read-only operation through the verb 'Get' and clarifies the resource via 'your API key', but it doesn't mention auth requirements, return format, or whether this is scoped to the current user's key. It's accurate but minimal.

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

Conciseness5/5

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

One crisp sentence that is front-loaded and immediately communicates the tool's purpose. No wasted words.

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 parameterless read-only tool, the description adequately covers the purpose. It doesn't describe output structure, but for such a simple tool, that's an acceptable gap. The description is complete enough for an agent to decide when to use it.

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?

The tool has zero parameters, so the description doesn't need to explain parameter meanings. It clearly indicates the tool returns limits and usage, which is sufficient.

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

Purpose5/5

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

The description uses the specific verb 'Get' with a clear resource ('your API key limits and current usage'), distinguishing it from sibling tools like get_balances or get_my_profile by explicitly focusing on API key limits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no usage context, no guidance on when to use this tool versus alternatives, and no exclusions. It simply states what it does.

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

get_my_offersA

Get all offers created by a specific user

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID. Defaults to your own user ID.
offerTypeNoFilter by offer type

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It only gives scope ('created by a specific user') and 'all' offers, but does not mention read-only safety, pagination, ordering, filtering aside from offerType, or what happens if no offers exist.

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

Conciseness5/5

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

A single, front-loaded sentence that earns its place. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with two optional, well-described parameters, the description is minimally viable. It lacks an output schema and does not describe the return format or any limitations, so agents may be uncertain about the exact response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% parameter description coverage: userId includes external ID and default behavior, offerType explains filtering. The tool description adds no extra meaning beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (get), resource (offers), and scope (created by a specific user). It distinguishes this from siblings like list_offers (general offer listing) and get_offer (single offer).

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?

The description makes it clear this tool is for retrieving offers created by a particular user, which implies its niche versus list_offers. However, it does not explicitly state when not to use it or name alternative tools.

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

get_my_profileA

Get your BananaCrystal profile including user ID, wallets, and account details

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It clearly indicates a read operation via 'Get' and specifies the data it returns, though it does not explicitly state that it is read-only or require authentication. This is adequate for a simple getter.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that avoids extraneous detail. It efficiently conveys both the action and the primary output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter getter with no output schema, the description sufficiently explains the return contents ('user ID, wallets, and account details'). It is complete for the tool's simplicity and aligns with sibling tools that are similarly self-descriptive.

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?

The tool has zero parameters and the schema is empty, so the description adds no parameter semantics beyond the baseline. The description's mention of included fields ('user ID, wallets, and account details') gives some context about what the returned data contains, satisfying the baseline expectation.

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

Purpose5/5

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

The description uses a specific verb and resource ('Get your BananaCrystal profile') and lists key contents (user ID, wallets, account details). This clearly distinguishes it from sibling tools like get_my_limits or get_my_offers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. The purpose is self-evident (retrieving profile info), but no when-to-use or when-not-to-use scenarios are provided, so the guidance is implied at best.

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

get_my_tradesA

Get all trades for a user, including trades they created and trades on offers they own

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoFilter by state: active | cancelled | completed | expired | settled
userIdNoExternal user ID. Defaults to your own user ID.
tradeTypeNoFilter by trade type: long | short

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It partially does so by explaining the inclusion logic (user-created trades and trades on owned offers), but it does not mention authentication requirements, rate limits, default behavior for optional parameters, or the return format.

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

Conciseness5/5

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

The description is a single well-structured sentence that conveys the essential scope without wasted words. It is front-loaded with the verb and resource, making it easy to scan.

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?

Given the low complexity (three optional parameters, no nested objects, no output schema), the description plus full schema coverage is mostly sufficient. It does not describe the return structure, but for a read-only list operation under this sibling set, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for all three parameters (state, userId, tradeType), achieving 100% schema description coverage. The description adds no additional parameter-level meaning beyond what the schema offers, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Get all trades') and the resource scope ('for a user'), explicitly including both trades the user created and trades on offers they own. This distinguishes it from general trade-listing tools like list_trades by focusing on user-specific trades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives such as list_trades or get_trade. There is no mention of exclusion criteria, prerequisites, or context in which this tool is preferred.

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

get_offerA

Get full details of a single offer including trade stats and time remaining

ParametersJSON Schema
NameRequiredDescriptionDefault
offerIdYesOffer UUID

TDQS

A3.8/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions the response includes trade stats and time remaining, which is helpful, but it does not explicitly state the operation is read-only or cover error handling/auth requirements. The verb 'Get' implies safety, but the description adds limited behavioral context beyond that.

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

Conciseness5/5

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

The description is a single sentence of ten words, front-loaded with 'Get full details of a single offer' followed by clarifying content. Every word earns its place, with no redundancy or filler.

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?

Given the low complexity (one parameter, no output schema, no annotations), the description provides a clear sense of the returned data (trade stats, time remaining) and the scope (single offer). It omits details about error behavior and authentication, but these gaps are partially mitigated by the simplicity of the operation and the schema's parameter description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full coverage for the sole parameter 'offerId' with a clear description ('Offer UUID'), so the baseline is 3. The tool description does not add any extra meaning or context to the parameter, so it neither enhances nor detracts from the schema.

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

Purpose5/5

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

The description uses the specific verb 'Get' with the resource 'full details of a single offer', clearly distinguishing it from sibling tools like list_offers that return collections. It also specifies content such as 'trade stats and time remaining', making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching one offer by ID, but it does not explicitly state when to use this tool instead of alternatives like list_offers or get_my_offers. No exclusions or alternative tool references are provided, so usage guidance relies on inference.

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

get_server_infoB

Returns basic server information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only action by saying 'returns', but it does not disclose what 'basic server information' includes, whether authentication is needed, or what the response structure looks like.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It immediately communicates the tool's core purpose and is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool, the description is minimally viable, but it lacks detail about what 'basic server information' includes and does not provide an output schema. Given the lack of annotations, the description could be more complete, though the tool is simple enough that this may be acceptable.

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?

The tool has zero parameters, so the schema fully covers the parameter space. The description does not need to add parameter details, and the baseline of 4 is appropriate.

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?

The description clearly identifies the action (returns) and resource (server information). It is not a tautology and is distinct enough from sibling tools, though the word 'basic' is vague and could be more specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. It simply states what the tool does without contextual usage direction.

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

get_tradeA

Get full details of a single trade including the parent offer stats

ParametersJSON Schema
NameRequiredDescriptionDefault
tradeIdYesTrade UUID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It implies a read-only operation ('Get') and mentions the inclusion of parent offer stats, but it does not describe error behavior, authorization needs, or what 'full details' encompasses. Some transparency is present, but gaps remain.

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

Conciseness5/5

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

The description is a single sentence that is concise, front-loaded with the action, and free of unnecessary words. It effectively communicates the tool's core function and a key differentiating detail.

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?

Given the tool's low complexity (one parameter, no output schema, no annotations), the description provides sufficient context by stating the resource type and the unique inclusion of parent offer stats. However, the lack of an output schema means the return format is not fully specified, though 'full details' offers a general expectation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for the only parameter (tradeId) with a clear description ('Trade UUID'). The description adds no additional semantic detail about how tradeId is used, so it does not exceed the baseline established by the schema.

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

Purpose5/5

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

The description states a specific verb ('Get') and resource ('full details of a single trade'), and adds a distinguishing feature ('including the parent offer stats') that separates it from sibling tools like list_trades or get_my_trades. It clearly identifies the tool's purpose and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a specific tradeId is known and full details are needed, but it does not explicitly mention when not to use it or direct users to alternatives. Sibling tools like list_trades are not referenced, leaving usage guidance implicit rather than explicit.

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

get_transaction_historyB

Get your transaction history with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
typeNoFilter by type: swap | transfer
limitNoNumber of transactions to return (default: 20)
directionNoFilter by direction: incoming | outgoing | swap

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation via 'Get' but does not explicitly state side-effect-free behavior, pagination details, or whether the history includes all transaction types (e.g., swaps, transfers) or only settled ones. No additional behavioral context is given beyond the action itself.

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

Conciseness5/5

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

The description is a single, short sentence that front-loads the main verb and resource. It contains no unnecessary words or repetition, making it extremely concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool, the description is minimally adequate, but it lacks contextual completeness. It does not explain how this tool relates to sibling tools like get_my_trades or get_escrow_history, nor does it summarize the transaction types covered (swap, transfer) as revealed by the schema. With no output schema, the description could have clarified what the response contains, but it doesn't.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 100% of the parameters, providing clear explanations for 'page', 'type', 'limit', and 'direction'. The description only adds the generic phrase 'filtering options,' which does not enrich parameter meaning beyond what the schema already documents. Baseline 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the action ('Get') and resource ('your transaction history'), indicating it retrieves the user's own transaction records. This distinguishes it from sibling tools like get_escrow_history and get_my_trades, which cover different types of transaction-related data. The phrase 'with filtering options' implies configurable results, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, such as using get_escrow_history for escrow transactions or get_my_trades for trade-specific histories. There is no context on typical use cases, prerequisites, or relationships to related tools.

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

get_withdrawal_statusA

Get withdrawal requests for a user via Brale

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID. Defaults to your own user ID.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. The verb 'get' implies a read operation, and the schema parameter notes 'Defaults to your own user ID', which adds some behavioral context. However, the description does not disclose output format, possible side effects, or any rate limits or permissions, leaving gaps for a tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, concise sentence that conveys the essential purpose without unnecessary words. It is easy to parse and front-loads the key action and object.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter, the description is adequate but not complete. It does not explain the return format (e.g., fields like status, amount, timestamps) or provide any context about how to interpret the response, which is a gap given there is no output schema. However, the low complexity and clear purpose keep it at a minimum viable level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with userId described as 'External user ID. Defaults to your own user ID.' The description adds no further parameter meaning beyond what the schema already provides, justifying the baseline score of 3.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get withdrawal requests for a user via Brale' – a specific verb ('get'), resource ('withdrawal requests'), and scope ('for a user'). It distinguishes itself from sibling tools like get_deposit_status and request_withdrawal by naming 'withdrawal' as the focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear indication of when to use this tool (to retrieve withdrawal requests for a user), but it does not explicitly say when not to use it or mention alternatives. The implied usage is sufficient for a simple read tool.

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

initiate_depositB

Initiate a fiat deposit via Brale. Requires verified KYC.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesDeposit amount
userIdNoExternal user ID. Defaults to your own user ID.
currencyYesCurrency code (e.g. USD, USDC)
railTypeNoPayment rail (e.g. ach, wire)
accountIdNoBrale account ID to credit

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action and a prerequisite, but does not disclose side effects (e.g., whether funds are moved immediately), return behavior, idempotency, or error conditions. For a money-movement tool, this is insufficient transparency.

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

Conciseness5/5

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

The description is two short sentences with no wasted words. The verb and object are front-loaded, making it immediately scannable and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having five parameters and no output schema, the description omits critical context: what happens after initiation, how to check status, potential side effects, and any prerequisites beyond KYC. The tool is under-specified for an agent to use it safely and effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all five parameters (100% coverage), so the schema already carries the semantic load. The description adds no extra parameter-level detail beyond the schema, meriting the baseline score of 3.

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

Purpose5/5

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

The description clearly states the action ('Initiate') and the resource ('a fiat deposit via Brale'), distinguishing it from related tools like request_withdrawal. The KYC requirement adds a specific precondition that sharpens the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a key prerequisite ('Requires verified KYC'), which is a form of usage guidance. However, it does not explicitly state when to choose this tool over alternatives (e.g., transfer_tokens or request_withdrawal) or when not to use it.

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

initiate_kycA

Initiate KYC verification for a user. Returns a Sumsub access token.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoExternal user ID to initiate KYC for. Defaults to your own user ID.
ttlInSecsNoToken TTL in seconds (default: 3600)

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It states the action and return token but omits side effects (e.g., creation of a KYC session, possible user notification), permissions needed, or idempotency. For a tool that likely triggers an external workflow, this is a significant gap.

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

Conciseness5/5

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

The description is a single sentence that conveys both the action and the return value. There is no redundant or irrelevant information, and it is easy to scan quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (two optional params, no output schema) and full schema coverage, the description covers the core purpose. However, it lacks behavioral context such as side effects or prerequisites, which is especially important since annotations are absent. It is minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both parameters (userId and ttlInSecs), so the baseline is 3. The description adds no additional parameter meaning beyond what the schema already provides, but it does not need to compensate given the full schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('Initiate') and exact resource ('KYC verification for a user'), and includes the output ('Returns a Sumsub access token'). This clearly distinguishes it from sibling tools like get_kyc_status, which would report on verification state rather than start it.

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?

The description clearly implies this is the tool to begin KYC verification for a user, as opposed to checking status (get_kyc_status). However, it does not explicitly state when not to use it or mention any alternatives, so it lacks explicit exclusion guidance.

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

list_available_tokensA

List all available Hedera tokens for the platform

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It implies a read-only operation via 'List' but does not disclose output format, pagination, token types included, or any authentication requirements. It is not misleading, but it is minimal for an unannotated tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant wording. It earns every word and is easy to scan.

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 zero-parameter listing tool with no output schema, the description is reasonably complete: it identifies the operation and resource. However, it omits any detail about the return payload or whether 'available' means user-specific eligibility, leaving minor ambiguity for a tool with no other structured context.

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?

There are zero parameters, so the baseline is 4. The empty schema is fully covered, and the description adds the semantic context of 'available Hedera tokens', which gives meaning beyond the empty input schema.

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

Purpose5/5

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

The description uses a specific verb 'List' and identifies the resource as 'all available Hedera tokens for the platform', clearly distinguishing this from sibling tools like list_supported_currencies and get_balances. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description states only what the tool does and gives no when-to-use or when-not-to-use context relative to siblings, such as whether to prefer this over get_balances or list_supported_currencies for token-related queries.

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

list_offersA

Browse the prediction market. Returns active offers with trade stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
limitNoItems per page (default 10)
searchNoSearch by username, email, or advertiser
sortByNoSort order: mostActiveTraders | highestStaked
currencyNoFilter by currency code (e.g. "NGN", "GHS")
offerTypeNoFilter by offer type (e.g. "buy", "sell")

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It says 'Returns active offers' which implies read-only and filtering by activity, but it does not mention authentication, pagination behavior, or the exact structure of 'trade stats'. This is minimally sufficient for a list operation.

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

Conciseness5/5

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

The description is extremely concise: two short sentences with no wasted words. It leads with the core action and then specifies the return value, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description captures the primary purpose, it omits key context such as whether the market list includes all users' offers or just the user's own. It also does not describe the return format beyond 'trade stats', which is notable given there is no output schema. The optional filters are well-documented in the schema, so the description is partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all 6 parameters with 100% description coverage, so the baseline is 3. The tool description does not add additional meaning about parameter interactions or defaults beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action ('Browse the prediction market') and the resource ('active offers with trade stats'). It distinguishes from sibling tools like get_my_offers (which focuses on user-specific offers) and get_offer (which targets a single offer).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for market browsing but does not explicitly contrast with alternatives such as get_my_offers or get_offer. No when-not-to-use guidance is provided, though the verb 'browse' hints at public market exploration.

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

list_supported_currenciesA

List all supported currencies and tokens on BananaCrystal

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It implies a read-only operation via 'List' but discloses no additional behavioral traits (e.g., rate limits, authentication needs, output format). For a simple list tool, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that clearly states the tool's action and scope with no wasted words.

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?

Given the tool's simplicity (zero params, no output schema), the description is sufficiently complete: it states what is listed and the platform scope. It could mention the return format, but that is not necessary for a straightforward list tool.

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?

The tool has zero parameters, so the schema is fully covered. The description adds no parameter details, but none are needed. Baseline for 0 params is 4.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('all supported currencies and tokens on BananaCrystal'). It distinguishes from the sibling 'list_available_tokens' by explicitly covering both currencies and tokens, not just tokens.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The sibling tool 'list_available_tokens' could overlap, but the description does not clarify how to choose between them.

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

list_tradesA

List all trades on the platform. Filter by trade type or state.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoFilter by state: active | cancelled | completed | expired | settled
tradeTypeNoFilter by trade type: long | short

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the disclosure burden. It discloses the platform-wide scope and filter options, but does not mention pagination, response format, rate limits, or any data sensitivity. This is adequate for a simple read-only list tool, but not rich in behavioral detail.

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

Conciseness5/5

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

The description is extremely concise: two short sentences that front-load the purpose and follow with the filtering capability. Every word earns its place with no redundancy.

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 low-complexity tool with two optional parameters and full schema coverage, the description covers the essential purpose and scope. It does not describe the return value or pagination, but given the absence of an output schema, this is a minor gap for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already described in the input schema. The description merely paraphrases 'Filter by trade type or state' without adding any new meaning or detail beyond what the schema provides.

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?

The description clearly states the tool lists all trades on the platform, using the verb 'List' and the resource 'trades'. It implicitly distinguishes from get_my_trades by specifying 'all trades on the platform', but it does not explicitly name alternatives or differentiate from get_trade.

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?

The description provides clear context: use this to list all platform trades and filter by trade type or state. It does not explicitly state when not to use it or mention alternatives like get_my_trades, but the platform-wide scope is implied enough.

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

pingA

Health check tool that returns pong

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It states the tool returns 'pong', which is the entire behavior. It does not explicitly mention side effects, but for a health check, this is inherently a safe read-only operation, and the description is sufficiently transparent.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the essential information. Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is fully complete. It explains the tool's purpose and expected response, leaving no gaps for an agent to interpret.

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?

The tool has zero parameters, so the baseline is 4. The description adds no parameter information because none is needed; the schema already covers the absence of parameters.

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

Purpose5/5

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

The description clearly states the tool is a health check that returns 'pong', which is a specific and unambiguous purpose. It distinguishes itself from siblings like echo and get_server_info by its unique health check role.

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?

The description explicitly labels the tool as a 'health check tool', providing clear context for when to use it (to verify API connectivity). While no alternatives are named, the simplicity of the tool and absence of comparable siblings make this acceptable.

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

request_agent_transactionA

Request a transaction on behalf of another user. They will receive an email to approve.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesTransaction amount
reasonNoHuman-readable reason shown in approval email
currencyYesCurrency code (e.g. NGN, USD)
requesterNameNoYour display name shown in approval email
transactionTypeYesType: transfer | swap | create_offer | accept_trade
transactionParamsYesTransaction-specific parameters
targetOwnerUserExtIdYesTarget user ID or email address

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It discloses that the target receives an approval email, but does not explain whether the transaction executes immediately, how to track the request, or what happens on approval/rejection. Some important behavioral details are missing.

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

Conciseness5/5

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

The description is a single succinct sentence that clearly states the purpose and the key consequence. No unnecessary words are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and annotations, the description is somewhat sparse. It states the approval email behavior but does not indicate what the requester receives (e.g., a request ID) or how to follow up. The rich parameter schema compensates partially, making this adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% parameter coverage, so the description does not need to elaborate on each parameter. The description does not add additional parameter meaning beyond the schema, but the schema itself is descriptive (e.g., reason is 'Human-readable reason shown in approval email'). Baseline 3 is appropriate.

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

Purpose5/5

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

The description specifies the action 'Request a transaction on behalf of another user' with a clear verb and resource. It also distinguishes itself from sibling tools like transfer_tokens or swap_currency by indicating an approval workflow ('They will receive an email to approve').

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?

The description provides clear context: this is for requesting a transaction on behalf of someone else, implying it should be used when the target user must approve. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.

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

request_transfer_otpA

Step 1: Request an OTP code to authorize a token transfer. An email will be sent with the code.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount to transfer (as string to preserve precision)
tokenIdYesHedera token ID to transfer (e.g. 0.0.67890)
tokenSymbolNoOptional token symbol for the email (e.g. USDC)
recipientAccountIdYesRecipient Hedera account ID, email, or username

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It adds the key fact that an email will be sent with the code, which is useful. However, it does not disclose other potential behaviors such as authentication requirements, rate limits, or whether prior OTPs are invalidated. It provides some transparency but not comprehensive coverage.

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

Conciseness5/5

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

The description is extremely concise with two short sentences, front-loaded with the primary action. The 'Step 1' prefix is efficient and informative. No redundant information or fluff.

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 simple tool that requests an OTP and sends it via email, the description is nearly complete. It states the purpose and the delivery mechanism. It does not describe the response format or explicitly mention the next step, but given the tool's simplicity, this is acceptable. The output schema is absent, so a bit more detail on the response could help, but it is not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema already provides, but it also does not need to since the schema fully covers the parameters.

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

Purpose5/5

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

The description clearly states a specific action ('Request an OTP code') with a well-defined resource and purpose ('to authorize a token transfer'). The 'Step 1' prefix frames it as an initial action in a process, and it is distinct from sibling tools like transfer_tokens or request_withdrawal.

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?

'Step 1' provides clear context that this tool is a prerequisite for token transfers, implying when it should be used. However, it does not explicitly name alternatives or exclusions (e.g., if an OTP already exists). The context is clear enough for an agent to infer its placement.

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

request_withdrawalA

Request a fiat withdrawal via Brale. Requires verified KYC.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesWithdrawal amount
userIdNoExternal user ID. Defaults to your own user ID.
currencyYesCurrency code (e.g. USD, USDC)
railTypeNoPayment rail (e.g. ach, wire)
destinationAccountNoDestination bank account or address

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It mentions 'Requires verified KYC' but fails to state that this initiates a real financial transaction, any side effects, irreversibility, or that it might be asynchronous. The description is sparse for a money-movement tool.

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

Conciseness5/5

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

The description is concise, two short sentences, and front-loaded with the action. Every word serves a purpose; there is no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no annotations, and no output schema, the description is incomplete. It does not mention what to expect in the response, that the request is likely asynchronous, or suggest using get_withdrawal_status to track progress. More context is needed for a withdrawal operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds no additional parameter semantics beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action ('Request'), the resource ('a fiat withdrawal'), and the platform ('via Brale'). It distinguishes itself from sibling tools like transfer_tokens and initiate_deposit by specifying 'fiat withdrawal'.

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?

The description provides a clear context for when to use this tool (for fiat withdrawals) and includes a prerequisite (verified KYC). However, it does not explicitly mention alternatives or exclusions, such as using transfer_tokens for crypto withdrawals.

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

reset_sandbox_balanceA

Reset your sandbox account balances back to the default pre-seeded amounts. Only works with sandbox keys (bc_test_*).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden. It clearly states the reset effect and the key-type restriction, though it does not explicitly warn that current balances will be overwritten. The term 'reset' implies this, making it adequately transparent.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and followed by a key constraint. Every word is purposeful with no redundancy between the two sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description fully covers the operation, its effect, and its usage precondition. Nothing critical is missing.

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?

There are no parameters, so schema coverage is trivially 100%. The description does not need to add parameter details; baseline for zero-parameter tools is 4.

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

Purpose5/5

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

The description clearly states the action (reset) and resource (sandbox account balances) with a specific outcome (back to default pre-seeded amounts). It distinguishes itself from sibling tools like get_balances by indicating a mutating reset operation.

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?

The description explicitly constrains usage to sandbox keys (bc_test_*), implying not to use with production keys. It does not name alternative tools, but the boundary is clear enough for a unique operation.

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

swap_currencyB

Swap between two Hedera tokens. Exchange rate calculated automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoNoOptional memo for the transaction
toTokenIdYesToken ID or symbol to swap TO (e.g. "NGNb" or "0.0.456")
fromAmountYesAmount of source token to swap
fromTokenIdYesToken ID or symbol to swap FROM (e.g. "USDb" or "0.0.123")

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only mentions that the exchange rate is calculated automatically, but it does not disclose that this is a transactional, likely irreversible operation with potential fees, authorization requirements, or a specific response format. For a mutation tool, this is a significant gap.

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

Conciseness5/5

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

The description is a single sentence that immediately states the action and the key differentiator. Every word earns its place, and there is zero filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool performs a token swap, which is a non-trivial transaction on Hedera. With no annotations, no output schema, and only a terse description, it lacks critical operational context: return value (e.g., transaction ID), possible side effects, prerequisites (e.g., approvals, OTP), and relationship to related tools like estimate_swap_fees. This is incomplete for a transactional tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the baseline is 3. The description's mention of automatic exchange rate calculation adds the insight that no separate rate parameter is needed, but it does not add detail about the individual parameters beyond what the schema already provides. The schema itself describes each parameter with examples, so the description is neither redundant nor insufficient.

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

Purpose5/5

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

The description uses the specific verb 'Swap' with a clear resource ('between two Hedera tokens') and adds the key detail that exchange rate is calculated automatically. This distinguishes it from siblings like estimate_swap_fees and get_exchange_rate, which focus on fees or rates rather than executing the swap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context—use this tool when you want to swap between two Hedera tokens. However, it does not explicitly mention alternatives or when not to use it, such as 'if you only need the exchange rate, use get_exchange_rate' or 'if you need to transfer without swapping, use transfer_tokens.'

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

transfer_tokensA

Step 2: Execute the token transfer. If OTP is enabled on your key (default), provide otpCode and transactionRef from request_transfer_otp. If OTP is disabled, these fields are not required.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount to transfer (same as request_transfer_otp)
otpCodeNo6-digit OTP code from email
tokenIdYesHedera token ID (same as request_transfer_otp)
tokenSymbolNoOptional token symbol
transactionRefNoTransaction reference from request_transfer_otp response
recipientAccountIdYesRecipient identifier (same as request_transfer_otp)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the OTP conditional behavior, which is a key behavioral trait. However, it does not mention potential side effects (e.g., irreversibility, balance changes) or error handling, though the verb 'transfer' implies a write operation. Overall, it provides useful context beyond the obvious.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with 'Step 2' to establish workflow context, and every sentence adds meaningful information. It avoids redundancy with the schema and is highly concise.

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?

Given the tool's moderate complexity (6 params, no output schema), the description is fairly complete: it explains the OTP workflow step and parameter requirements. However, it does not describe return values or success/failure indicators, which could be important for the agent to verify the transfer outcome. Despite this, the high schema coverage and clear step context make it sufficiently complete for correct invocation.

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?

The schema covers all six parameters with descriptions, so the baseline is 3. The description adds value by explaining that 'otpCode' and 'transactionRef' are only required when OTP is enabled and that they come from 'request_transfer_otp'. This contextual linkage is not present in the schema and clarifies conditional parameter usage.

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

Purpose5/5

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

The description clearly states the tool's action: 'Execute the token transfer.' It uses a specific verb and resource, and positions itself as 'Step 2' in a workflow, distinguishing it from the sibling tool 'request_transfer_otp' which handles the OTP request step. This makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage guidance by referencing the OTP flow: it instructs the agent to provide 'otpCode and transactionRef from request_transfer_otp' when OTP is enabled, and notes these fields can be omitted when OTP is disabled. This explicitly covers when and how to use the tool relative to its prerequisite.

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

update_my_agent_settingsA

Update agent approval settings (require_human_approval, require_otp, callback_url)

ParametersJSON Schema
NameRequiredDescriptionDefault
requireOtpNoEnable/disable OTP verification for direct token transfers. Default: true. Set to false to allow transfers without OTP.
callbackUrlNoHTTPS webhook URL for approval notifications (or null to disable)
requireHumanApprovalNoEnable/disable email approval for agent-to-agent transactions

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full disclosure burden. It only says 'update' without describing side effects, permission requirements, or whether changes take effect immediately. This is a mutation with no behavioral context.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that names the tool's purpose and the key settings. Every word contributes, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, but with no annotations and no output schema, the description should provide more context. It explains what is updated but not the outcome shape, error behavior, or relationship to other agent settings. The parameter schema covers the inputs, but behavioral context is lacking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter having its own description. The tool description adds minimal value beyond listing the parameter names, which are already in the schema. The naming mismatch (snake_case in description vs camelCase in schema) could cause minor confusion, but the schema descriptions are sufficient.

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

Purpose5/5

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

The description clearly states the verb 'update' and the resource 'agent approval settings', enumerating the specific settings (require_human_approval, require_otp, callback_url). This distinguishes it from sibling tools like get_agent_config, which reads settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for modifying agent approval settings, but it does not explicitly state when to use this tool versus alternatives like get_agent_config for viewing settings. No exclusions or prerequisites are mentioned.

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

update_offerA

Edit an existing offer. Only allowed when the offer has no trades yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoOwner's external user ID (for authorization). Defaults to your own user ID.
offerIdYesOffer UUID
isActiveNoToggle offer active/inactive
advertiserNoUpdated advertiser display name
exchangeRateNoNew exchange rate
durationHoursNoUpdated duration in hours

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description bears full responsibility for behavioral disclosure. It adds one key behavioral fact—the no-trades precondition—but does not explain what happens if the precondition is violated, what authorization is needed, or whether changes are reversible. While 'Edit' implies mutation, other behavioral aspects remain undisclosed.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the purpose and follows with a critical usage constraint. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal but sufficient for a basic edit tool given the rich schema. However, it omits details about response behavior, error handling on condition failure, and any side effects (e.g., whether it re-activates an offer). For a mutation tool with no annotations and no output schema, more context would be expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter thoroughly. The description adds no additional parameter-level detail, meeting the baseline for covered schemas.

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

Purpose5/5

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

The description clearly states the tool's function: 'Edit an existing offer.' This is a specific verb-resource pairing that distinguishes it from sibling tools like create_offer, delete_offer, and delist_offer. The additional constraint about no trades further clarifies its scope.

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?

The description provides a clear precondition: 'Only allowed when the offer has no trades yet.' This tells the agent when this tool is appropriate and implicitly when it is not (if trades exist). However, it does not explicitly mention alternative tools or when to prefer them, so it falls short of full guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 40 tool updatesv1.0.1
    • First observedcancel_trade
    • First observedcheck_approval_status
    • First observedcreate_offer
    • First observeddelete_offer
    • First observeddelist_offer
    • First observedecho
    • First observedengage_offer
    • First observedestimate_swap_fees
    • First observedexecute_approved_transaction
    • First observedget_agent_config
    • First observedget_balances
    • First observedget_deposit_status
    • First observedget_escrow_balances
    • First observedget_escrow_history
    • First observedget_exchange_rate
    • First observedget_kyc_status
    • First observedget_my_limits
    • First observedget_my_offers
    • First observedget_my_profile
    • First observedget_my_trades
    • First observedget_offer
    • First observedget_server_info
    • First observedget_trade
    • First observedget_transaction_history
    • First observedget_withdrawal_status
    • First observedinitiate_deposit
    • First observedinitiate_kyc
    • First observedlist_available_tokens
    • First observedlist_offers
    • First observedlist_supported_currencies
    • First observedlist_trades
    • First observedping
    • First observedrequest_agent_transaction
    • First observedrequest_transfer_otp
    • First observedrequest_withdrawal
    • First observedreset_sandbox_balance
    • First observedswap_currency
    • First observedtransfer_tokens
    • First observedupdate_my_agent_settings
    • First observedupdate_offer

TDQS

A3.6/5.0
Disambiguation4/5

Most tools clearly target distinct resources and actions, but list_supported_currencies and list_available_tokens are nearly identical in purpose, and delist_offer vs delete_offer could confuse agents. These minor overlaps prevent a perfect score.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (get_, list_, create_, update_, delete_, request_, etc.). Even exceptions like ping and echo are simple verbs that fit the style. No mixed casing or arbitrary names.

Tool Count2/5

With 40 tools, the server exposes a very large surface area. Although the platform spans multiple subsystems, this count far exceeds the typical well-scoped range and will burden agents with selection complexity.

Completeness5/5

The tool set provides comprehensive lifecycle coverage for offers (create/read/update/delete/delist), trades (engage/cancel/list), escrow (balances/history), transfers, KYC, fiat deposits/withdrawals, and agent transactions. No obvious critical gaps or dead ends.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to perform financial transactions such as direct payments, escrows, and bounty management using natural language with zero code integration. It provides a comprehensive suite of tools for fund streaming, subscriptions, and reputation tracking to facilitate secure agent-to-agent commerce.
    22
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to manage USDC wallets on Solana, allowing them to send payments, create invoices, and access paid APIs within human-defined spending limits. It uses threshold signatures to provide agents with financial autonomy while ensuring secure oversight and transaction approval.
    36
    23
    3
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BananaCrystal/mcp-server-bananacrystal'

If you have feedback or need assistance with the MCP directory API, please join our Discord server