BananaCrystal MCP Server
OfficialEnables CrewAI agents to manage treasury operations, including balance inquiries, transfers, and spending limits, through MCP tools.
Provides the underlying blockchain for fast (under 5 seconds) and immutable settlement of agent payments, with low fees and finality.
Provides tools for LangChain agents to perform financial operations such as balance checks, payments with memos, and currency swaps, with on-chain settlement.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BananaCrystal MCP Serverwhat's my current balance?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agent Payment Infrastructure
The MCP Server That Gives AI Agents a Wallet
One endpoint. Every payment capability. The financial primitive of the agent economy.
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.
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-serverStep 2: Get a free API key
Sign up at agents.bananacrystal.com → Account → 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_balancetool
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@1711234567from 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 |
| Health check |
| Server version and environment |
| Echo a message |
| Your profile, wallets, and MCP key info |
| Token balances (all or specific token) |
| Live buy/sell rates for any currency |
| All supported stablecoins |
| All Hedera token IDs |
| Paginated transaction log with filters |
| API key spending limits and current usage |
| Calculate fees before swapping |
| Look up another agent's payment config |
| Status of a pending approval request |
| KYC verification status |
| Fiat deposit status by transfer ID |
| Fiat withdrawal requests |
| Escrow balance breakdown |
| Full escrow transaction history |
| Browse prediction market offers |
| Single offer details |
| Your offers |
| Browse all trades |
| Single trade details |
| Your trades |
Tool | What it does |
| Step 1: Request OTP code (email in live, returned directly in sandbox) |
| Step 2: Execute transfer with OTP |
Tool | What it does |
| Swap between any two supported stablecoins |
Tool | What it does |
| Start KYC verification |
| Deposit via ACH or wire |
| Withdraw to bank account |
Tool | What it does |
| Create a prediction market offer |
| Edit an offer (before any trades) |
| Remove offer from marketplace |
| Permanently delete offer |
| Trade against an offer |
| Cancel an active trade |
Tool | What it does |
| Request a transaction from another user's agent |
| Execute after approval |
| Configure approval rules and webhook URL |
Tool | What it does |
| 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 |
| List all supported currencies |
| Get current exchange rate between two currencies |
| Convert amount from one currency to another |
| Convert multiple currency pairs in one request |
| Get historical rates over a date range |
| 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 |
| 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 |
| Yes | N/A | Your API key from agents.bananacrystal.com/account. Sandbox keys start with |
| No |
| Override API endpoint (for MCP tools). Rate service uses |
| No |
| Enable verbose debug logging |
API Scopes: Different API keys can have different scopes:
All keys access the 40 MCP payment tools
"rate" scope keys also access the rate service API (historical rates, batch conversions, statistics)
Create scope-specific keys at agents.bananacrystal.com/account for fine-grained access control
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 ( | 0.3% of transfer amount |
Currency swaps ( | 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:
Identity: Stripe requires human KYC and a legal entity, whereas BananaCrystal issues agent wallets with programmatic identity in seconds.
Authorization: Stripe requires a human to authorize each transaction (3DS2, card PIN, etc.), while BananaCrystal uses programmatic spending policy set once by the operator.
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.
Settlement: Stripe settlements take 2 to 3 days, but BananaCrystal settles on Hedera in under 5 seconds with absolute finality.
Hours: Banks and card networks have operating hours, while BananaCrystal is available 24/7/365.
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.
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-adapterspackageCrewAI 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:
Deposit USDC (external stablecoin) into your BananaCrystal account
Convert to USDb (BananaCrystal's native 1:1 USD stablecoin)
Swap USDb to any of 150+ local currency stablecoins
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 mockThe 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:
Description of the vulnerability
Steps to reproduce
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_balancetool
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 mockThe 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:
Create an API key with
ratescope at agents.bananacrystal.com/accountCall 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 clientCheck version:
bananacrystal-mcp --versionDebug mode: Verbose logging to stderr
DEBUG=true bananacrystal-mcpOverride the API endpoint (e.g. point to local mock):
BANANACRYSTAL_API_URL=http://localhost:3001 bananacrystal-mcpTest with MCP Inspector (interactive tool explorer):
export BANANACRYSTAL_API_KEY=bc_test_your_key_here
npx @modelcontextprotocol/inspector node dist/index.jsThe 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.jsConfigure 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 (
transferscope fortransfer_tokens,swapscope forswap_currency,ratescope 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.
Validate config file is valid JSON at jsonlint.com
Confirm file is at the correct path for your OS
Restart the application completely (full quit, not just reload)
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_afterfield in seconds, which you should respectFor 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
ratescopeSandbox 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 devWhat 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 ( | 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
Check open issues on GitHub for
good first issuelabelsFork the repo and create a branch:
git checkout -b feature/your-contributionMake your changes against the mock server (no API key needed)
Submit a PR with a clear description of what you built and why
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.
Links
Get API key | |
Platform | |
Documentation | |
GitHub | |
npm | |
MCP Protocol | |
Hedera | |
Support |
MIT licensed · Built by BananaCrystal
Agent Payment Infrastructure · Autonomous Payments · AI-Native Finance
Available Tools
40 toolscancel_tradeA
Cancel an active trade and release your locked escrow. Only possible while trade is active.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Trader's external user ID (must be the trade owner). Defaults to your own user ID. | |
| tradeId | Yes | Trade UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| approvalRequestId | Yes | Approval request ID from request_agent_transaction |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Base amount | |
| userId | No | External user ID. Defaults to your own user ID. | |
| currency | Yes | Currency code (e.g. "NGN", "GHS", "USD") | |
| leverage | Yes | Leverage multiplier (e.g. "5x") | |
| rateMode | No | Rate mode: fixed | market_at_creation | market_at_engagement | |
| userName | No | Creator's display name | |
| offerType | Yes | Offer type (e.g. "buy", "sell") | |
| userEmail | No | Creator's email for notifications | |
| advertiser | Yes | Display name shown on the marketplace | |
| cutoffDate | No | ISO date to close engagement (for specific_date cutoff) | |
| cutoffType | No | Engagement cutoff: immediate | duration | specific_date | |
| prediction | Yes | Price direction prediction: "up" or "down" | |
| totalAmount | Yes | Total leveraged amount locked in escrow | |
| exchangeRate | No | Exchange rate (required when rateMode is "fixed") | |
| cutoffMinutes | No | Minutes after creation to close engagement (for duration cutoff) | |
| durationHours | Yes | Offer duration in hours (e.g. 24, 48, 72) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Owner's external user ID. Defaults to your own user ID. | |
| offerId | Yes | Offer UUID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Owner's external user ID. Defaults to your own user ID. | |
| offerId | Yes | Offer UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The message to echo |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Trade amount | |
| userId | No | Trader's external user ID. Defaults to your own user ID. | |
| offerId | Yes | Offer UUID to engage | |
| currency | Yes | Currency code matching the offer (e.g. "NGN") | |
| userName | No | Trader's display name | |
| tradeType | Yes | Your prediction: "long" (price goes up) or "short" (price goes down) | |
| userEmail | No | Trader's email for settlement notifications | |
| buyerProfileId | Yes | Buyer profile ID | |
| sellerProfileId | Yes | Seller profile ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to swap | |
| toCurrency | Yes | Target currency code (e.g. NGN) | |
| fromCurrency | Yes | Source currency code (e.g. USD) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| executionToken | Yes | Execution token received after approval | |
| approvalRequestId | Yes | Approval request ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| targetOwnerUserExtId | Yes | Target user ID or email address |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tokenId | No | Specific token ID to check (e.g. 0.0.67890). Omit for all tokens. | |
| accountId | No | Hedera account ID (e.g. 0.0.12345). Defaults to your account. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID (for audit). Defaults to your own user ID. | |
| transferId | Yes | Brale transfer ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID. Defaults to your own user ID. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID. Defaults to your own user ID. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| currency | Yes | Currency code (e.g. USD, NGN, EUR) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID to get KYC status for. Defaults to your own user ID. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID. Defaults to your own user ID. | |
| offerType | No | Filter by offer type |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Filter by state: active | cancelled | completed | expired | settled | |
| userId | No | External user ID. Defaults to your own user ID. | |
| tradeType | No | Filter by trade type: long | short |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| offerId | Yes | Offer UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tradeId | Yes | Trade UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| type | No | Filter by type: swap | transfer | |
| limit | No | Number of transactions to return (default: 20) | |
| direction | No | Filter by direction: incoming | outgoing | swap |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID. Defaults to your own user ID. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Deposit amount | |
| userId | No | External user ID. Defaults to your own user ID. | |
| currency | Yes | Currency code (e.g. USD, USDC) | |
| railType | No | Payment rail (e.g. ach, wire) | |
| accountId | No | Brale account ID to credit |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | External user ID to initiate KYC for. Defaults to your own user ID. | |
| ttlInSecs | No | Token TTL in seconds (default: 3600) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| limit | No | Items per page (default 10) | |
| search | No | Search by username, email, or advertiser | |
| sortBy | No | Sort order: mostActiveTraders | highestStaked | |
| currency | No | Filter by currency code (e.g. "NGN", "GHS") | |
| offerType | No | Filter by offer type (e.g. "buy", "sell") |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Filter by state: active | cancelled | completed | expired | settled | |
| tradeType | No | Filter by trade type: long | short |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Transaction amount | |
| reason | No | Human-readable reason shown in approval email | |
| currency | Yes | Currency code (e.g. NGN, USD) | |
| requesterName | No | Your display name shown in approval email | |
| transactionType | Yes | Type: transfer | swap | create_offer | accept_trade | |
| transactionParams | Yes | Transaction-specific parameters | |
| targetOwnerUserExtId | Yes | Target user ID or email address |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to transfer (as string to preserve precision) | |
| tokenId | Yes | Hedera token ID to transfer (e.g. 0.0.67890) | |
| tokenSymbol | No | Optional token symbol for the email (e.g. USDC) | |
| recipientAccountId | Yes | Recipient Hedera account ID, email, or username |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Withdrawal amount | |
| userId | No | External user ID. Defaults to your own user ID. | |
| currency | Yes | Currency code (e.g. USD, USDC) | |
| railType | No | Payment rail (e.g. ach, wire) | |
| destinationAccount | No | Destination bank account or address |
TDQS
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.
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.
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.
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.
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.
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_*).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| memo | No | Optional memo for the transaction | |
| toTokenId | Yes | Token ID or symbol to swap TO (e.g. "NGNb" or "0.0.456") | |
| fromAmount | Yes | Amount of source token to swap | |
| fromTokenId | Yes | Token ID or symbol to swap FROM (e.g. "USDb" or "0.0.123") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to transfer (same as request_transfer_otp) | |
| otpCode | No | 6-digit OTP code from email | |
| tokenId | Yes | Hedera token ID (same as request_transfer_otp) | |
| tokenSymbol | No | Optional token symbol | |
| transactionRef | No | Transaction reference from request_transfer_otp response | |
| recipientAccountId | Yes | Recipient identifier (same as request_transfer_otp) |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| requireOtp | No | Enable/disable OTP verification for direct token transfers. Default: true. Set to false to allow transfers without OTP. | |
| callbackUrl | No | HTTPS webhook URL for approval notifications (or null to disable) | |
| requireHumanApproval | No | Enable/disable email approval for agent-to-agent transactions |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Owner's external user ID (for authorization). Defaults to your own user ID. | |
| offerId | Yes | Offer UUID | |
| isActive | No | Toggle offer active/inactive | |
| advertiser | No | Updated advertiser display name | |
| exchangeRate | No | New exchange rate | |
| durationHours | No | Updated duration in hours |
TDQS
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.
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.
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.
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.
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.
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.
40 tool updates
v1.0.1- First observed
cancel_trade - First observed
check_approval_status - First observed
create_offer - First observed
delete_offer - First observed
delist_offer - First observed
echo - First observed
engage_offer - First observed
estimate_swap_fees - First observed
execute_approved_transaction - First observed
get_agent_config - First observed
get_balances - First observed
get_deposit_status - First observed
get_escrow_balances - First observed
get_escrow_history - First observed
get_exchange_rate - First observed
get_kyc_status - First observed
get_my_limits - First observed
get_my_offers - First observed
get_my_profile - First observed
get_my_trades - First observed
get_offer - First observed
get_server_info - First observed
get_trade - First observed
get_transaction_history - First observed
get_withdrawal_status - First observed
initiate_deposit - First observed
initiate_kyc - First observed
list_available_tokens - First observed
list_offers - First observed
list_supported_currencies - First observed
list_trades - First observed
ping - First observed
request_agent_transaction - First observed
request_transfer_otp - First observed
request_withdrawal - First observed
reset_sandbox_balance - First observed
swap_currency - First observed
transfer_tokens - First observed
update_my_agent_settings - First observed
update_offer
TDQS
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.
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.
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.
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
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
Complete financial infrastructure for AI agents — payments, lending, escrow & more.
Payment infrastructure for AI agents: spending rules, approval flows, single-use virtual cards.
Wallet and payments for AI agents: auto-pay x402 APIs in USDC on XDC, within on-chain limits.
Trust and payment layer for the agentic economy on the XRP Ledger.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to interact with cryptocurrency ecosystems through wallet management, trading operations (swaps, DCA, limit orders), staking, and multi-chain support starting with Solana.37GPL 3.0
- AlicenseNot gradedqualityFmaintenanceEnables 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.22MIT
- AlicenseAqualityDmaintenanceEnables 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.36233Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI agents to discover, inspect, and pay for paid HTTP and MCP services using USDC on Solana with a self-custodial wallet.4595-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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