mcp-azeth
Enables interaction with the Ethereum blockchain to manage smart accounts, check balances, and perform ETH or ERC-20 token transfers across Ethereum and supported Layer 2 networks like Base.
@azeth/mcp-server
MCP (Model Context Protocol) server for Azeth -- the trust, discovery, and payment layer for the machine economy. Provides 32 tools for AI agents to create accounts, make payments, discover services, manage reputation, and communicate via XMTP.
Setup
No API keys required. A private key is auto-generated and persisted at ~/.azeth/key. Gas is sponsored automatically.
Install
npm install -g @azeth/mcp-serverClaude Code
claude mcp add azeth -- azeth-mcpClaude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"azeth": {
"command": "azeth-mcp"
}
}
}Then ask Claude: "Create me a smart account called PriceFeedBot" -- that's it.
With Your Own Key
For production or to use an existing key, add environment variables:
{
"mcpServers": {
"azeth": {
"command": "azeth-mcp",
"env": {
"AZETH_PRIVATE_KEY": "0x..."
}
}
}
}Related MCP server: AgentScore
Environment Variables
All optional. The server works with zero configuration on testnet.
Variable | Required | Description |
| No | Account owner's private key. Auto-generated and saved to |
| No | Pimlico bundler API key. Falls back to Azeth server bundler proxy if not set. |
| No |
|
| No | Custom RPC endpoint (per-chain: |
| No | Azeth API server URL (default: |
| No | Separate guardian key for co-signing high-value operations |
| No | For persistent XMTP messaging across restarts |
Tools (32)
Category | Tools | Description |
Account (6) |
| Deploy smart accounts, check balances, manage token whitelists |
Transfer (1) |
| Send ETH or ERC-20 tokens from your smart account |
Payment (4) |
| Pay for x402 services, auto-discover by capability, set up subscriptions |
Agreement (5) |
| Manage recurring payment agreements -- execute, cancel, query, find due payments |
Registry (5) |
| Register on ERC-8004 trust registry, discover services by capability and reputation |
Reputation (4) |
| Payment-gated reputation -- rate services, check USD-weighted scores |
Messaging (5) |
| End-to-end encrypted XMTP messaging between agents |
Guardian (2) |
| View and manage guardian security configuration |
Example Prompts
Here are example prompts to help AI agents understand when to use each tool:
Account Management
"Create a new account for my PriceFeedBot service"
"What's the balance of my main account?"
"Show me all my registered accounts"
"Deposit 0.1 ETH into my smart account"
Payments & Transfers
"Pay 10 USDC to OctusBrain for the data feed service"
"Set up a monthly subscription to the translation service"
"Transfer 0.05 ETH to 0x1234...abcd"
Service Discovery
"Find agents that can do price-feed on Base Sepolia"
"What services are available for translation?"
"Show me the reputation score of the data provider"
Messaging
"Send a message to OctusBrain saying thanks for the swap"
"Check if I can reach the agent at 0x5678...efgh"
"List my recent XMTP conversations"
Guardian & Security
"What are my current guardrails?"
"Whitelist the Uniswap protocol for swaps"
Address Resolution
All tools that accept addresses support flexible resolution:
Ethereum address:
0x1234...abcdParticipant name:
"OctusBrain"(resolved via trust registry)Self-reference:
"me"(your first smart account)Index reference:
"#1","#2"(by account index)
Response Format
All tools return structured JSON:
{
"success": true,
"data": { ... }
}Errors include machine-readable codes and recovery suggestions:
{
"success": false,
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Insufficient USDC balance: have 5.00, need 10.00.",
"suggestion": "Fund your smart account before retrying."
}
}Full Documentation
See the Azeth documentation for complete tool reference with parameter tables, return values, and example prompts for all 32 tools.
Troubleshooting
"Failed to connect to MCP server"
If you used npx instead of a global install, npx has two problems as an MCP server launcher:
Installation prompt blocks stdin —
npxprompts "Ok to proceed? (y)" which reads from the same stdin the MCP protocol uses, deadlocking the connection.Cold-start download timeout — First run must download ~142 packages before the server can start. Claude's MCP client times out waiting.
Fix by installing globally:
npm install -g @azeth/mcp-server
claude mcp add azeth -- azeth-mcpDevelopment
# Build
pnpm build
# Watch mode
pnpm dev
# Run tests
pnpm test
# Type check
pnpm typecheckLicense
MIT
Available Tools
36 toolsazeth_accountsA
List all your Azeth smart accounts with their names, addresses, and trust registry token IDs.
Use this when: You want to see all your accounts at a glance, find an account by name, or get the "#N" index for use in other tools.
Returns: Your EOA owner address and an indexed list of smart accounts. Each account shows its #N index (usable in other tools), name, address, and tokenId.
Note: This is a read-only operation. Names come from the trust registry. The owner is determined by the AZETH_PRIVATE_KEY environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations exist, description carries full burden and succeeds well: discloses 'read-only operation', explains data source ('Names come from the trust registry'), and documents auth mechanism ('owner is determined by the AZETH_PRIVATE_KEY environment variable'). Also details return structure comprehensively.
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?
Perfectly structured with clear semantic blocks: purpose statement, usage guidance, return value specification, and behavioral notes. No redundant text; every sentence adds distinct value beyond the schema. Well front-loaded with the core action.
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?
Comprehensive for a listing tool: compensates for missing output schema by detailing exact return values (EOA owner, indexed list with #N, name, address, tokenId). Covers authentication, data provenance, and workflow integration despite zero annotations and only one optional parameter.
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% for the single 'chain' parameter, which is fully documented in the schema itself. Description does not mention the parameter, but with high schema coverage, baseline 3 is appropriate—no additional semantic value needed or 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?
Excellent specificity: 'List all your Azeth smart accounts with their names, addresses, and trust registry token IDs' provides exact verb, resource, and scope. Clearly distinguishes from sibling creation/mutation tools like azeth_create_account or azeth_transfer.
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?
Strong 'Use this when' section explicitly lists three scenarios (view at glance, find by name, get #N index). Mentions integration with other tools via indices. Lacks explicit 'when not to use' or named alternative tools, preventing a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_balanceA
Check all balances with USD values for your EOA and all Azeth smart accounts.
Use this when: You need to know how much ETH, USDC, or WETH your accounts hold, or you want a total portfolio value in USD before making a transfer or payment.
Returns: Multi-account breakdown with per-token USD values and grand total. EOA is shown first (index 0), followed by smart accounts in deployment order.
Optionally filter to a single smart account by providing its address.
Note: This is a read-only, single-RPC-call operation and safe to call repeatedly. The owner is determined by the AZETH_PRIVATE_KEY environment variable.
Example: {} or { "smartAccount": "#1" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| smartAccount | No | Smart account address, name, or "#N" (account index). If omitted, shows all accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description comprehensively covers: read-only/safety nature ('read-only, single-RPC-call operation and safe to call repeatedly'), authentication mechanism ('owner is determined by the AZETH_PRIVATE_KEY environment variable'), and return structure ('Multi-account breakdown with per-token USD values... EOA is shown first (index 0)').
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?
Well-structured with clear sections (action, usage context, returns, optional filtering, implementation notes, examples). Every sentence serves a distinct purpose. Front-loaded with core functionality, followed by when-to-use, then technical implementation 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?
Despite no output schema, description fully compensates by detailing the return format (multi-account breakdown, per-token USD values, grand total, ordering of EOA vs smart accounts). Also covers environment variable dependencies (AZETH_PRIVATE_KEY, AZETH_CHAIN) making it complete for a balance query 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?
With 100% schema coverage, baseline is 3. Description adds valuable contextual usage guidance: 'Optionally filter to a single smart account by providing its address' explains the filtering behavior, and the examples ('{} or { "smartAccount": "#1" }') demonstrate practical usage patterns beyond raw schema definitions.
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?
Excellent specificity: 'Check all balances with USD values for your EOA and all Azeth smart accounts' provides clear verb (Check), resource (balances), scope (EOA + all smart accounts), and differentiates from siblings like azeth_transfer, azeth_pay, and azeth_deposit by focusing on portfolio reading vs execution.
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?
Strong 'Use this when' section specifies exact scenarios (checking ETH/USDC/WETH holdings, getting portfolio value 'before making a transfer or payment'). Implicitly distinguishes from execution tools by mentioning the 'before' context, though it could explicitly name sibling alternatives like 'instead of azeth_transfer'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_cancel_agreementA
Cancel an active payment agreement. Only the payer (agreement creator) can cancel.
Use this when: You want to stop a recurring payment subscription or data feed. Cancellation is immediate — no timelock, no penalty. Already-paid amounts are not refunded.
Returns: Transaction hash and final agreement state (total paid, execution count).
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| agreementId | Yes | The agreement ID to cancel. | |
| smartAccount | No | YOUR smart account that owns the agreement: address or "#N". Only your own accounts can be cancelled. Defaults to first smart account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses critical behavioral traits: immediate effect ('no timelock'), financial consequences ('no penalty', 'not refunded'), authorization rules ('Only the payer'), and exact return value structure ('Transaction hash and final agreement state').
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?
Four sentences with zero waste. Front-loaded with action, followed by usage condition, behavioral warnings, and return specification. Clear logical flow from intent to execution to consequence.
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?
Complete coverage for a 3-parameter destructive operation. Compensates for missing output schema by documenting return values. Covers authorization, side effects, and financial implications necessary for safe blockchain operation 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?
Schema has 100% description coverage establishing baseline 3. Description adds semantic context about ownership ('Only the payer... can cancel') which reinforces the smartAccount parameter constraints, justifying the bump above baseline.
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?
Opens with specific verb+resource ('Cancel an active payment agreement') and explicitly distinguishes from sibling operations like create_payment_agreement or execute_agreement by stating it stops 'recurring payment subscription or data feed' and that 'Only the payer... can cancel'.
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?
Contains explicit 'Use this when:' clause defining the trigger condition (stopping subscriptions/feeds). Also includes prerequisite/authorization constraint ('Only the payer... can cancel') that guides agent away from using this tool for agreements the user doesn't own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_check_reachabilityA
Check if an Ethereum address is reachable on the XMTP messaging network.
Use this when: You want to verify a participant can receive XMTP messages before sending. This is a read-like operation and safe to retry.
The "address" field accepts: an Ethereum address, a participant name, "me", or "#N" (account index).
Returns: The address and whether it is reachable (boolean).
Note: Reachability is cached for 5 minutes. An address is reachable if it has an active XMTP identity. The checking account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "address": "Alice" } or { "address": "0x1234567890abcdef1234567890abcdef12345678" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| address | Yes | Address to check: Ethereum address, participant name, "me", or "#N". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. Successfully documents: return structure (address + boolean), caching semantics (5 minutes), success criteria (active XMTP identity), and authentication mechanism (AZETH_PRIVATE_KEY env var). No contradictions present.
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?
Well-structured with clear sections: purpose, usage trigger, safety note, parameter details, return values, implementation notes, and examples. Every sentence conveys distinct information. Appropriate length for complexity level without 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?
Comprehensive for a 2-parameter tool without output schema. Documents return values, caching behavior, environment dependencies, and reachability logic. No gaps remain for safe invocation and result interpretation.
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% establishing baseline 3. Description adds practical value through concrete JSON examples showing different address formats (participant name 'Alice' vs hex address) and clarifying '#N' refers to account indices. Helps agents understand semantic distinctions between address input formats.
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?
States specific action ('Check') against specific resource ('Ethereum address') within specific domain ('XMTP messaging network'). Clearly distinguishes from sibling messaging tools like azeth_send_message by positioning it as a pre-flight verification capability.
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?
Contains explicit 'Use this when' clause specifying verification before sending messages. Explicitly identifies appropriate context (pre-send validation) and operational characteristics ('read-like operation and safe to retry'), guiding selection over alternatives like direct message sending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_create_accountA
Deploy a new Azeth smart account with guardian guardrails and register it on the ERC-8004 trust registry.
Use this when: An AI agent or service needs its own on-chain identity with spending limits and trust registry presence. One EOA can own multiple smart accounts.
Single atomic transaction: deploys smart account proxy, installs all 4 modules (Guardian, TrustRegistry, PaymentAgreement, Reputation), registers on ERC-8004, and permanently revokes factory access.
Returns: The deployed smart account address, trust registry token ID, and transaction hash.
Gas: when the Azeth server relay is reachable, creation is sponsored (EIP-712 gasless relay — no ETH required, and testnet USDC is auto-dripped). When the relay is unreachable, creation FALLS BACK to a direct transaction paid by your EOA (requires ETH for gas). The response's "creationPath" field reports which path was used ("gasless-relay" or "direct").
Guardian: By default, the guardian is derived from AZETH_GUARDIAN_KEY env var. If not set, falls back to self-guardian (owner address). For production, always use a separate guardian key. Set AZETH_GUARDIAN_KEY in your .env file.
Example: { "name": "PriceFeedBot", "entityType": "service", "description": "Real-time crypto price data", "capabilities": ["price-feed", "market-data"] }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for this participant in the trust registry. | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| endpoint | No | Optional HTTP endpoint (http:// or https://) where this participant can be reached. | |
| guardian | No | Guardian address for co-signing operations that exceed spending limits. If omitted, derived from AZETH_GUARDIAN_KEY env var. If neither is set, defaults to the owner address (self-guardian, NOT recommended for production). | |
| entityType | Yes | Participant type: "agent" (AI agent), "service" (API/oracle), or "infrastructure" (bridge/relay). | |
| description | Yes | Human-readable description of what this participant does. | |
| capabilities | Yes | List of capabilities this participant offers (e.g., ["swap", "price-feed", "translation"]). | |
| maxTxAmountUSD | No | Max USD per transaction (default: $100 testnet, $50 mainnet). | |
| dailySpendLimitUSD | No | Max USD per day (default: $1000 testnet, $500 mainnet). | |
| emergencyWithdrawTo | No | Address where funds are sent during emergency withdrawal. Defaults to the owner EOA address (derived from AZETH_PRIVATE_KEY). Must be a trusted address you control — this is your recovery destination. |
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 that the action is a single atomic transaction, installs 4 modules, permanently revokes factory access, details gas sponsorship and fallback, explains guardian derivation from environment variables, and specifies return fields (address, token ID, tx hash, creationPath). This is comprehensive and goes beyond basic expectations.
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 well-structured with clear sections: purpose, usage scenario, atomic details, returns, gas info, guardian setup, and an example. It is somewhat lengthy but every sentence adds necessary information without redundancy. Front-loaded with the primary 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 10 parameters, no output schema, and no annotations, the description covers creation behavior, gas handling, guardian configuration, defaults, and includes an example. It does not exhaustively cover all edge cases or errors, but it provides sufficient context for an AI agent to understand invocation and results.
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 all parameters described. The description adds significant value by explaining defaults (chain from env var, guardian from env var, explicit default spending limits per network), providing an example, and clarifying behavior for optional parameters like 'emergencyWithdrawTo'. This enriches the schema information.
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 ('Deploy a new Azeth smart account') and the resource ('register it on the ERC-8004 trust registry'). It distinguishes from sibling tools like 'azeth_accounts' (list accounts) or 'azeth_balance' (check balance) by focusing on creation and registration.
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 says when to use: 'An AI agent or service needs its own on-chain identity with spending limits and trust registry presence.' It also mentions that one EOA can own multiple accounts, providing context. It does not explicitly state when not to use, but the purpose is clear enough to avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_create_payment_agreementA
Set up a recurring payment agreement to another participant. Payments execute on a fixed interval.
Use this when: You need automated recurring payments (subscriptions, data feeds, scheduled transfers) between participants.
Returns: The agreement ID, creation transaction hash, and the effective totalCap (hard on-chain spend ceiling).
Spend cap (totalCap): the on-chain module accrues payments pro-rata — a single execution can pay up to 3 missed intervals — so total payout may exceed amount × maxExecutions. totalCap is a hard on-chain ceiling on total payout. If omitted, it defaults to amount × maxExecutions × 3 (today's accrual worst case, made explicit and enforced) when maxExecutions is set, else amount × 365 (~1 year budget). The response always reports the effective cap.
Note: This creates an on-chain agreement via the PaymentAgreementModule. The payee or anyone can call execute once each interval has elapsed. Requires sufficient token balance for each execution. The payer account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "payee": "Alice", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "amount": "1.00", "intervalSeconds": 86400 } Example with caps: { "payee": "Alice", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "amount": "0.50", "intervalSeconds": 3600, "maxExecutions": 3, "totalCap": "1.50" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| payee | Yes | Recipient: Ethereum address, participant name, "me", or "#N" (account index). | |
| token | Yes | Payment token address. Use an ERC-20 contract address (e.g., USDC) or 0x0000000000000000000000000000000000000000 for native ETH. | |
| amount | Yes | Payment amount per interval in human-readable units (e.g., "10.00" for 10 USDC). | |
| endTime | No | Unix timestamp in SECONDS (not ms) after which the agreement expires. Must be at least now + intervalSeconds (the chain rejects agreements that expire before their first execution) and within 100 years. Omit for no time limit. | |
| decimals | No | Token decimals. Defaults to 6 (USDC). Use 18 for WETH or native ETH. | |
| totalCap | No | Maximum total payout across all executions, in human-readable token units (e.g., "1.50"). Hard on-chain cap. Defaults to amount × maxExecutions × 3 when maxExecutions is set (3 = on-chain accrual worst case), else amount × 365. | |
| maxExecutions | No | Maximum number of payments. 0 or omit for unlimited. | |
| intervalSeconds | Yes | Time between payments in seconds (minimum 60). E.g., 86400 for daily, 604800 for weekly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details on-chain nature, accrual mechanics, totalCap calculation, balance requirements, payer determination, and execution process. Very thorough.
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?
Well-structured with clear sections: purpose, when to use, returns, detailed behavior notes, examples. Slightly long but each part is informative. 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 9 parameters and no output schema, description covers return values, default behaviors, constraints, and provides examples. Complete enough for effective use.
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 descriptions, but description adds meaning beyond schema: explains totalCap defaults, interval minimum, endTime constraints, and provides examples. Adds value over 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?
Description clearly states it sets up a recurring payment agreement on a fixed interval, with specific verb 'create' and resource 'payment agreement'. Distinguishes from siblings like one-time payments or cancellations.
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?
Includes explicit 'Use this when' section listing examples like subscriptions and scheduled transfers. No explicit when-not but context is clear given sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_depositA
Deposit ETH or ERC-20 tokens from your EOA wallet into your own Azeth smart account.
Use this when: Your smart account needs funding for transfers, x402 payments, or other operations.
SECURITY: This verifies ON-CHAIN that the target is a real Azeth smart account owned by you. You cannot deposit to someone else's smart account.
Returns: Transaction hash and deposit details.
Note: If no target account is specified, deposits to your first smart account. For ETH deposits, omit the token parameter. For ERC-20 tokens, provide the token contract address AND decimals. The amount is in human-readable units (e.g., "0.01" for 0.01 ETH, "100" for 100 USDC).
Example: { "amount": "0.01" } or { "amount": "50", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "decimals": 6 }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| token | No | ERC-20 token contract address. Omit for native ETH deposit. | |
| amount | Yes | Amount to deposit in human-readable units (e.g., "0.01" for 0.01 ETH). | |
| decimals | No | Token decimals for ERC-20 deposits. REQUIRED when token is specified. Use 6 for USDC, 18 for WETH. | |
| smartAccount | No | Target smart account address, name, or "#N" (account index). If omitted, deposits to your first Azeth account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It covers critical security behavior ('verifies ON-CHAIN that the target is a real Azeth smart account owned by you'), return values ('Transaction hash and deposit details'), and default fallbacks ('deposits to your first smart account'). Missing only gas/confirmation details.
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?
Information-dense and front-loaded with the core action first. Structure follows logical progression: purpose → usage → security → parameters → examples. Lengthy but justified by the complexity of ETH vs ERC-20 handling and security requirements; no sentences are wasted.
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 complexity (multi-chain, multi-token, cryptographic ownership verification), the description adequately covers prerequisites, security constraints, and return values despite lacking an output schema. Sibling differentiation is implicit but sufficient for selection.
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?
Despite 100% schema coverage, the description adds substantial value through conditional logic: 'omit the token parameter' for ETH, 'provide... AND decimals' for ERC-20, and the amount format clarification ('human-readable units'). The concrete JSON examples provide syntax clarity beyond schema descriptions.
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 opens with a precise action statement: 'Deposit ETH or ERC-20 tokens from your EOA wallet into your own Azeth smart account.' It specifies the exact resource types (ETH/ERC-20), source (EOA), and destination (Azeth smart account), clearly distinguishing it from sibling tools like azeth_transfer (likely inter-account) or azeth_pay (payment operations).
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?
Provides explicit 'Use this when' clause linking to specific downstream operations ('funding for transfers, x402 payments'). Includes clear security exclusions ('You cannot deposit to someone else's smart account'). Does not explicitly name sibling alternatives, though the context sufficiently differentiates it from payment/transfer tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_discover_agent_capabilitiesA
Discover what services an agent offers by sending them a capabilities request over XMTP.
Use this when: You want to find out what services another agent provides, their pricing, and how to use them — before making a service request or payment.
Sends a JSON capabilities request to the target agent and waits for their response. The target agent must be online and have a MessageRouter configured to respond.
The "agentAddress" field accepts: an Ethereum address, a participant name, "me", or "#N" (account index).
Returns: The agent's capabilities including services, pricing, and usage instructions. If no response within the timeout, returns an error indicating the agent may be offline.
Example: { "agentAddress": "0x1234567890abcdef1234567890abcdef12345678" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| timeoutMs | No | Timeout in milliseconds to wait for response. Defaults to 15000 (15 seconds). Max 60000. | |
| agentAddress | Yes | Target agent: Ethereum address, participant name, "me", or "#N" (account index). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It effectively covers prerequisites ('target agent must be online and have a MessageRouter'), protocol details ('Sends a JSON capabilities request'), synchronous behavior ('waits for their response'), and failure modes ('If no response within the timeout').
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?
Well-structured with clear sections: purpose (sentence 1), usage guidelines (sentence 2), behavioral details (sentences 3-4), parameter notes (sentence 5), return values (sentence 6), and example (sentence 7). Every sentence earns its place with zero 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 3-parameter tool with no annotations or output schema, the description is comprehensive. It explains return values ('capabilities including services, pricing, and usage instructions'), timeout behavior, and prerequisites that would otherwise be unknown.
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%, establishing a baseline of 3. The description duplicates the agentAddress format documentation from the schema and includes a helpful JSON example, but does not add significant semantic value beyond the well-documented 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 leads with a specific action ('Discover what services an agent offers') and mechanism ('sending them a capabilities request over XMTP'), distinguishing it from sibling tool 'azeth_discover_services' (which likely queries the registry) by emphasizing direct agent-to-agent communication.
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?
Explicit 'Use this when' pattern clearly defines the context (finding services/pricing) and positions the tool relative to alternatives ('before making a service request or payment'), implying when to use payment/agreement tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_discover_servicesA
Find services, agents, and infrastructure on the trust registry by capability, entity type, and reputation.
Use this when: You need to find a participant that offers a specific capability (e.g., "swap", "price-feed"), or you want to browse available services filtered by type and minimum reputation score.
Returns: Array of registry entries with token ID, owner, entity type, name, capabilities, endpoint, and status.
Note: This queries the Azeth server API. Set AZETH_SERVER_URL env var if the server is not at the default location. Results are ranked by reputation (highest first) by default; pass minReputation to also filter out providers below a threshold. Each result carries a usableEndpoint flag (false for blank/placeholder/ephemeral-tunnel endpoints). No private key is required for read-only discovery.
Example: { "capability": "price-feed" } or { "entityType": "service", "minReputation": 50, "limit": 5 }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| limit | No | Maximum number of results. Defaults to 10. | |
| offset | No | Number of results to skip for pagination. Defaults to 0. | |
| capability | No | Filter by capability (e.g., "swap", "price-feed", "translation"). | |
| entityType | No | Filter by participant type. | |
| minReputation | No | Minimum reputation score (0-100). Higher means more trusted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses critical behaviors: queries Azeth server API, environment variable configuration, default ranking by reputation, usableEndpoint flag, and that no private key is required. Minor omission: no mention of caching or rate limits, but acceptable for a read-only 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 well-structured with front-loaded purpose, clear sections, and examples. It is 8 sentences, efficient but not overly terse. Minor redundancy: example at end repeats schema.
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 lacking an output schema, the description fully explains the return format: 'Array of registry entries with token ID, owner, entity type, name, capabilities, endpoint, and status' plus 'usableEndpoint flag'. Combined with the rich input schema (6 params all described), the tool is completely contextualized.
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 usage context (examples, ranking behavior) but does not significantly extend beyond schema details. The offset parameter is not explained in the description.
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 'Find services, agents, and infrastructure on the trust registry' with specific verbs and resources. It distinguishes from siblings like 'azeth_discover_agent_capabilities' and 'azeth_get_registry_entry' by focusing on broad discovery with filtering.
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 explicit use cases: 'Use this when: You need to find a participant that offers a specific capability... or you want to browse available services filtered by type and minimum reputation score.' While it doesn't state when not to use, it gives sufficient context for appropriate tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_execute_agreementA
Execute a due payment from an on-chain agreement. Anyone can call this — the payer, payee, or a third-party keeper.
Use this when: You are a service provider collecting a recurring payment owed to you, a payer triggering your own agreement manually, or a keeper bot executing due agreements.
Keeper support: When the "account" is a foreign address (not owned by your private key), execution routes through your own account or EOA automatically. No special configuration needed.
The contract validates all conditions on-chain: interval elapsed, active, within caps and limits. Pro-rata accrual means the payout scales with elapsed time (capped at 3x the interval).
Returns: Transaction hash, amount paid, execution count, and next execution time. If the agreement soft-fails (insufficient balance, guardian limit), it returns the failure reason without reverting.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| account | Yes | The payer smart account whose agreement to execute: Ethereum address, participant name, "me", or "#N". | |
| agreementId | Yes | The agreement ID to execute (from azeth_create_payment_agreement or azeth_list_agreements). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden and excels: it validates conditions on-chain (interval, caps), explains pro-rata accrual mechanics (capped at 3x), documents keeper routing logic for foreign accounts, and crucially discloses soft-failure modes (insufficient balance, guardian limits) that return reasons without reverting.
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?
Perfectly structured with front-loaded purpose, followed by use-case scenarios, keeper technical details, validation logic, and return values. No redundancy; every sentence advances understanding of when/how to use the tool or what happens during execution.
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 high complexity (pro-rata calculations, keeper mechanics, soft-failures) and no output schema, the description is complete: it documents return values (tx hash, amount, execution count, next time) and all behavioral edge cases necessary for safe 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?
With 100% schema coverage, baseline is 3. The description adds valuable semantic context: 'account' is clarified as potentially 'foreign' (not owned) triggering keeper routing, and 'agreementId' is explicitly linked to sibling tools (azeth_create_payment_agreement, azeth_list_agreements) helping users locate valid values.
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 opens with the specific action 'Execute a due payment from an on-chain agreement' and immediately distinguishes this from sibling tools by clarifying this triggers payment execution versus creation (azeth_create_payment_agreement), cancellation (azeth_cancel_agreement), or querying (azeth_get_due_agreements).
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?
Provides explicit 'Use this when' guidance covering three distinct roles: service provider collecting payment, payer manually triggering, and keeper bot executing. It further clarifies keeper mechanics for foreign addresses, effectively describing prerequisites and routing behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_active_opinionA
Check if you have an active reputation opinion for a specific agent.
Use this when: You want to verify whether you have already submitted a reputation opinion for an agent before submitting a new one (which would overwrite the existing one).
The agentId is the ERC-8004 token ID of the agent you want to check. Use azeth_discover_services or azeth_get_registry_entry to find token IDs.
Returns: Whether an active opinion exists and its opinion index on the reputation registry.
This is read-only and safe to call at any time.
Example: { "agentId": "3" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| agentId | Yes | The ERC-8004 token ID of the agent to check your opinion for. |
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 states 'This is read-only and safe to call at any time' and discloses the return value structure ('Whether an active opinion exists and its opinion index'). It lacks detail on error conditions or rate limits, but covers the essential safety and return contract adequately.
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 well-structured with clear sections: purpose, usage trigger, parameter semantics, return values, safety note, and example. Every sentence earns its place; there is no repetition of schema contents or unnecessary verbosity while maintaining completeness.
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, the description appropriately documents the return values ('Whether an active opinion exists and its opinion index'). For a read-only verification tool with 100% schema coverage, the description provides complete contextual information including prerequisites and safety characteristics.
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%, establishing a baseline of 3. The description adds significant value by explaining that 'agentId' is an 'ERC-8004 token ID' and directing users to specific sibling tools to find valid token IDs. It also provides a concrete JSON example, which aids in correct invocation.
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 opens with a specific verb ('Check') and clearly identifies the resource ('active reputation opinion') and scope ('for a specific agent'). It distinguishes itself from the sibling tool 'azeth_submit_opinion' by noting that submitting a new opinion would overwrite an existing one, implying this tool is for verification before that write 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?
Contains explicit 'Use this when' guidance describing the specific scenario: verifying existing opinions before submitting new ones to avoid accidental overwrites. It also references sibling tools 'azeth_discover_services' and 'azeth_get_registry_entry' as prerequisites for obtaining the required token ID, providing clear navigation through the tool ecosystem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_agreementA
View full details of a payment agreement including status, payment history, and next execution time.
Use this when: You want to inspect an agreement before executing or cancelling it, verify terms after creation, or check how much has been paid so far.
Returns: Complete agreement details with human-readable amounts, status, and timing.
Note: This is a read-only on-chain query. No gas or private key required for the query itself, but account resolution may need your key if using "me" or "#N".
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| account | Yes | The payer smart account: Ethereum address, participant name, "me", or "#N". | |
| agreementId | Yes | The agreement ID to query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Comprehensive disclosure appropriate for zero annotations: explicitly states 'read-only on-chain query,' gas requirements ('no gas'), and authentication needs ('no private key required...but account resolution may need your key'). Also clarifies return characteristics ('human-readable amounts') and specific account syntax caveats.
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?
Well-structured with clear sections (main description, Use this when, Returns, Note). Front-loaded with core action. Every sentence conveys unique operational guidance; no redundancy with schema or sibling tool names.
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?
Complete for a read-only query tool: describes return value contents ('Complete agreement details with human-readable amounts') despite lack of output schema, covers blockchain-specific concerns (gas, keys, on-chain nature), and contextualizes within the broader agreement lifecycle (creation→inspection→execution/cancellation).
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 baseline is 3. Description adds value by explaining security implications for specific account parameter values ('me' or '#N' require key for resolution), providing critical semantic context beyond the schema's type description.
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?
Excellent specificity: 'View full details of a payment agreement' provides clear verb+resource, and enumerates specific data points (status, payment history, next execution time). Clearly distinguishes from sibling tools like azeth_execute_agreement and azeth_cancel_agreement by emphasizing inspection/verification rather than mutation.
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?
Exemplary explicit guidelines under 'Use this when:' covering three distinct scenarios (pre-execution inspection, post-creation verification, payment history checks). Directly references sibling operations 'executing or cancelling' to establish clear selection criteria vs state-changing alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_cross_chain_reputationA
Get L1-proven cross-chain payment reputation between two accounts from TrustL2Reader.
Use this when: you want the trust-weighted net USD one account has provably paid another across all registered L2 chains, as visible on Ethereum L1.
Returns: totalNetPaidUSD aggregate, per-chain breakdown (proven flag, anchor block, proven-at timestamp), and a human-readable summary.
Note: read-only L1 query — no private key or gas required. Values only update when someone submits a storage proof (azeth_prove_reputation).
Example: { "from": "0x1111…", "to": "0x2222…" }
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Payee address. | |
| from | Yes | Payer address. | |
| l1Chain | No | L1 chain hosting TrustL2Reader. Defaults to "ethereumSepolia". Accepts "ethereum" (and aliases like "eth-sepolia", "mainnet"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully covers behavioral aspects: it states the tool is read-only, requires no private key or gas, and notes that values only update when a storage proof is submitted (azeth_prove_reputation). This provides essential transparency about side effects and limitations.
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 and well-structured: a clear title, usage guidance, return description, a behavioral note, and an example. Every sentence adds value without 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?
Despite no output schema, the description thoroughly explains the return format (aggregate, per-chain breakdown, human-readable summary) and the update mechanism. For a read-only query tool with moderate complexity, this provides sufficient 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?
Schema coverage is 100%, so the schema already documents parameters (from, to, l1Chain). The description adds an example usage and a note about l1Chain defaults, but does not substantially enhance parameter meaning beyond the schema. 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 clearly states the tool's function: 'Get L1-proven cross-chain payment reputation between two accounts from TrustL2Reader.' It identifies the specific resource (cross-chain payment reputation) and action (get), and distinguishes from sibling tools like azeth_get_net_paid and azeth_get_weighted_reputation by emphasizing cross-chain and L1-proven aspects.
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 usage context: 'Use this when: you want the trust-weighted net USD one account has provably paid another across all registered L2 chains, as visible on Ethereum L1.' It does not explicitly exclude scenarios or mention alternatives, but the context is specific enough to guide appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_due_agreementsA
Find all payment agreements that are due for execution across one or more accounts.
Use this when: You are a keeper bot looking for agreements to execute, or a service provider checking which of your customers' payments are collectible.
Returns: Array of due agreements with payer account, agreement ID, and expected payout. Each entry can be passed directly to azeth_execute_agreement.
Note: This scans all agreements for the specified accounts. For large-scale keeper operations, consider filtering by specific accounts rather than scanning all.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| accounts | No | Accounts to scan: addresses, names, "me", or "#N". Defaults to ["me"]. |
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 successfully discloses the scanning nature ('scans all agreements'), performance implications ('consider filtering... for large-scale'), return structure ('Array of due agreements with...'), and workflow integration ('can be passed directly to azeth_execute_agreement'). Lacks explicit confirmation of read-only safety.
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?
optimally structured with clear functional sections: purpose (sentence 1), usage context (sentence 2-3), return value (sentence 4), workflow integration (sentence 5), and performance note (sentence 6). No redundant text; every sentence advances agent understanding.
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 lacking an output schema, the description fully compensates by detailing the return structure (array with payer account, agreement ID, expected payout). It also explains the keeper/execution workflow context essential for blockchain payment agreement tools. Complete for a 2-parameter query tool with no annotations.
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?
Input schema has 100% description coverage for both 'chain' and 'accounts' parameters. The description references 'one or more accounts' which aligns with the accounts parameter, but does not add semantic detail beyond what the comprehensive schema already provides, warranting 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 opens with a specific verb ('Find') and resource ('payment agreements that are due for execution'), clearly distinguishing this from sibling tool 'azeth_list_agreements' by emphasizing the 'due' status filter. It also explicitly names 'azeth_execute_agreement' as the downstream consumer, establishing clear separation of concerns between querying and execution.
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?
Contains an explicit 'Use this when:' section identifying two distinct personas (keeper bots and service providers) with concrete scenarios. It also provides implicit 'when-not' guidance via the Note recommending filtering for large-scale operations, helping agents optimize usage patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_guardrailsA
View the guardian security configuration for a smart account.
Use this when: You want to check spending limits, token/protocol whitelists, daily spend tracking, emergency withdrawal status, or pending guardrail changes.
Returns: Full guardian state including spending limits (USD), whitelisted tokens and protocols, daily spend progress, and any pending timelock changes.
This is read-only and safe to call at any time.
Example: { "smartAccount": "me" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| smartAccount | No | Smart account to inspect. Accepts address, "me", "#N", or account name. Defaults to first account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explicitly states 'read-only and safe to call at any time'. Discloses return structure including 'pending timelock changes' which warns about pre-committed state. Doesn't mention auth requirements, but substantial behavioral coverage provided.
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?
Excellent structure: 1) Purpose, 2) When to use, 3) Return values, 4) Safety declaration, 5) Example. No wasted words; front-loaded with critical info. Sentence density is high with zero 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?
No output schema exists, so describing return values ('Returns: Full guardian state...') is essential and present. Covers safety profile, parameter usage via example, and distinguishes from mutation tools. Could briefly mention relationship to azeth_guardian_status, but complete enough for safe 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?
Schema coverage is 100% with detailed descriptions for both chain (including default fallback chain) and smartAccount (including 'me' shorthand). Description includes example usage reinforcing the 'me' pattern, but since schema already documents all semantics thoroughly, this meets the baseline.
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?
Clear specific verb 'View' + resource 'guardian security configuration'. Explicitly distinguishes from siblings like azeth_guardian_status (implied to return current status vs full configuration) and write operations like azeth_whitelist_token by focusing on security inspection.
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?
Explicit 'Use this when:' section lists specific inspection scenarios (spending limits, whitelists, daily tracking). Clearly indicates appropriate contexts. Lacks explicit named alternatives or 'do not use when' guidance, but use cases are specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_net_paidA
Check how much one account has paid another — either total USD or per-token.
Use this when: You want to verify payment history between two accounts, which determines feedback weight in the payment-gated reputation system.
Two modes: • No token (default): Returns total net paid in 18-decimal USD, aggregated across all tokens via the on-chain oracle. Always >= 0. • With token: Returns the signed per-token delta. Positive = "from" paid more, negative = "to" paid more. Use 0x0...0 for native ETH.
"from" defaults to your own address ("me") if omitted. "to" accepts a name, address, or "me".
Note: This is a read-only on-chain query. No private key or gas is required (unless "me" or a name is used for resolution).
Example: { "to": "Alice" } or { "from": "#1", "to": "Bob", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" }
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Payee address, name, "me", or "#N" (account index). | |
| from | No | Payer address, name, "me", or "#N" (account index). Defaults to "me" (your first smart account). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| token | No | Token address for per-token delta. Omit for total USD across all tokens. Use "0x0000000000000000000000000000000000000000" for native ETH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden effectively. It specifies return formats (18-decimal USD, signed delta), aggregation logic (across tokens via oracle), value constraints (Always >= 0), auth requirements (no private key unless resolving 'me'/names), and read-only nature. Deducting one point only for missing edge case behavior (e.g., non-existent accounts).
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?
Excellent structure: one-line summary, usage clause, bulleted mode explanations, default behavior notes, auth disclaimer, and JSON examples. Every sentence serves a distinct purpose (scope, usage, behavior, safety, syntax). Length is appropriate for the complexity of the dual-mode logic.
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?
Comprehensive for a read-only query tool lacking annotations or output schema. Explains domain context (payment-gated reputation), return value semantics, and address resolution behavior. Would be perfect with brief mention of error cases or zero-result handling.
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 baseline is 3. The description adds significant value by explaining the two operational modes (total USD vs per-token delta) and how parameters interact to trigger each mode. Examples provided ('0x0...0 for native ETH', '#1') supplement the schema constraints effectively.
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 opens with a specific verb-resource combination ('Check how much one account has paid another') and clearly distinguishes this from siblings like azeth_balance (holdings) and azeth_pay (action) by specifying the directional payment relationship between two accounts and the net aggregation concept.
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?
Provides explicit 'Use this when' clause targeting payment verification for reputation system feedback weight. While it doesn't explicitly name sibling alternatives to avoid (e.g., azeth_history), it clearly defines the specific verification use case that distinguishes it from general balance checks or payment execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_registry_entryA
Look up a specific participant on the trust registry by token ID or smart account address.
Use this when: You know a specific agent/service address or token ID and want to see their registration details, capabilities, and reputation.
Provide EITHER tokenId OR address (at least one required). If address is provided, it is resolved to a token ID via on-chain lookup.
Returns: Full registry entry including name, description, entity type, capabilities, endpoint, and weighted reputation score.
This is read-only and safe to call at any time.
Example: { "address": "0x1234..." } or { "tokenId": "5" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| address | No | Smart account address of the participant. Resolved to tokenId on-chain. | |
| tokenId | No | ERC-8004 token ID of the participant to look up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Good: No annotations provided, so description carries full burden. Discloses 'read-only and safe', on-chain resolution behavior for addresses, and detailed return structure (name, capabilities, reputation score). Missing error behavior or rate limit disclosures.
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?
Excellent: Well-structured with clear logical sections (Purpose, Usage, Input guidance, Returns, Safety, Example). Front-loaded with core purpose. No redundant text; every sentence adds unique value beyond the schema.
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?
Strong for complexity level: No output schema exists, but description compensates by documenting all return fields. Covers all 3 parameters with chain aliases noted. Would benefit from error case documentation (e.g., 'not found' handling).
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?
Strong: Schema coverage is 100%, but description adds critical semantic constraints beyond schema—the XOR requirement ('Provide EITHER...') and address resolution logic. Includes concrete JSON examples that clarify expected formats.
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?
Excellent: States specific verb 'Look up' + resource 'participant on the trust registry' + exact identifiers 'token ID or smart account address'. Clearly distinguishes from sibling discovery tools by emphasizing 'specific participant' lookup vs broad discovery.
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?
Strong: Contains explicit 'Use this when' clause defining the specific scenario (known address/token ID seeking details). States parameter constraint 'EITHER...OR (at least one required)'. Lacks explicit 'when not to use' or named alternative siblings (e.g., vs discover_services).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_get_weighted_reputationA
Get USD-weighted reputation for an agent from the on-chain ReputationModule.
Use this when: You want to check the reputation of an agent or service before interacting. Returns a weighted average where each rater's influence is proportional to their USD payment to the agent.
Returns: Weighted reputation with weightedValue (int256), totalWeight, and opinionCount.
Note: This is a read-only on-chain query. No private key or gas is required. Leave raters empty to aggregate across all raters who have submitted opinions.
Example: { "agentId": "1024" } or { "agentId": "1024", "raters": ["0x1234...abcd"] }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| raters | No | Specific rater addresses to include (optional). Empty = all raters. | |
| agentId | Yes | Target agent's ERC-8004 token ID (numeric string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, yet the description fully compensates by disclosing: (1) safety profile ('read-only', 'No private key or gas required'), (2) calculation methodology ('weighted average where each rater's influence is proportional to their USD payment'), (3) return value structure ('weightedValue (int256), totalWeight, and opinionCount'), and (4) filtering behavior for empty raters array.
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?
Well-structured with clear logical sections: purpose, usage trigger, return semantics, behavioral note, parameter guidance, and examples. Every sentence conveys unique information. Examples are appropriately placed at the end without cluttering the core description.
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?
Comprehensive for a read query tool. Since no output schema exists, the description commendably documents the return structure (int256 values, counts). It compensates for missing annotations with safety disclosures. Minor gap: it doesn't mention the chain parameter's default behavior (though the schema covers this thoroughly).
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%, establishing a baseline of 3. The description adds valuable semantic context beyond the schema: it explains the default behavior when raters is empty ('Leave raters empty to aggregate across all raters'), and provides concrete JSON examples showing both minimal and full parameter usage patterns. Slight deduction as it doesn't augment the chain parameter semantics beyond 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 opens with a precise action (Get) + specific resource (USD-weighted reputation) + source (on-chain ReputationModule). It clearly distinguishes this from sibling tools like azeth_get_active_opinion or azeth_get_net_paid by specifying the unique USD-weighted calculation methodology.
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?
Provides explicit 'Use this when' guidance ('check the reputation of an agent or service before interacting'), which establishes clear intent. However, it lacks explicit 'when not to use' guidance or named alternatives (e.g., when to prefer azeth_get_active_opinion instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_guardian_approveA
Review and approve or reject guardian approval requests from agents you protect.
Azeth smart accounts have a guardian who co-signs high-value operations. When an agent exceeds its autonomous spending limits, it sends you (the guardian) an approval request via XMTP. Use this tool to review and respond to those requests.
Three modes:
No request_id: Lists all pending guardian approval requests from your XMTP inbox
request_id + decision "approve": Co-signs the userOpHash and sends approval via XMTP
request_id + decision "reject": Sends rejection with optional reason via XMTP
When approving, this tool signs the userOpHash with your AZETH_PRIVATE_KEY (which is the guardian key on your MCP instance) and sends the signature back to the requesting agent.
Returns: List of pending requests (mode 1), or confirmation of approve/reject (mode 2/3).
Example (list): { } Example (approve): { "request_id": "abc-123", "decision": "approve" } Example (reject): { "request_id": "abc-123", "decision": "reject", "reason": "Amount too high" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| reason | No | Optional reason for rejection. Only used when decision is "reject". | |
| decision | No | Decision: "approve" to co-sign the operation, "reject" to deny it. Required when request_id is provided. | |
| request_id | No | The request ID to approve or reject. If omitted, lists all pending guardian approval requests from your XMTP messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden. It successfully explains critical behavioral traits: it signs userOpHash with AZETH_PRIVATE_KEY, transmits via XMTP, and returns different structures based on mode. Minor gap: could clarify irreversibility of approvals or network confirmation behavior.
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?
Well-structured with clear sectioning (concept explanation, three modes, technical mechanism, returns, examples). Front-loaded with purpose. Slightly verbose but every sentence adds necessary context for a security-critical blockchain operation. Examples are appropriately placed at end.
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?
Lacks output schema (has_output_schema: false), so description must compensate for return values. It mentions returns at high level ('List of pending requests' or 'confirmation') but does not describe the structure/shape of these return objects (e.g., what fields comprise a 'request' object), which limits the agent's ability to interpret results.
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%, establishing baseline 3. The description adds significant value through the 'Three modes' narrative that contextualizes parameter combinations (e.g., request_id omission triggers list mode), and provides concrete JSON examples showing how parameters interact, which aids agent reasoning beyond schema definitions.
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 specific action (review/approve/reject) and resource (guardian approval requests). It distinguishes itself from sibling `azeth_guardian_status` by emphasizing the active response capability ('Use this tool to review and respond') versus passive status checking.
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?
Explicitly states when to use ('When an agent exceeds its autonomous spending limits... sends you an approval request'). Documents three distinct operational modes (list, approve, reject) with clear prerequisites for each, effectively serving as usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_guardian_statusA
Check the status of a pending guardian approval request.
Use this when: You previously submitted an operation that required guardian co-signature and received a timeout with a request_id. This tool checks if the guardian has since responded via XMTP.
Status outcomes:
"approved": Guardian approved. Returns the guardian signature. Retry your original operation — it will now succeed with the guardian co-signature.
"rejected": Guardian rejected with a reason.
"pending": Guardian has not responded yet. Check again later.
"expired": Request expired after 5 minutes. Retry your original operation.
Returns: Current status and relevant details (signature if approved, reason if rejected).
Example: { "request_id": "abc-123" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| request_id | Yes | The guardian approval request ID returned by a previous operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden and succeeds comprehensively. It documents the XMTP communication mechanism, enumerates all four terminal states (approved/rejected/pending/expired), specifies the 5-minute expiration timeout, and explains corrective actions (retry original operation for approved/expired states).
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?
Well-structured with clear visual hierarchy: purpose declaration, usage trigger, enumerated status outcomes with sub-bullets, return value summary, and example. No redundant text; every section serves a distinct purpose for agent decision-making.
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 no output schema exists, the description compensates by detailing return value semantics ('signature if approved, reason if rejected'). It fully documents the asynchronous guardian approval lifecycle, providing sufficient context for the agent to handle all terminal states appropriately.
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%, establishing baseline 3. The description adds value through a concrete JSON example ('Example: { "request_id": "abc-123" }') demonstrating expected input structure, though it does not elaborate further on parameter semantics beyond the schema definitions.
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 opens with a specific verb-resource pair ('Check the status of a pending guardian approval request') that precisely identifies the tool's function. It clearly distinguishes this from sibling tool 'azeth_guardian_approve' by positioning this as a polling/status-check operation rather than an action submission.
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?
Contains explicit 'Use this when' clause that precisely defines the prerequisite state (previous timeout with request_id from co-signature operation). This prevents misuse by clarifying this is a follow-up tool, not for initial guardian requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_historyA
Get recent transaction history for your Azeth smart account.
Use this when: You need to review past transactions, verify a payment was sent, or audit account activity.
Returns: Array of transaction records with hash, from, to, value, block number, and timestamp.
Note: Complete history requires the Azeth indexer. When it is unavailable, this returns a best-effort recent-only window the RPC can serve and sets indexedHistoryUnavailable=true (it never errors) — treat a flagged result as partial, not as "no activity". The account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "limit": 5 } or { "smartAccount": "#2", "limit": 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| limit | No | Maximum number of transactions to return. Defaults to 10. | |
| smartAccount | No | Smart account address, name, or "#N" (account index). If omitted, uses your first smart account. |
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 key behaviors: partial history when indexer unavailable, a flag indexedHistoryUnavailable=true, and that it never errors. It also explains account determination from environment variable. This exceeds minimum 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 concise with clear sections (use cases, returns, note, example). Every sentence serves a purpose, though some phrasing could be tighter.
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 no output schema, the description lists return fields and handles edge cases (indexer unavailability). It is complete for a history tool, covering output, limitations, and configuration.
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 good descriptions, so baseline is 3. The description adds an example and clarifies account resolution for smartAccount. It adds marginal value beyond the schema, earning a 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 retrieves recent transaction history for an Azeth smart account, with specific use cases. It is distinct from sibling tools, though not explicitly contrasting them.
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 lists when to use the tool (review past transactions, verify payment, audit activity) and notes limitations when the indexer is unavailable. It does not provide alternatives or when-not-to-use, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_list_agreementsA
List all payment agreements for a smart account with summary status.
Use this when: You need to find an agreement ID, see all active subscriptions, check which agreements are due for execution, or get an overview of payment commitments.
Returns: Array of agreement summaries sorted by ID (newest first), with status and timing.
Note: This is a read-only on-chain query. Iterates through all agreements for the account. For accounts with many agreements, this may take a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| status | No | Filter by status. "due" shows only agreements ready for execution right now. | all |
| account | No | Smart account to query: address, name, "me", or "#N". Defaults to "me". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden and excels: declares 'read-only on-chain query' (safety), warns 'may take a few seconds' for large accounts (performance), notes 'iterates through all agreements' (implementation), and specifies return format 'Array of agreement summaries sorted by ID' (output compensation for missing schema).
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?
Perfect structure: purpose statement → use cases → returns → technical notes. No wasted words. Performance warning is essential context. Front-loaded with clear intent.
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?
Comprehensive for a list tool: compensates for missing output schema by describing return array structure and sorting, covers performance implications of on-chain iteration, and documents behavioral characteristics that annotations would typically provide.
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 has 100% description coverage (chain variants, account formats, status enum values). Description mentions filtering by status in usage context but does not add syntax/format details beyond schema. Baseline 3 appropriate when schema does 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?
Excellent: 'List all payment agreements for a smart account with summary status' provides specific verb (List), resource (payment agreements), scope (all, with summary status), and implicitly distinguishes from sibling azeth_get_agreement (singular detail fetch) by emphasizing 'all' and 'summary'.
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?
Strong 'Use this when' section lists four specific scenarios including finding agreement IDs and checking due agreements. However, lacks explicit 'when not to use' guidance or naming of alternatives like azeth_get_agreement for detailed single-record views.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_list_conversationsA
List all active XMTP messaging conversations.
Use this when: You want to see who you have been communicating with, or check if a conversation exists with a specific peer.
Returns: Array of conversations with peer address and creation time.
Note: First call may be slow due to XMTP initialization.
Example: { }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Adds critical behavioral context not in schema: warns that 'First call may be slow due to XMTP initialization' and describes return value structure ('Array of conversations with peer address and creation time'). However, omits other behavioral details like sorting order, pagination limits, or error conditions.
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?
Excellent structure with clear section headers (implied via 'Use this when:', 'Returns:', 'Note:', 'Example:'). Front-loaded with purpose, zero wasted words. Each sentence provides distinct value (purpose, usage criteria, return format, performance warning, usage example).
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?
Compensates well for missing output schema by describing return values (array with peer address and creation time). Includes performance warning about XMTP initialization. Could be improved by defining 'active' conversations or mentioning result ordering, but sufficient for a simple list operation with one optional parameter.
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 'chain' parameter fully documented including default behavior and accepted values. Description adds no parameter-specific guidance, but with high schema coverage, baseline 3 is appropriate—the schema handles 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?
States specific verb 'List' + resource 'XMTP messaging conversations' + scope 'active'. Clearly distinguishes from sibling messaging tools like azeth_receive_messages (which gets content) and azeth_send_message (which sends), as this returns conversation metadata/addresses rather than message content.
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?
Provides explicit 'Use this when:' section stating two clear scenarios: checking communication history and verifying if a conversation exists with a specific peer. Lacks explicit 'when not to use' or named alternatives (e.g., contrast with receive_messages), but context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_payA
Pay for an x402-gated HTTP service. Makes the request, handles 402 payment automatically, and returns the response.
Use this when: You need to access a paid API or service that uses the x402 payment protocol (HTTP 402). The tool automatically detects if you have an active payment agreement (subscription) with the service. If an agreement exists, access is granted without additional payment. Otherwise, a fresh USDC payment is signed.
Returns: Whether payment was made, the payment method used ("smart-account" for a fresh smart-account settlement, "agreement" for access granted by an active on-chain payment agreement, "session" for SIWx reuse of a prior payment session (older servers may also report agreement-granted access as "session"), "x402" for a direct EOA settlement, or "none"), the HTTP status, and the response body.
Note: Requires USDC balance to pay (unless an agreement grants access). Set maxAmount to cap spending. Only HTTPS URLs to public endpoints are accepted. The payer account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "url": "https://api.example.com/data" } or { "url": "https://api.example.com/data", "maxAmount": "1.00" }
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The HTTPS URL of the x402-gated service to access. Must be a public endpoint. | |
| body | No | Request body for POST/PUT/PATCH requests (JSON string, max 100KB). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| method | No | HTTP method. Defaults to "GET". | |
| maxAmount | No | Maximum USDC amount willing to pay (e.g., "5.00"). Rejects if service costs more. | |
| smartAccount | No | Smart account to pay from. Use "#1", "#2", etc. (index from azeth_accounts) or a full address. Defaults to your first smart account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: auto-handles 402, checks agreements, signs USDC, requires balance, uses maxAmount cap, only HTTPS, payer from AZETH_PRIVATE_KEY. It also details return values and payment methods.
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?
Approximately 150 words, well-paragraphed. Front-loads purpose, then usage, behavior, notes, example. Every sentence adds value. 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 complexity (6 params, no output schema), the description is thorough: covers payment flow, return values, env vars, chain defaults, smart account selection, and examples. Could mention error handling but overall 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 coverage is 100%, baseline 3. The description adds meaningful context: examples, explanation of maxAmount as a cap, default chain, smart account indexing, and body usage for POST etc. This goes beyond the schema descriptions.
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 pays for x402-gated HTTP services, handles 402 automatically, and returns the response. The verb 'pay' and resource 'x402-gated HTTP service' are specific and distinguish it from siblings like azeth_smart_pay or azeth_create_payment_agreement.
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?
It explicitly says 'Use this when: You need to access a paid API or service that uses the x402 payment protocol'. This provides clear context for when to use. It does not list alternatives, but the specificity is sufficient. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_prove_reputationA
Prove an L2 net-USD payment relationship on L1 via MPT storage proof against TrustL2Reader.
Use this when: you want L2 (Base Sepolia) payment reputation between two accounts recognized on Ethereum L1 (feeds ReputationModule.getTotalNetPaidUSD cross-chain aggregation). Builds the proof from the current rollup anchor and SIMULATES it. Only submits an L1 transaction when broadcast=true.
Returns: status (simulated | broadcast | already-proven), the proven usdDelta and direction, anchor block, and txHash when broadcast.
Note: broadcast=false (default) is read-only and needs no private key. broadcast=true requires AZETH_PRIVATE_KEY whose EOA holds L1 ETH for gas (plain L1 transaction — permissionless, no guardian/bundler involved). Proof building requires an archive L2 RPC (AZETH_ARCHIVE_RPC_URL_BASE_SEPOLIA).
Example: { "payer": "0x1111…", "payee": "0x2222…", "broadcast": false }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | L2 chain whose reputation to prove. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia" (and aliases like "base-sepolia"). Must be an L2 registered on TrustL2Reader. | |
| payee | Yes | Payee address (counterparty that was paid). | |
| payer | Yes | Payer address (the account whose net USD payments should be recognized on L1). | |
| broadcast | No | When true, submit the proof transaction on L1 (requires AZETH_PRIVATE_KEY with L1 ETH for gas). Default false = build + simulate only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behaviors: proof building from current rollup anchor, simulation only by default, L1 transaction submission only when broadcast=true, read-only nature of broadcast=false, need for AZETH_PRIVATE_KEY and L1 ETH for broadcast, and requirement of an archive L2 RPC. This is highly 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 well-organized: a clear purpose statement, usage condition, behavioral explanation, return fields, note, and example. Every sentence contributes necessary information without redundancy. It is appropriately sized for the complexity.
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 complexity and lack of output schema, the description covers purpose, usage, parameters, behavior, return values, and side effects. It could be improved by mentioning potential error conditions or prerequisites like existence of TrustL2Reader, but overall it is sufficiently 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 coverage is 100%, so baseline is 3. The description adds value by clarifying the role of 'payer' (the account whose net USD payments are recognized) and explaining the 'broadcast' parameter's effect and prerequisites. The example also provides concrete usage context.
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 'prove' and the resource 'L2 net-USD payment relationship on L1 via MPT storage proof against TrustL2Reader'. It distinctly differentiates from sibling tools by focusing on cross-chain reputation proof, a unique capability not shared by other azeth tools.
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 states when to use: 'Use this when: you want L2 (Base Sepolia) payment reputation between two accounts recognized on Ethereum L1...' It also clarifies the two modes (broadcast=false vs true) and their requirements. However, it does not explicitly exclude scenarios where alternative tools would be more appropriate, so a 4 is warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_publish_serviceA
Register a service, agent, or infrastructure on the ERC-8004 trust registry with metadata and capabilities.
Use this when: You want to make your agent or service discoverable by other participants in the Azeth network.
Returns: The trust registry token ID and creation transaction hash.
Note: This is a state-changing on-chain operation. The token ID is your permanent identity in the trust registry. Other participants can discover you by capability, entity type, and reputation score. The account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "name": "MarketOracle", "description": "Real-time market data API", "entityType": "service", "capabilities": ["price-feed", "market-data"], "endpoint": "https://api.example.com" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for this participant in the trust registry. | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| catalog | No | Off-chain service catalog for multi-service providers. Included in initial registration as a snapshot; providers should serve their live catalog from their endpoint. Each entry: name, path, method (GET/POST/etc), description, pricing, capabilities, params, paid (default true), accepts (multi-chain payment methods). | |
| pricing | No | Listed price for this service (e.g., "$0.01/request", "Free", "$10/month"). Informational — actual x402 settlement price may differ. | |
| endpoint | No | Optional HTTP endpoint where this participant can be reached. | |
| entityType | Yes | Participant type: "agent" (AI agent), "service" (API/oracle), or "infrastructure" (bridge/relay). | |
| description | Yes | Human-readable description of what this participant does. | |
| capabilities | Yes | List of capabilities offered (e.g., ["swap", "price-feed", "translation"]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full disclosure burden effectively. It explicitly states 'state-changing on-chain operation', explains the auth mechanism (AZETH_PRIVATE_KEY env var), describes the permanent identity aspect of the token ID, and clarifies discoverability outcomes.
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?
Well-structured with clear visual separators (Use this when:, Returns:, Note:, Example:). Each section serves a distinct purpose. Slightly verbose but no wasted sentences; the example JSON is helpful though incomplete (omits complex 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?
For a complex blockchain operation with no output schema, the description adequately explains return values (token ID and transaction hash) and their significance. Covers auth, state change, and network effects well, though could mention error scenarios or gas implications.
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 has 100% description coverage, establishing a baseline of 3. The JSON example adds concrete semantic context for capabilities and entity types, but does not fully illustrate complex nested parameters like 'catalog' structure or pricing formats.
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 opening sentence clearly states the specific action (Register), resources (service, agent, or infrastructure), and scope (ERC-8004 trust registry). It distinguishes from siblings like 'azeth_update_service' (implied by 'Register' vs 'Update') and 'azeth_discover_services' (.publish vs .discover).
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?
Provides explicit 'Use this when' clause stating the discoverability intent. However, it lacks explicit guidance on when to use 'azeth_update_service' instead for existing registrations, or prerequisites like needing an account first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_receive_messagesA
Read incoming encrypted messages from the XMTP messaging network.
Use this when: You want to check for messages from other agents or services. This is the "inbox" view — it lets you read what others have sent you.
Two modes:
With "from": Read messages from a specific sender (up to "limit" messages)
Without "from": Read the latest message from each conversation (inbox overview)
The "from" field accepts: an Ethereum address, a participant name, "me", or "#N" (account index).
Returns: Array of messages with sender address, content, timestamp, and conversation ID.
Note: XMTP messages are end-to-end encrypted. The account reading messages is determined by the AZETH_PRIVATE_KEY environment variable. First call may be slow due to XMTP initialization.
Example: { "from": "Alice", "limit": 10 } or { } (all conversations)
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Read messages from a specific sender. Accepts: address, name, "me", "#N". Omit for inbox overview. | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| limit | No | Maximum messages to return. Defaults to 20. Max 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. It successfully documents: end-to-end encryption nature, account determination via AZETH_PRIVATE_KEY environment variable, initialization latency on first call, and dual behavioral modes. Missing rate limits or caching details, but covers critical runtime characteristics well.
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?
Well-structured with clear sections: purpose, usage trigger, behavioral modes, return values, implementation notes, and examples. Front-loaded with essential information. Slightly verbose but information-dense; the mode differentiation and return structure documentation justify the length given no output schema exists.
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?
Excellent compensation for missing annotations and output schema. Describes return structure (array with sender, content, timestamp, conversation ID), encryption characteristics, environment variable dependencies, and performance characteristics. Covers all 3 parameters conceptually and provides concrete usage examples. Complete for a message retrieval 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 has 100% coverage (baseline 3). Description adds value by explaining the interaction model between parameters—the 'Two modes' section clarifies that omitting 'from' triggers inbox overview behavior while including it enables specific sender filtering with limit application. Examples demonstrate valid parameter combinations.
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?
Description opens with specific verb 'Read' and resource 'incoming encrypted messages from the XMTP messaging network.' It clearly distinguishes from sibling azeth_send_message by describing this as the 'inbox view' for reading what others sent you, versus sending.
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?
Provides explicit 'Use this when' guidance for checking messages from other agents. Documents two distinct usage modes (with/without 'from' parameter) that clarify behavioral alternatives. Lacks explicit 'when not to use' or comparison to azeth_list_conversations, but the 'inbox' framing provides clear contextual boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_send_messageA
Send an encrypted message to another participant via the XMTP messaging network.
Use this when: You need to communicate with another agent or service using end-to-end encrypted messaging. The recipient must be reachable on the XMTP network (use azeth_check_reachability first if unsure).
The "to" field accepts: an Ethereum address, a participant name, "me", or "#N" (account index).
Returns: The conversation ID and recipient address confirming delivery.
Note: This is NOT idempotent — each call sends a new message. The sender account is determined by the AZETH_PRIVATE_KEY environment variable. Messages are limited to 10,000 characters.
Example: { "to": "Alice", "content": "Hello, I would like to use your price-feed service." }
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient: Ethereum address, participant name, "me", or "#N" (account index). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| content | Yes | Message text content (1-10,000 characters). | |
| contentType | No | Content type hint. Defaults to "text/plain". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description bears full disclosure burden. It successfully documents idempotency ('NOT idempotent'), authentication source ('AZETH_PRIVATE_KEY environment variable'), size limits ('10,000 characters'), and return values ('conversation ID and recipient address'). Only misses error handling or rate limiting details.
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?
Well-structured with clear sections: Purpose, Usage condition, Prerequisites, Return values, and Important notes. Front-loaded with the core action. Slightly verbose but justified given complexity (4 parameters, encryption context, prerequisites) and absence of annotations.
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?
Comprehensive for a messaging tool with no output schema and no annotations. Covers prerequisites (reachability), behavioral constraints (idempotency, length limits), authentication method, and return structure. No significant gaps given the tool's scope.
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%, establishing baseline 3. Description adds value by consolidating the 'to' field syntax options into narrative context ('accepts: an Ethereum address...') and providing a concrete JSON example showing parameter usage patterns beyond raw schema definitions.
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?
States specific action ('Send an encrypted message'), target resource ('participant'), and network ('XMTP'). Clearly distinguishes from sibling 'azeth_receive_messages' by directionality and 'azeth_check_reachability' by being the actual messaging action versus a prerequisite check.
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?
Provides explicit 'Use this when' clause defining the communications use case. Names specific prerequisite tool ('azeth_check_reachability first if unsure') for recipient verification, clearly delineating the workflow sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_smart_payA
Discover the best service for a capability and pay for it automatically.
Use this when: You need a service by CAPABILITY (e.g., "price-feed", "market-data", "translation") and want Azeth to pick the highest-reputation provider, handle payment, and fall back to alternatives if needed.
How it differs from azeth_pay:
azeth_smart_pay: "I need price-feed data" → Azeth discovers the best service, pays it, returns the data.
azeth_pay: "I need data from https://specific-service.com/api" → You know which service, Azeth pays it.
Flow: Discovers services ranked by reputation → tries the best one → if it fails, tries the next. Set autoFeedback: true to automatically submit a reputation opinion based on service quality after payment. Note: autoFeedback defaults to false in MCP context (ephemeral client). Enable it if the MCP server has a bundler configured.
INTENT (recommended): pass intent (loose token(s)) or params (exact) to get exactly the asset/resource you want. Azeth matches your intent deterministically (no LLM, low latency): for a provider that exposes a CATALOG of many paid endpoints (e.g. price of BTC, ETH, XRP) it navigates to the right priced route; for a provider with a single fixed priced route it pays only when the asset you named appears in that route. SAFETY GUARANTEE: with an intent set, smart_pay NEVER spends on a non-matching asset — on a miss it returns { paid:false, resolved:false, options:[…] } (the catalog menu + valid param values), so you refine and retry in one shot with no money spent on the wrong thing.
Returns: The response data, which service was used, attempts, payment details, and (for catalog navigation) a resolved receipt of the entry + bound params.
Example: { "capability": "price-feed", "intent": "bitcoin" } → pays the BTC price route and returns the data. Example: { "capability": "price-feed", "params": { "coinId": "ethereum" } } or { "capability": "translation", "maxAmount": "0.50", "method": "POST", "body": "{"text": "hello"}" }
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body for POST/PUT/PATCH requests (JSON string, max 100KB). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| intent | No | What you want, as loose token(s) (e.g. "bitcoin", or ["bitcoin","fresh"]). When the chosen provider serves a catalog of paid endpoints, these are matched deterministically against the catalog's param values to pick the concrete route. On a miss, the response returns the catalog "options" so you can retry with an exact value. | |
| method | No | HTTP method. Defaults to "GET". | |
| params | No | Precise catalog params (e.g. { "coinId": "bitcoin" }) — overrides intent. Use when you already know the provider's param names (e.g. from a prior "options" response). | |
| maxAmount | No | Maximum USDC amount willing to pay per service (e.g., "1.00"). Rejects if service costs more. | |
| capability | Yes | Service capability to discover (e.g., "price-feed", "market-data", "translation", "compute"). | |
| autoFeedback | No | Automatically submit a reputation opinion after payment based on service quality. Defaults to false. | |
| smartAccount | No | Smart account to pay from. Use "#1", "#2", etc. (index from azeth_accounts) or a full address. Defaults to your first smart account. | |
| minReputation | No | Minimum reputation score (0-100) to consider. Services below this are excluded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description fully covers behavior: discovery by reputation, fallback, autoFeedback defaults, safety guarantee on intent miss, return structure.
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?
Well-structured with clear sections and examples. Slightly lengthy but front-loaded with core purpose and differentiation.
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?
10 parameters and no output schema, but description covers return values, intent resolution, and safety guarantees adequately for the complexity.
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% (baseline 3). Description adds significant value: explains intent vs params, autoFeedback defaulting, chain aliases, maxAmount rejection behavior.
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 it discovers and pays for the best service by capability. It distinguishes from sibling azeth_pay by contrasting capability-based vs. URL-based selection.
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?
Explicitly says when to use (by capability) and how it differs from azeth_pay. Provides flow description and intent usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_submit_opinionA
Submit payment-gated reputation opinion for an agent or service on the ERC-8004 Reputation Registry.
Use this when: You have interacted with an agent/service and want to rate their performance. Opinion weight is determined by how much you have paid the target in USD (payment-gated). If you update your opinion for the same agent, the previous entry is automatically revoked.
Returns: The transaction hash of the opinion submission.
Note: This is a state-changing on-chain operation via the Azeth ReputationModule. The rating field is a number from -100 to 100 (supports decimals like 85.5). Stored on-chain in WAD format (18-decimal) for consistent aggregation. You must have a minimum USD payment to the target (payment-gated). Tags allow categorization (e.g., tag1="quality", tag2="x402"). The submitter account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "agentId": "1024", "rating": 85, "tag1": "quality", "tag2": "x402" } Example (negative): { "agentId": "1024", "rating": -50, "tag1": "reliability", "tag2": "downtime" }
| Name | Required | Description | Default |
|---|---|---|---|
| tag1 | No | Primary categorization tag (e.g., "quality", "uptime", "speed"). Default: "quality". | quality |
| tag2 | No | Secondary categorization tag (e.g., "x402", "rpc", "swap"). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| rating | Yes | Rating from -100 to 100 (supports decimals like 85.5). Stored on-chain in WAD (18-decimal) format. | |
| agentId | Yes | Target agent's ERC-8004 token ID (numeric string). | |
| endpoint | No | Service endpoint being rated (optional). | |
| opinionURI | No | URI containing detailed opinion data (optional). | |
| opinionHash | No | Hash of the opinion data for integrity verification (optional, 0x-prefixed bytes32). | 0x0000000000000000000000000000000000000000000000000000000000000000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries full burden: states 'state-changing on-chain operation', discloses auto-revocation of previous entries, notes AZETH_PRIVATE_KEY auth requirement, explains payment-gating mechanism, and specifies transaction hash return.
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?
Well-structured with clear sections (purpose, usage, returns, notes, examples). Slightly verbose but justified by complexity (8 params, blockchain mutation). Every sentence adds value; front-loaded with critical behavioral constraints.
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?
Excellent coverage for a complex state-changing operation: covers prerequisites (payment, auth), side effects (revocation), data formats (WAD), and return values. No output schema exists but return value is documented.
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?
Despite 100% schema coverage, adds crucial context: rating range (-100 to 100, decimals), WAD format storage details, tag usage examples ('quality', 'x402'), and private key environment variable dependency.
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?
Specific verb 'Submit' combined with precise resource 'payment-gated reputation opinion' and target 'ERC-8004 Reputation Registry' clearly distinguishes this from sibling tools like 'azeth_get_active_opinion' or 'azeth_publish_service'.
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?
Explicit 'Use this when' clause ('interacted with an agent/service and want to rate') and prerequisites ('must have a minimum USD payment to the target'). Also clarifies update semantics vs. alternatives ('previous entry is automatically revoked').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_subscribe_serviceA
Subscribe to an x402-gated service by creating a payment agreement.
Use this when: You want to set up a subscription instead of paying per-request. The tool fetches the service URL, parses the 402 payment-agreement extension terms, and creates an on-chain payment agreement matching those terms.
Returns: The agreement ID, transaction hash, and subscription details.
Note: The service must advertise payment-agreement terms in its 402 response. After subscribing, subsequent calls to azeth_pay will automatically detect the agreement. No need to pass an agreementId — the server recognizes your wallet via SIWx authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The HTTPS URL of the x402-gated service to subscribe to. | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| totalCap | No | Maximum total payout in human-readable token units (e.g., "100.00"). Omit BOTH this and maxExecutions to default to ~1 year of payments (amountPerInterval × 365). | |
| maxExecutions | No | Maximum number of payments (count cap). 0 or omit for no count limit — an amount cap (totalCap) applies instead. | |
| intervalSeconds | No | Override the suggested interval (seconds, minimum 60). Defaults to the service suggestion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains the process: fetches URL, parses 402 terms, creates on-chain agreement. Mentions returns and prerequisite (service must advertise terms). Could detail side effects like gas costs, but overall 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?
Description is concise: a brief paragraph plus a note. Every sentence adds value—purpose, usage, process, returns, and important note about automatic detection. Front-loaded and 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?
Covers purpose, usage, behavior, prerequisites, and returns. Without an output schema, it names the returned fields (agreement ID, transaction hash, details). Lacks exact format but is sufficient for the tool's complexity (5 params, 1 required, no nested objects).
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 baseline 3 applies. The description does not add significant meaning beyond the schema's parameter descriptions; it focuses on high-level behavior rather than parameter details. Adequate but not over-performing baseline.
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 subscribes to an x402-gated service by creating a payment agreement. It distinguishes from the sibling tool azeth_pay by specifying it is for setting up a subscription instead of per-request payment, and implicitly differentiates from azeth_create_payment_agreement by focusing on automatic parsing of 402 terms.
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?
Explicitly states 'Use this when: You want to set up a subscription instead of paying per-request,' and notes that after subscribing, azeth_pay will automatically use the agreement. Provides clear context but does not explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_transferA
Send ETH or ERC-20 tokens FROM your Azeth smart account to another address.
Use this when: You need to pay another participant, fund an account, or move tokens between addresses.
The "to" field accepts: an Ethereum address, a participant name (resolved via trust registry), "me" (your first smart account), or "#N" (Nth account index from azeth_accounts).
IMPORTANT: This sends FROM your smart account, not your EOA. Ensure your smart account is funded. Use azeth_deposit first to fund your smart account if needed. One EOA can own multiple smart accounts — specify which one, or defaults to first.
Returns: Transaction hash, sender smart account address, recipient address (with resolution info), and amount sent.
Note: This is a state-changing operation. The tool shows the resolved address before executing. For ETH transfers, omit the token parameter. For ERC-20 tokens, provide the token contract address AND decimals. The amount is in human-readable units (e.g., "1.5" for 1.5 ETH or "100" for 100 USDC). The sender account is determined by the AZETH_PRIVATE_KEY environment variable.
Example: { "to": "Alice", "amount": "0.001" } or { "to": "0x1234...abcd", "amount": "10", "token": "0x036C...CF7e", "decimals": 6 }
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient: Ethereum address, participant name, "me", or "#N" (account index). | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| token | No | ERC-20 token contract address. Omit for native ETH transfer. | |
| amount | Yes | Amount to send in human-readable units (e.g., "1.5" for 1.5 ETH, "100" for 100 USDC). | |
| decimals | No | Token decimals for ERC-20 transfers. REQUIRED when token is specified. Use 6 for USDC, 18 for WETH. | |
| smartAccount | No | Smart account to transfer from: address, name, or "#N". If omitted, uses your first smart account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explicitly states 'This is a state-changing operation,' discloses return values (tx hash, sender/recipient addresses, amount), notes that resolved address is shown before executing, and explains sender determination via AZETH_PRIVATE_KEY env var.
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?
Lengthy but well-structured with clear logical sections: purpose, usage conditions, input formats, warnings, returns, and examples. Every sentence conveys necessary information for safe blockchain operations, though slightly verbose.
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?
Excellent coverage for complex tool with no output schema and 6 parameters. Documents return values, prerequisites, environment variable dependencies (AZETH_PRIVATE_KEY, AZETH_CHAIN), and safety guardrails (showing resolved address pre-execution). Complete despite lack of structured annotations.
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 has 100% coverage (baseline 3). Description adds significant value: concrete JSON examples, explains conditional logic (omit token for ETH, required for ERC-20), clarifies relationship between token and decimals parameters, and documents valid 'to' field formats (address, name, 'me', '#N').
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?
Clear specific verb ('Send') and resource ('ETH or ERC-20 tokens'). Explicitly distinguishes from siblings by specifying it sends FROM smart account (not EOA), contrasting with azeth_deposit (funding) and referencing azeth_accounts for the #N syntax.
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?
Explicit 'Use this when' section lists specific scenarios (pay participant, fund account, move tokens). Clear prerequisite guidance: 'Use azeth_deposit first to fund your smart account if needed.' Also warns about EOA vs smart account distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_update_serviceA
Update metadata for your registered service on the trust registry.
Use this when: You need to change your service endpoint, description, capabilities, or other metadata after initial registration with azeth_publish_service.
Supported metadata keys: "endpoint", "description", "capabilities", "name", "entityType", "pricing". For capabilities, provide a JSON array string (e.g., '["translation", "nlp"]').
Note: Catalogs are off-chain and served from your endpoint. Update your catalog by updating the response at your endpoint, not via this tool.
Returns: Confirmation with transaction hash.
Note: Your account must already be registered on the trust registry. This requires a transaction (gas cost). Only the account owner can update metadata.
Example: { "key": "endpoint", "value": "https://api.example.com/v2" }
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Metadata key to update. | |
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| value | Yes | New value. For "capabilities", provide a JSON array string like '["translation", "nlp"]'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full disclosure burden effectively. Documents gas costs ('requires a transaction'), authorization ('Only the account owner'), prerequisites ('account must already be registered'), and return value ('Confirmation with transaction hash'). Missing only edge case/error behavior 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?
Well-structured with clear semantic blocks: purpose, usage conditions, supported values, important limitations (catalogs), return type, prerequisites, and example. Each sentence delivers unique information. Minimally redundant with schema (only capabilities format overlaps slightly).
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 blockchain mutation operation with no output schema, coverage is strong: gas costs, ownership requirements, prerequisites, return format, and sibling relationships are all documented. Only lacks explicit error condition descriptions or idempotency notes.
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%, establishing baseline 3. Description adds value by enumerating supported keys (redundant but scannable), emphasizing JSON array format for capabilities, and providing a concrete JSON usage example ('{"key": "endpoint", ...}') that clarifies the key-value structure.
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?
States specific action ('Update metadata') and resource ('registered service on the trust registry'). Explicitly distinguishes from sibling azeth_publish_service by noting this is for changes 'after initial registration', clarifying the update vs. create distinction.
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?
Provides explicit 'Use this when' clause with specific scenarios. Names prerequisite sibling tool (azeth_publish_service) for initial registration. Critically includes negative guidance ('Update your catalog...not via this tool') preventing common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_update_service_batchA
Update multiple metadata fields for your registered service in one call.
Use this when: You need to change several metadata fields at once (e.g., endpoint + description + capabilities).
Supported metadata keys: "endpoint", "description", "capabilities", "name", "entityType", "pricing". For capabilities, provide a JSON array string (e.g., '["translation", "nlp"]').
Note: Catalogs are off-chain. Update your catalog by updating your endpoint response.
Returns: Confirmation with the final transaction hash.
Note: On the current (v1.3) contracts the updates execute as SEQUENTIAL transactions, not atomically — the deployed GuardianModule cannot validate batch UserOperations. If an update fails midway, the error reports how many updates already landed. Maximum 5 key-value pairs per batch.
Example: { "updates": [{"key": "endpoint", "value": "https://api.example.com/v2"}, {"key": "description", "value": "Updated service"}] }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| updates | Yes | Array of {key, value} pairs to update. Max 5 updates per batch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses sequential non-atomic execution, partial failure handling, max limit, off-chain catalog nature, and return value, exceeding expectations.
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?
Well-structured with sections and front-loaded purpose, but somewhat lengthy; could be slightly more concise while retaining all key 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 no output schema, description covers return confirmation, edge cases like sequential execution and max items, and gives example; highly complete for the task.
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 baseline 3; description adds value by explaining capabilities JSON array string, default chain, and providing an example.
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?
Clearly states it updates multiple metadata fields for a registered service in one call, lists supported keys, and distinguishes from sibling tools by specifying batch updates.
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?
Explicitly says when to use (changing several fields at once), gives guidance on capabilities format and max items, but doesn't explicitly contrast with single update tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_whitelist_protocolA
Add or remove a protocol (contract address) from your smart account's guardian whitelist.
Use this when: You need to interact with a new DeFi protocol or contract through executor modules (like PaymentAgreementModule). Protocols must be whitelisted for automated operations to succeed.
The "protocol" field must be a valid Ethereum address of the contract to whitelist.
Returns: Confirmation of the whitelist update with transaction hash.
Note: This requires a UserOperation (gas). Only the account owner can modify whitelists. Whitelisting a protocol allows executor modules to interact with it on your behalf. Whitelist additions require guardian co-signature for security. Self-guardian accounts (guardian == owner) co-sign automatically; a distinct guardian must approve via AZETH_GUARDIAN_KEY + AZETH_GUARDIAN_AUTO_SIGN=true or XMTP.
Example: { "protocol": "0x71D52798e3D0f5766f6f0AFEd6710EB5D1FF4DF9", "allowed": true }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| allowed | Yes | true to whitelist, false to remove from whitelist. | |
| protocol | Yes | Protocol/contract address to whitelist or delist (0x...). | |
| smartAccount | No | Smart account address, name, or "#N". Defaults to first smart account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It thoroughly discloses: requires a UserOperation (gas), only account owner can modify, requires guardian co-signature, explains self-guardian vs distinct guardian behavior, and mentions the return value (confirmation with transaction hash).
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 well-structured with a clear purpose, a dedicated 'Use this when' section, a note about requirements, and an example. Every sentence earns its place, and it is appropriately sized without 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?
Given full schema coverage and the comprehensive description covering behavioral aspects (permissions, co-signature, gas requirements) and an example, the description is complete. There is no output schema, but the return value is mentioned.
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 baseline is 3. The description adds value beyond schema by providing an example, clarifying that the protocol field must be a valid Ethereum address, and noting default behaviors for chain and smartAccount. This enhances understanding.
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 'Add or remove a protocol (contract address) from your smart account's guardian whitelist.' This is a specific verb and resource, and it distinguishes from the sibling tool 'azeth_whitelist_token' which deals with 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?
The description explicitly says 'Use this when: You need to interact with a new DeFi protocol or contract through executor modules (like PaymentAgreementModule). Protocols must be whitelisted for automated operations to succeed.' This provides clear context and when to use, but does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azeth_whitelist_tokenA
Add or remove a token from your smart account's guardian whitelist.
Use this when: You need to whitelist a new token for payment agreements or other executor-module operations. Newly created accounts already have ETH, USDC, and WETH whitelisted by default.
Why it matters: The GuardianModule enforces a token whitelist for automated operations (payment agreements, swap execution). Owner-signed transfers bypass the whitelist, but executor modules like PaymentAgreementModule require the token to be whitelisted.
Returns: Transaction hash confirming the whitelist update.
Note: Only the account owner can update their own whitelist. Whitelisting a token is a guardrail change that requires guardian co-signature. Self-guardian accounts (guardian == owner) co-sign automatically; with a distinct guardian the call returns a GUARDIAN_COSIGN_REQUIRED error with guidance until the guardian signs.
Example: { "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "allowed": true }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain. Defaults to AZETH_CHAIN env var or "baseSepolia". Accepts "base", "baseSepolia", "ethereumSepolia", "ethereum" (and aliases like "base-sepolia", "eth-sepolia", "sepolia", "eth", "mainnet"). | |
| token | Yes | Token contract address to whitelist/delist. Use "0x0000000000000000000000000000000000000000" for native ETH. | |
| allowed | Yes | true to whitelist the token, false to remove it from the whitelist. | |
| smartAccount | No | Smart account address, name, or "#N". Defaults to first smart account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure. It details that only the owner can update, the requirement for guardian co-signature, the auto-signing for self-guardian accounts, and the specific error (GUARDIAN_COSIGN_REQUIRED) for distinct guardians. It also explains the impact on executor modules and returns a transaction hash. This is comprehensive.
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 well-structured with clear sections (Use this when, Why it matters, Returns, Note, Example). It is moderately long but each sentence adds value without redundancy. Slight verbosity in the 'Why it matters' section could be trimmed, but overall 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?
Given the tool's complexity (mutation with guardian and whitelist logic), no output schema, and no annotations, the description covers purpose, usage context, behavioral nuances, return value, and provides an example. It adequately prepares an agent to select and invoke the tool correctly without missing critical information.
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 covers all 4 parameters with descriptions (100% coverage). The description's example and note about using the zero address for native ETH add marginal value beyond the schema. It does not explain chain aliases or smart account defaults beyond what the schema already provides. 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 clearly states the action: 'Add or remove a token from your smart account's guardian whitelist.' It specifies the resource (guardian whitelist) and the context (payment agreements or executor-module operations). While there is a sibling tool 'azeth_whitelist_protocol', the description's specificity and depth effectively distinguish its purpose from general whitelist operations.
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 states when to use the tool: 'Use this when: You need to whitelist a new token for payment agreements or other executor-module operations.' It also notes default whitelisted tokens (ETH, USDC, WETH). However, it does not explicitly exclude alternative tools or mention when not to use it, lacking full comparative 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.
3 tool updates
v0.2.24- Changed
azeth_create_payment_agreement2 fields changed- added
Input schema / properties / endTimeAdded value: +{ + "description": "Unix timestamp in SECONDS (not ms) after which the agreement expires. Must be at least now + intervalSeconds (the chain rejects agreements that expire before their first execution) and within 100 years. Omit for no time limit.", + "type": "integer" +} - added
Input schema / properties / totalCapAdded value: +{ + "description": "Maximum total payout across all executions, in human-readable token units (e.g., \"1.50\"). Hard on-chain cap. Defaults to amount × maxExecutions × 3 when maxExecutions is set (3 = on-chain accrual worst case), else amount × 365.", + "maxLength": 32, + "type": "string" +}
- Added
azeth_get_cross_chain_reputation - Added
azeth_prove_reputation
2 tool updates
v0.2.22- Changed
azeth_smart_pay2 fields changed- added
Input schema / properties / intentAdded value: +{ + "anyOf": [ + { + "maxLength": 256, + "type": "string" + }, + { + "items": { + "maxLength": 256, + "type": "string" + }, + "maxItems": 16, + "type": "array" + } + ], + "description": "What you want, as loose token(s) (e.g. \"bitcoin\", or [\"bitcoin\",\"fresh\"]). When the chosen provider serves a catalog of paid endpoints, these are matched deterministically against the catalog's param values to pick the concrete route. On a miss, the response returns the catalog \"options\" so you can retry with an exact value." +} - added
Input schema / properties / paramsAdded value: +{ + "additionalProperties": { + "maxLength": 512, + "type": "string" + }, + "description": "Precise catalog params (e.g. { \"coinId\": \"bitcoin\" }) — overrides intent. Use when you already know the provider's param names (e.g. from a prior \"options\" response).", + "type": "object" +}
- Changed
azeth_subscribe_service2 fields changed- changed
Input schema / properties / maxExecutions / descriptionPrevious value: -"Maximum number of payments. 0 or omit for unlimited."New value: +"Maximum number of payments (count cap). 0 or omit for no count limit — an amount cap (totalCap) applies instead." - changed
Input schema / properties / totalCap / descriptionPrevious value: -"Maximum total payout in human-readable token units (e.g., \"100.00\")."New value: +"Maximum total payout in human-readable token units (e.g., \"100.00\"). Omit BOTH this and maxExecutions to default to ~1 year of payments (amountPerInterval × 365)."
34 tool updates
v0.2.9- First observed
azeth_accounts - First observed
azeth_balance - First observed
azeth_cancel_agreement - First observed
azeth_check_reachability - First observed
azeth_create_account - First observed
azeth_create_payment_agreement - First observed
azeth_deposit - First observed
azeth_discover_agent_capabilities - First observed
azeth_discover_services - First observed
azeth_execute_agreement - First observed
azeth_get_active_opinion - First observed
azeth_get_agreement - First observed
azeth_get_due_agreements - First observed
azeth_get_guardrails - First observed
azeth_get_net_paid - First observed
azeth_get_registry_entry - First observed
azeth_get_weighted_reputation - First observed
azeth_guardian_approve - First observed
azeth_guardian_status - First observed
azeth_history - First observed
azeth_list_agreements - First observed
azeth_list_conversations - First observed
azeth_pay - First observed
azeth_publish_service - First observed
azeth_receive_messages - First observed
azeth_send_message - First observed
azeth_smart_pay - First observed
azeth_submit_opinion - First observed
azeth_subscribe_service - First observed
azeth_transfer - First observed
azeth_update_service - First observed
azeth_update_service_batch - First observed
azeth_whitelist_protocol - First observed
azeth_whitelist_token
TDQS
Each tool has a clearly distinct purpose, covering different aspects like accounts, payments, messaging, reputation, and guardian management. The detailed descriptions ensure an agent can differentiate between tools like azeth_pay and azeth_smart_pay or various get_ and list_ tools.
Tools follow a consistent azeth_<verb>_<noun> pattern, with verbs like create_, get_, list_, update_. Minor deviations exist, such as azeth_history instead of azeth_get_history, and azeth_pay/azeth_smart_pay being verb-only, but these are still clear and predictable.
With 34 tools, the count is on the higher side but appropriate for the broad domain covering accounts, payments, reputation, guardian, messaging, and trust registry. Each tool serves a specific function, and while some could be merged, the count does not feel excessive.
The tool set covers the core lifecycle of the Azeth platform, including account creation, deposits, transfers, payments, agreements, reputation, and guardian management. A minor gap is the lack of a tool to remove a service from the trust registry, but this is an edge case. Overall, the surface is well-scoped and mostly complete.
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
x402 paid API tools for AI agents on Base: EU/global registries, crypto, wallet & agent trust.
The trust layer for the x402 agent economy: verifiable agent identity, payment & audit.
AI-native settlement rail + intelligence oracle for autonomous agents. x402, Base mainnet, 81 tools.
x402 toolkit for AI agents: paid web, AI, and Base chain tools per call in USDC. Free tools too.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides permissionless wallet infrastructure for AI agents to manage wallets, sign transactions, and handle tokens across Solana and all EVM-compatible chains. It includes 29 specialized tools for on-chain operations, featuring built-in security guards and automated x402 payment processing without KYC requirements.294023MIT
- AlicenseAqualityCmaintenanceProvides trust and reputation tools for AI agent wallets within the x402 payment ecosystem and ERC-8004 agent registry. It enables users to perform wallet reputation lookups, real-time risk assessments, and browse registered agents.4342-
- AlicenseAqualityDmaintenanceTrust intelligence MCP server for AI agents. 19 tools for identity stamps, reputation scoring (0-100), agent registry, forensic audit trails, ERC-8004 bridge, and A2A passports via x402 USDC micropayments.191Apache 2.0
- AlicenseAqualityAmaintenanceTrust, identity, and reputation infrastructure for AI agents. Register agents with W3C DID (Ed25519), check EigenTrust reputation scores, submit peer attestations, search agents by capability, and verify IPFS-anchored audit trails. 11 tools.2015MIT
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/azeth-protocol/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server