MIDL MCP Server
OfficialProvides tools to interact with the Bitcoin blockchain, including balance checks, UTXO queries, transaction tracking, fee rates, and bridging BTC between L1 and EVM L2.
Enables deployment of Solidity smart contracts with built-in templates (ERC20, counter, storage) and reading contract state and event logs.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MIDL MCP ServerBridge 0.5 BTC to L2"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MIDL MCP Server
Model Context Protocol server for MIDL Protocol — Bitcoin L1 + EVM L2 hybrid blockchain.
Bring AI-powered blockchain interaction to Claude Desktop, Cursor, and any MCP client.
Documentation • Main Website • GitHub
What is This?
The MIDL MCP Server brings full MIDL Protocol capabilities to your AI assistant. Install once, and Claude (or any MCP client) can:
Deploy smart contracts with Solidity templates
Check balances on both Bitcoin L1 and EVM L2
Bridge BTC between L1 and L2
Manage Bitcoin Runes (etch, transfer, bridge to ERC20)
Transfer tokens and native assets
Read contract state and event logs
Query network info and system contracts
And 20+ more operations
All through natural conversation in Claude Desktop or Cursor.
Related MCP server: Solana Web3.js MCP Server
Features
27 Tools Across 9 Categories
Category | Tools | Description |
Network | 3 tools | Get network info, system contracts, block data |
Balance | 3 tools | Query EVM balance, BTC balance, token balance |
Transfer | 3 tools | Transfer EVM, transfer tokens, send raw transactions |
Deploy | 1 tool | Compile and deploy Solidity contracts with templates |
Contract | 3 tools | Read contracts, verify contracts, get event logs |
Bridge | 2 tools | Bridge BTC↔EVM (deposit and withdrawal) |
Runes | 4 tools | Rune balance, transfer, bridge to/from ERC20 |
Bitcoin | 4 tools | UTXO queries, transaction tracking, fee rates |
Utility | 3 tools | Convert units, lookup addresses, estimate gas |
Dual Transport Architecture
stdio: For Claude Desktop and Cursor (local development)
HTTP: For remote clients and web integrations — live at
https://mcp.midl-ai.xyz/mcp
Plugin-Based Design
Each category is a self-contained plugin with its own tools. Easy to extend, easy to maintain.
MCP UI Cards
Rich visual feedback with formatted HTML cards showing:
Transaction details with syntax highlighting
Status indicators (pending/confirmed/failed)
Explorer links for transparency
Formatted addresses and amounts
Server-Side Signing
Secure transaction signing using MIDL_PRIVATE_KEY environment variable. No private keys exposed to the client.
Installation
Prerequisites
Node.js 18+
pnpm (recommended) or npm
MIDL Protocol RPC access
Private key for transaction signing
Quick Start
# Clone repository
git clone https://github.com/midl-ai/mcp-server
cd midl-mcp-server
# Install dependencies
pnpm install
# Set up environment variables
cp .env.example .env
# Edit .env and add your MIDL_PRIVATE_KEY
# Build
pnpm build
# Test (optional)
pnpm testConfiguration
Environment Variables
Create a .env file:
# Required: Private key for signing transactions
MIDL_PRIVATE_KEY=0x...
# Optional: Custom RPC endpoint (defaults to staging)
MIDL_RPC_URL=https://rpc.staging.midl.xyz
# Optional: Network selection (mainnet or testnet)
MIDL_NETWORK=testnetClaude Desktop Setup
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"midl": {
"command": "node",
"args": [
"/absolute/path/to/midl-mcp-server/dist/index.js"
],
"env": {
"MIDL_PRIVATE_KEY": "your-private-key-here",
"MIDL_NETWORK": "testnet"
}
}
}
}Important: Use absolute paths, not relative paths like ~/.
Cursor Setup
Add to .cursor/config.json in your project:
{
"mcpServers": {
"midl": {
"command": "node",
"args": [
"/absolute/path/to/midl-mcp-server/dist/index.js"
],
"env": {
"MIDL_PRIVATE_KEY": "your-private-key-here"
}
}
}
}Restart Claude Desktop or Cursor after configuration.
Usage Examples
Once installed, you can use natural language in Claude:
Deploy a Contract
User: Deploy an ERC20 token called MyToken with symbol MTK and 1 million initial supply
Claude: I'll deploy that contract for you...
[Uses midl_deploy_contract tool]
Contract deployed at 0xabc...Check Balances
User: What's my balance on MIDL?
Claude: Let me check both layers...
[Uses midl_get_btc_balance and midl_get_evm_balance]
Bitcoin L1: 1.5 BTC
EVM L2: 0.3 BTCBridge Assets
User: Bridge 0.1 BTC from L1 to L2
Claude: I'll initiate the bridge transaction...
[Uses midl_bridge_btc_to_evm]
Bridge initiated. Transaction ID: 0x...
Waiting for confirmations...
Complete! Your L2 balance has been updated.Manage Runes
User: Transfer 50 UNCOMMON•GOODS rune to kaspa:qr...
Claude: Transferring rune...
[Uses midl_transfer_rune]
Rune transferred. TX: abc123...Read Contracts
User: Read the totalSupply from the ERC20 at 0x123...
Claude: Reading contract...
[Uses midl_read_contract]
Total Supply: 1,000,000 tokensProject Structure
midl-mcp-server/
├── src/
│ ├── plugins/ # All 9 plugin categories
│ │ ├── base/ # Base classes (PluginBase, ToolBase)
│ │ ├── network/ # 3 network tools
│ │ ├── balance/ # 3 balance tools
│ │ ├── transfer/ # 3 transfer tools
│ │ ├── deploy/ # 1 deploy tool + templates
│ │ ├── contract/ # 3 contract tools
│ │ ├── bridge/ # 2 bridge tools
│ │ ├── runes/ # 4 runes tools
│ │ ├── bitcoin/ # 4 bitcoin tools
│ │ └── utility/ # 3 utility tools
│ ├── ui/ # MCP UI card generators
│ │ ├── index.ts # Base card creators
│ │ ├── tx-cards.ts # Transaction cards
│ │ └── card-generators.ts # Maps tools to UI
│ ├── wallet.ts # EVM wallet client (viem)
│ ├── btc-wallet.ts # Bitcoin wallet client (@midl/node)
│ ├── config.ts # Constants and configuration
│ ├── types.ts # Shared TypeScript types
│ └── server.ts # MCP server entry point
├── dist/ # Built artifacts (generated)
├── tests/ # Unit tests
├── .env.example # Environment template
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
└── vitest.config.ts # Test configurationDevelopment
Build
# Type check
pnpm typecheck
# Build for production
pnpm build
# Watch mode (rebuilds on changes)
pnpm build:watchTesting
# Run all tests
pnpm test
# Watch mode
pnpm test:watch
# Coverage report
pnpm test:coverageLinting
# Check for issues
pnpm lint
# Auto-fix
pnpm lint:fixTool Reference
Network Tools
midl_get_network_info- Get chain ID, block height, RPC endpointsmidl_get_system_contracts- Query system contract addressesmidl_get_block- Fetch block data by number or hash
Balance Tools
midl_get_evm_balance- Query EVM native balancemidl_get_btc_balance- Query Bitcoin UTXO balancemidl_get_token_balance- Query ERC20 token balance
Transfer Tools
midl_transfer_evm- Send native BTC on EVM L2midl_transfer_token- Send ERC20 tokensmidl_send_raw_transaction- Submit pre-signed transaction
Deploy Tools
midl_deploy_contract- Compile and deploy Solidity contracts
Templates:
erc20- Standard fungible tokencounter- Simple counter contractstorage- Key-value storage
Contract Tools
midl_read_contract- Call read-only contract methodsmidl_get_logs- Query contract event logsmidl_verify_contract- Verify contract on explorer
Bridge Tools
midl_bridge_btc_to_evm- Deposit BTC from L1 to L2midl_bridge_evm_to_btc- Withdraw BTC from L2 to L1
Runes Tools
midl_get_runes- List all runesmidl_get_rune_balance- Check rune balancemidl_transfer_rune- Transfer runesmidl_bridge_rune_to_erc20- Bridge rune to ERC20 token
Bitcoin Tools
midl_get_utxos- Query UTXOs for addressmidl_get_transaction- Get transaction detailsmidl_get_transaction_receipt- Get transaction receiptmidl_get_fee_rate- Get current fee rate
Utility Tools
midl_convert_btc_to_evm- Convert BTC units to weimidl_get_rune_erc20_address- Lookup rune's ERC20 addressmidl_estimate_gas- Estimate gas for transaction
Architecture Details
Plugin System
Each plugin extends PluginBase and uses the @Tool decorator:
export class NetworkPlugin extends PluginBase {
@Tool({
name: 'midl_get_network_info',
description: 'Get MIDL network information',
inputSchema: networkInfoSchema,
readOnlyHint: true,
destructiveHint: false
})
async getNetworkInfo(): Promise<ToolResponse<NetworkInfo>> {
// Implementation
}
}Wallet Clients
EVM Wallet (src/wallet.ts):
Uses viem for EVM operations
Custom MIDL chain configuration
Transaction signing with private key
Bitcoin Wallet (src/btc-wallet.ts):
Uses @midl/node for Bitcoin operations
UTXO selection and transaction building
KeyPair connector for signing
Error Handling
All tools return standardized responses:
type ToolResponse<T> = {
success: true;
data: T;
} | {
success: false;
error: string;
code?: ErrorCode;
};Type Safety
Full TypeScript strict mode. No any types. All inputs validated with Zod schemas.
Security
Private Key Management
Never commit
.envto version controlUse environment variables for production
Consider hardware wallets for mainnet
Rotate keys regularly
RPC Security
Use secure HTTPS endpoints only
Consider rate limiting for production
Monitor for unusual activity
Input Validation
All tool inputs are validated using Zod schemas before execution.
Troubleshooting
Server Not Starting
Issue: Claude Desktop can't connect to the MCP server
Solutions:
Check absolute paths in config (no
~/)Verify Node.js is in PATH
Check
dist/index.jsexists (runpnpm build)Review Claude Desktop logs
Private Key Issues
Issue: "Invalid private key" error
Solutions:
Ensure key starts with
0xCheck key length (64 hex characters +
0x)Verify key has testnet funds
Test key with a simple transaction
Network Connection
Issue: "Failed to connect to RPC" error
Solutions:
Check
MIDL_RPC_URLis correctVerify network connectivity
Test RPC with curl:
curl https://rpc.staging.midl.xyzCheck firewall settings
Tool Execution Failures
Issue: Tools return errors
Solutions:
Check transaction has sufficient gas
Verify address formats are correct
Ensure wallet has sufficient balance
Review error message for specifics
Contributing
We welcome contributions! Here's how:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-tool)Add your tool or fix
Write tests
Submit a pull request
Adding a New Tool
Create tool file in appropriate plugin directory
Extend
ToolBaseand use@TooldecoratorAdd Zod schema for input validation
Implement
execute()methodAdd unit tests
Update plugin's
index.ts
Related Projects
MIDL Frontend - AI chat interface
MIDL Protocol - Bitcoin+EVM hybrid chain
@midl-js - Official MIDL SDK
Resources
License
MIT License - 100% open source.
Acknowledgments
Built for MIDL VibeHack 2026 hackathon (Feb 9-28, 2026).
Special thanks to:
MIDL Protocol Team - For the hybrid chain architecture
@midl-js - For the comprehensive SDK
Anthropic - For Claude and MCP specification
Community - For feedback and testing
Website • Documentation • GitHub
MIDL MCP Server: Bring AI to Your Blockchain
Available Tools
29 toolsmidl_bridge_btc_to_evmA
Bridge BTC from the Bitcoin layer to the EVM layer. Creates a deposit transaction that sends BTC to the TSS multisig, which validators process to credit your EVM address.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount of BTC to bridge (e.g., "0.1" for 0.1 BTC, or "50000" for 50000 satoshis) | |
| unit | No | Unit of the amount: "btc" or "satoshis" | btc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds context: creates a deposit transaction sending BTC to TSS multisig, then validators credit EVM address, revealing a two-step process beyond the annotation's binary flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise, and front-loaded with the primary action. 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?
Given the complexity of cross-layer bridging and no output schema, the description explains the process (deposit to multisig, validator processing). It could mention expected return (e.g., transaction hash) but covers essential behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions, enums, and default (100% coverage). The description does not add parameter-specific details beyond schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool bridges BTC from Bitcoin to EVM layer, specifying the action ('bridge') and resources (BTC, EVM layer). It distinguishes from sibling tools like midl_bridge_evm_to_btc (reverse direction) and other bridge tools for different assets (ERC20, RUNE).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for bridging BTC to EVM but does not explicitly state when to use it versus alternatives (e.g., midl_bridge_evm_to_btc for reverse). No when-not or prerequisite conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_bridge_erc20_to_runeADestructive
Bridge an ERC20 token back to its native Rune on Bitcoin (withdrawal). The Runes will be credited to your Bitcoin address after validator confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| runeId | Yes | Rune ID to withdraw to (e.g., "840000:1") | |
| amount | Yes | Amount of ERC20 tokens to bridge back to Rune |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true. Description adds valuable context: 'after validator confirmation' and 'credited to your Bitcoin address', explaining the outcome and delay.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, clearly front-loaded with the primary 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?
Given the simple tool (2 params, no output schema), the description sufficiently explains the outcome and process. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description adds no extra meaning beyond the schema, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (bridge/withdraw), direction (ERC20 to Rune), and context (withdrawal). It distinguishes from its reverse sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for withdrawal but does not explicitly guide when to use this versus other bridging tools. The sibling list includes reverse operations, but no proactive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_bridge_evm_to_btcA
Withdraw BTC from the EVM layer back to the Bitcoin layer. Creates a withdrawal transaction that validators process to send BTC to your specified Bitcoin address.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount of BTC to withdraw (e.g., "0.1" for 0.1 BTC, or "50000" for 50000 satoshis) | |
| unit | No | Unit of the amount: "btc" or "satoshis" | btc |
| btcAddress | Yes | Bitcoin address to receive the withdrawn BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false; description adds validators processing context but lacks details on fees, processing time, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with key action and outcome, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers basic purpose and parameters but no output format, error handling, or transaction lifecycle details for a bridge operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description only reiterates parameter names without adding new constraints or usage nuances beyond 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?
Clearly states 'Withdraw BTC from EVM to Bitcoin' with specific verb and resource, distinguishing from sibling tools like midl_bridge_btc_to_evm.
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?
Implied purpose by describing withdrawal direction, but no explicit when-to-use or exclusion guidance for alternative bridges like erc20-to-rune.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_bridge_rune_to_erc20ADestructive
Bridge a Rune from Bitcoin layer to its ERC20 representation on EVM. The ERC20 tokens will be credited after validator confirmation (~10 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| runeId | Yes | Rune ID to bridge (e.g., "840000:1") | |
| amount | Yes | Amount of runes to bridge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description adds that the ERC20 tokens are credited after validator confirmation (~10 minutes), indicating a delay and multi-step process. This provides useful behavioral context not captured in annotations.
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 only two sentences, front-loaded with the core purpose. Every sentence adds value—the first states what it does, the second explains the timing and confirmation process. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bridging tool with 2 required parameters and no output schema, the description explains the key behavioral aspects: cross-layer transfer, delay, and confirmation dependency. It does not cover failure scenarios or return value, but given the tool's complexity, it is reasonably 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% with descriptions for both parameters (runeId as 'Rune ID to bridge' with example, amount as 'Amount of runes to bridge'). The description does not add new details beyond reinforcing 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 states 'Bridge a Rune from Bitcoin layer to its ERC20 representation on EVM', clearly identifying the action, resource, and destination. It distinguishes from sibling tools like midl_bridge_erc20_to_rune (reverse direction) or midl_bridge_btc_to_evm (different asset).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for bridging runes to ERC20 but does not explicitly state when to use this tool over alternatives, nor when not to use it. No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_convert_btc_to_evmARead-only
Derive EVM address from Bitcoin public key (compressed 33-byte or uncompressed 65-byte hex). In MIDL, each BTC key deterministically maps to one EVM address via keccak256.
| Name | Required | Description | Default |
|---|---|---|---|
| publicKey | Yes | Bitcoin public key (compressed 33 bytes or uncompressed 65 bytes, hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: it specifies deterministic mapping via keccak256 and mentions key length options. Annotations already indicate read-only and non-destructive behavior (readOnlyHint=true, destructiveHint=false), so the description complements but does not contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. Every sentence earns its place: first sentence defines purpose and input format, second explains the deterministic property and algorithm.
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 one parameter and no output schema, the description covers input format and core behavior. It lacks explicit mention of the output EVM address format (e.g., '0x-hex'), but that is standard and easily inferred. Minor gap for 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 covers 100% of parameters with a regex pattern, but the description adds meaning by clarifying the key is a Bitcoin public key and explaining the compressed/uncompressed distinction, which matches the pattern lengths (66 vs 130 hex characters).
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 derives an EVM address from a Bitcoin public key, specifying key formats (compressed 33-byte or uncompressed 65-byte hex) and the deterministic mapping via keccak256. This distinguishes it from sibling tools like bridges and transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied but no explicit guidance on when to use this tool versus alternatives (e.g., when preparing for a bridge operation). No when-not-to-use or exclusion conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_deploy_contractADestructive
Deploy a smart contract. Three options:
Template (easiest): template="erc20" + name, symbol, initialSupply
Source code: source="pragma solidity..." + contractName
Pre-compiled: abi + bytecode Templates: erc20, counter, storage
| Name | Required | Description | Default |
|---|---|---|---|
| template | No | Template name: erc20, counter, storage | |
| name | No | Token name (for ERC20) | |
| symbol | No | Token symbol (for ERC20) | |
| initialSupply | No | Initial supply (for ERC20) | |
| source | No | Solidity source code | |
| contractName | No | Contract name in source | |
| abi | No | Pre-compiled ABI | |
| bytecode | No | Pre-compiled bytecode (0x...) | |
| constructorArgs | No | Constructor arguments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, indicating mutation. The description reinforces this with 'Deploy,' but adds no additional behavioral details beyond the three deployment paths. It does not disclose potential side effects (e.g., gas costs, reverts, contract address generation), leaving some behavioral expectations implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one introductory sentence followed by three succinct bullet points. Every element adds unique value, and the numbered list ensures readability. No extraneous words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 parameters, no output schema), the description thoroughly covers all deployment pathways. However, it omits the return value (commonly the contract address or transaction hash). While not critical for invocation, this missing detail slightly reduces completeness. Nonetheless, the description excels in guiding parameter 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?
Schema coverage is 100%, yet the description adds significant value by grouping parameters into three logical options (template, source, pre-compiled) with clear mappings. This hierarchical structure transforms a flat 9-parameter schema into an actionable decision tree, greatly aiding correct tool 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 clearly states 'Deploy a smart contract' and enumerates three distinct methods (template, source code, pre-compiled) with their associated parameters. It uniquely identifies this tool's purpose among many sibling tools focused on reading, bridging, and transferring, leaving no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides three deployment options and their required parameters, guiding the agent on when to use each method. While it doesn't include when-not-to-use scenarios, the structured options effectively differentiate usage contexts. No sibling tool serves the same purpose, so no need for exclusion advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_estimate_gasARead-only
Estimate gas required for an EVM transaction before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target contract or recipient address | |
| value | No | Amount of BTC to send (e.g., "0.1") | |
| data | No | Transaction calldata (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description confirms a read-only estimation behavior but adds no additional context about return values or edge cases. It is adequate but does not enrich beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no extraneous words. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is brief and covers the basic purpose, but omits important context such as the return format (e.g., gas in wei, hex). Without an output schema, the description should provide more completeness for an agent 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?
All three parameters have descriptions in the schema (100% coverage), so the description does not need to add semantic information. It adds nothing beyond the schema, meeting 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?
The description clearly states the tool's function: estimating gas for an EVM transaction. It uses a specific verb ('Estimate') and resource ('gas required for an EVM transaction'), and no sibling tool overlaps with this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus other tools, nor are any prerequisites or exclusions mentioned. The description simply states what it does without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_blockARead-only
Get block information by number or latest. Returns block hash, timestamp, transaction count, and gas details.
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | No | Block number or "latest" for most recent block | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds value by specifying the exact return fields (hash, timestamp, transaction count, gas details), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the key action and details. Every word contributes to understanding, with no redundancy or waste.
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 simplicity of the tool (one optional parameter, no output schema), the description is complete. It explains what is returned, which compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has a clear description for the single parameter. The tool description does not add extra meaning beyond what the schema provides, so it meets the baseline but does not surpass it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'block information', distinguishes from siblings like midl_get_transaction, and specifies how to select by number or 'latest'. It lists return fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. Usage is implied as 'when you need block details', but no when-not-to or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_bridge_statusARead-only
Track the status of a BTC→EVM bridge transaction. Shows BTC confirmations, validator processing, and EVM credit status with helpful suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
| btcTxId | Yes | Bitcoin transaction ID to check bridge status for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint: true) are consistent. The description adds value by detailing what the tool shows (BTC confirmations, validator processing, EVM credit status, suggestions), which goes beyond the structured fields and gives the agent a clear model of the tool's 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?
The description is a single sentence that conveys all necessary information with no fluff. It is front-loaded with the tool's core function, then lists specifics.
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 sufficiently explains what the tool returns (BTC confirmations, validator processing, EVM credit status, suggestions). For a simple read-only tool with one param, this provides adequate context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'btcTxId' with 100% description coverage (pattern and description). The tool description does not add any additional information about the parameter beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool tracks BTC→EVM bridge transaction status, listing specific status components (BTC confirmations, validator processing, EVM credit status). This clearly differentiates it from sibling tools like midl_bridge_btc_to_evm which initiates the bridge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after initiating a bridge transaction by mentioning 'track the status'. It doesn't explicitly say when not to use it, but the purpose is clear and it's the only status-check tool among siblings, minimizing confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_btc_balanceARead-only
Get the Bitcoin L1 balance. If no address provided, returns balance of connected wallet payment address. Returns confirmed and unconfirmed balances.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Bitcoin address. If omitted, uses connected wallet payment address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the operation is safe. Description adds that it returns both confirmed and unconfirmed balances, which is useful behavioral detail beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover the core purpose, optional behavior, and return details with no repetitive or unnecessary 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?
Description covers input (address optional) and output (confirmed/unconfirmed balances). Without output schema, specifying return units (e.g., satoshis) would improve completeness, but it's still adequate for a simple balance tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already explains the address parameter's behavior. The description does not add new parameter-level information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Get' and resource 'Bitcoin L1 balance', clearly distinguishing from siblings like midl_bridge_btc_to_evm or midl_get_utxos. It also explains behavior for both provided and omitted address.
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?
Clearly states when to omit the address parameter (to use connected wallet), providing usage context. No explicit 'when not to use' or alternatives, but the purpose is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_evm_balanceARead-only
Get the EVM layer BTC balance. If no address provided, returns balance of connected wallet. Returns balance in wei and formatted BTC.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | EVM address (0x...). If omitted, uses connected wallet address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds return format (wei and formatted BTC) beyond annotations. No contradiction. No hidden side effects noted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loading purpose and key details. 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?
Adequate for a simple read-only balance tool. Could mention network, but not required.
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 describes parameter well. Description adds no new info beyond schema, but matches schema's default 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?
Clearly states 'Get the EVM layer BTC balance' with verb and resource. Distinguishes from sibling tools like midl_get_btc_balance.
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?
Specifies behavior when address is omitted vs provided, giving clear usage context. Does not explicitly exclude other use cases but adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_fee_rateARead-only
Get current Bitcoin fee rates (sat/vB) for different confirmation targets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. Description adds that it returns fee rates in sat/vB for different targets. No contradictions, but no further behavioral details like output structure or rate limits.
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?
Single, compact sentence (12 words) that front-loads the action and resource. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, description covers the essential purpose but could clarify what 'different confirmation targets' means or how results are structured. Still adequate for a simple 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?
Input schema has zero parameters, so no parameter descriptions needed. Baseline score of 4 applies per guidelines.
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 explicitly states verb (Get), resource (Bitcoin fee rates), unit (sat/vB), and context (different confirmation targets). Name mirrors description. Clearly distinguishes from siblings.
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?
Implies usage for querying fee rates, but no explicit when-to-use or when-not-to-use guidance. No mention of alternatives among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_logsBRead-only
Get event logs from the blockchain. Can filter by contract address and block range. Returns raw log data.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Contract address to filter logs | |
| fromBlock | No | Start block number or "latest" | latest |
| toBlock | No | End block number or "latest" | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds minimal behavioral context. Only mentions 'Returns raw log data' without specifics on format, pagination, or limits.
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: one compound sentence covering purpose and key capabilities. No waste.
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 and description only says 'raw log data', which is vague for a blockchain log tool. Lacks details on log structure, filtering by topics, or pagination.
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 covers 100% of parameters with descriptions. Description mentions filtering by contract address and block range, which aligns with schema but does not add meaning beyond it.
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 verb 'Get', resource 'event logs', and filtering capabilities (contract address, block range). Clearly distinguishes from sibling tools like midl_get_block or midl_get_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like midl_get_transaction_receipt. No explicit when-not or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_network_infoARead-only
Get current MIDL network information including chain ID, RPC URL, explorer URLs, and current block height. Use this to verify network connectivity and configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by specifying the exact information returned, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with action and content, no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides sufficient detail about returned fields for a simple read-only tool. No output schema exists, but description covers key aspects.
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?
No parameters exist (0 params, 100% schema coverage). Baseline 4 applies; description adds no param info but is not required.
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 current MIDL network information and lists specific fields (chain ID, RPC URL, explorer URLs, block height). It is distinct from sibling tools that focus on transactions, balances, bridges, etc.
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 to verify network connectivity and configuration,' providing clear guidance on when to employ this tool. No alternatives exist among siblings for this purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_rune_balanceARead-only
Get the balance of a specific Rune. If no address provided, uses connected wallet ordinals address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Bitcoin address. If omitted, uses connected wallet ordinals address. | |
| runeId | Yes | Rune ID in format blockHeight:txIndex |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, signaling a safe read operation. The description adds behavioral context by explaining the address fallback behavior, which is beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the key information: action (get balance), target (specific Rune), and condition (address fallback). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters, the description and schema together provide sufficient context. An output schema is absent, but the return value (balance) is obvious. Minor improvement could mention the unit or format, but not essential.
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 both parameters described (address optional, runeId required with pattern). The tool description repeats the address fallback but adds no new semantics. With high coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the balance of a specific Rune, with a fallback to the connected wallet's ordinals address if no address is provided. It distinguishes itself from sibling tools like 'midl_transfer_rune' (write) and 'midl_get_runes' (list runes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: to query a specific Rune's balance. While it doesn't explicitly state when not to use it, the sibling names provide sufficient context (e.g., 'midl_transfer_rune' for transfers). No exclusions or alternatives are mentioned, but the purpose is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_rune_erc20_addressARead-only
Get the ERC20 contract address for a Rune. Each Rune has a deterministic ERC20 address derived via CREATE2.
| Name | Required | Description | Default |
|---|---|---|---|
| runeId | Yes | Rune ID in format blockHeight:txIndex (e.g., "840000:1") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds the deterministic nature (derived via CREATE2), providing useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, and the purpose is front-loaded. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup with one parameter and no output schema needed, the description fully covers what the tool does and what it returns. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add meaning beyond the schema's description of runeId. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('ERC20 contract address for a Rune'), clearly distinguishing it from siblings like midl_get_runes that list runes rather than retrieving a specific address.
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 purpose implies usage to retrieve the ERC20 address for a given rune, but no explicit guidance on when to use versus alternatives (e.g., midl_get_runes) or when not to use. It lacks exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_runesARead-only
Get all Runes held by a Bitcoin address. If no address provided, uses connected wallet ordinals address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Bitcoin address. If omitted, uses connected wallet ordinals address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only (readOnlyHint=true) and non-destructive (destructiveHint=false). The description adds the fact that it returns all runes for an address, but does not disclose further behavioral details such as pagination, rate limits, or potential large data sizes. With annotations covering safety, the description provides minimal additional 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 extremely concise with two sentences. It is front-loaded with the main action and immediately provides the key usage detail. Every sentence earns its place; no unnecessary 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 low complexity (one optional parameter, no output schema, and annotations covering safety), the description is nearly complete. It clearly states what the tool does and how to use it. However, it does not describe the return format (e.g., list of rune objects) or mention any potential limitations, which would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description restates the same information about the 'address' parameter: it is optional and defaults to the connected wallet ordinals address. No additional parameter semantics are provided beyond what the schema already offers, so 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 ('Get all Runes held by a Bitcoin address') and the resource ('Runes'). It distinguishes from sibling tools like 'midl_get_rune_balance' (balance of a specific rune) and 'midl_transfer_rune' (transfer operation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage guideline: if no address is provided, it defaults to the connected wallet ordinals address. This helps the agent understand how to use the tool without needing to specify an address. It could be improved by explicitly contrasting with sibling tools, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_system_contractsARead-only
Get all MIDL system contract addresses. These are predeployed contracts for core protocol functionality like bridging, staking, and runes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the agent knows it is safe and non-destructive. The description adds context about the returned data being system contracts, which is helpful but not essential for behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The verb 'Get' and resource 'system contract addresses' are front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description is complete. It tells the agent what is returned and why it is useful, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so description coverage is trivially 100%. The description adds meaning beyond the schema by explaining what the returned addresses represent, which is sufficient given no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all MIDL system contract addresses' and explains they are predeployed contracts for core protocol functionality. This distinguishes it from siblings like midl_get_btc_balance or midl_get_evm_balance which retrieve specific balances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. However, its purpose is clear and it is a simple getter, so usage context is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_token_balanceARead-only
Get ERC20 token balance for an address. Returns balance along with token metadata (symbol, name, decimals).
| Name | Required | Description | Default |
|---|---|---|---|
| tokenAddress | Yes | ERC20 token contract address | |
| ownerAddress | Yes | Address to check balance for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no behavioral details beyond what annotations provide, which is acceptable but not extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 13 words, front-loaded with the action and resource. Every word adds value, with no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with annotations and no output schema, the description adequately covers what the tool does and what it returns. It could optionally mention that the ownerAddress is an Ethereum address, but that is implied by the pattern in the schema.
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 parameter descriptions in the schema already explain the two parameters. The tool description does not add additional meaning or constraints beyond what the schema provides, so 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 verb 'Get' and the resource 'ERC20 token balance for an address', and specifies that it returns balance and token metadata. It effectively distinguishes from sibling tools like midl_get_evm_balance or midl_get_btc_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for ERC20 token balances, which is clear context. However, it does not explicitly exclude other token types or reference alternative tools for non-ERC20 balances, which would be helpful given the presence of similar sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_transactionARead-only
Get Bitcoin transaction details by txid.
| Name | Required | Description | Default |
|---|---|---|---|
| txid | Yes | Transaction ID (64-character hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition of 'by txid' is minimal. No extra behavioral traits disclosed beyond 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?
Single sentence, no filler, front-loaded with key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description is complete and sufficient for an agent to understand usage.
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%, and the schema already describes the txid parameter. The description does not add further meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get Bitcoin transaction details by txid.' uses a specific verb 'Get' and resource 'Bitcoin transaction details', clearly distinguishing it from sibling tools like midl_get_block and midl_get_btc_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like midl_get_transaction_receipt. The description provides no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_transaction_receiptARead-only
Get EVM transaction receipt including status, gas used, and logs.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | EVM transaction hash |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, establishing it as a safe read operation. The description adds value by specifying the return fields (status, gas used, logs) but does not disclose additional behavioral traits such as potential rate limits or dependency on transaction existence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, front-loading the essential information. It is free of extraneous content and every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, annotations present), the description adequately covers the return fields. It could optionally mention that a valid transaction hash is required, but the schema already enforces validity via pattern matching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has only one parameter ('hash') which is fully described in the input schema (including pattern and description). The tool description adds no extra semantic meaning beyond what the schema already provides, so it meets the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('EVM transaction receipt'), and the included fields ('status, gas used, and logs'). It distinguishes itself from sibling tools like 'midl_get_transaction' which likely returns basic transaction data without the receipt-level details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving transaction receipts but does not explicitly state when to use this tool over alternatives like 'midl_get_transaction' or 'midl_get_logs'. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_get_utxosARead-only
Get unspent transaction outputs (UTXOs). If no address provided, uses connected wallet payment address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Bitcoin address. If omitted, uses connected wallet payment address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds that omitted address defaults to connected wallet payment address, which is useful behavioral context not in annotations.
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?
Single sentence, no fluff, front-loaded with purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks output format or return value description, which could be helpful. However, tool is simple and name implies UTXO list. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description repeats the address parameter's behavior already in the schema, adding no new semantic 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?
Clearly states 'Get unspent transaction outputs (UTXOs)' with specific verb and resource. The description also notes default behavior for address parameter, distinguishing it from related tools like get_btc_balance.
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 some guidance: default address from connected wallet. However, lacks explicit when-to-use vs alternatives, such as when to use this over get_btc_balance or get_transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_read_contractARead-only
Read data from a smart contract. Requires contract address, ABI, and function name. Returns the function result.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Contract address | |
| abi | Yes | Contract ABI (JSON array) | |
| functionName | Yes | Function name to call | |
| args | No | Function arguments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so tool's safety is known. Description adds that it returns the function result, which is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two direct sentences, no wasted words, front-loaded with action and requirements.
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 mentions return type. For a simple read operation, this is sufficient. Missing error or edge case info but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage), so description adds little beyond listing required inputs. No additional formatting or encoding guidance.
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 'Read data from a smart contract' with required inputs and output. Distinguishes from write operations like midl_write_contract.
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?
Description indicates it is for reading contract data, which inherently implies it should be used instead of write tool for read purposes. No explicit when-not or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_send_raw_transactionADestructive
Send a raw signed transaction to the network. Returns full transaction receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| signedTx | Yes | Signed transaction (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, which the description implicitly confirms by describing a state-changing operation. The description adds that the tool returns a full receipt, which is useful. However, it does not disclose additional behavioral traits like gas consumption, irreversibility, or potential failure reasons, which would improve 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 a single concise sentence that immediately conveys the action and outcome. No unnecessary words or repetition, making it optimally brief and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and no output schema, the description adequately covers the main purpose and return value. It could mention error handling or confirmation times, but overall it is reasonably complete for this tool's 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?
The input schema fully describes the parameter signedTx with a pattern and description. The tool description does not add any further meaning beyond what the schema provides, so the score is at 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 action ('send a raw signed transaction') and the return value ('full transaction receipt'). This verb+resource specification effectively distinguishes it from sibling tools like midl_write_contract or midl_transfer_evm, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., midl_write_contract for contract interactions that also send transactions). There is no mention of prerequisites (e.g., the transaction must be signed) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_transfer_evmBDestructive
Transfer native BTC on the EVM layer to another address.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient EVM address | |
| amount | Yes | Amount in BTC (e.g., "0.1") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds that the transfer involves 'native BTC on the EVM layer' but does not elaborate on behavioral traits such as irreversibility, source account deduction, or fee handling. It meets the minimum bar but lacks additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence of 10 words. Every word is necessary, no redundancy or filler. Perfectly 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?
The tool has two parameters and no output schema. The description states the basic action but omits details such as what happens on success (e.g., returns a transaction hash), whether a wallet connection is required, or any potential failure modes. Adequate for simple tasks but incomplete for a transfer 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 description coverage, the baseline is 3. The description adds no extra meaning beyond the schema-provided parameter descriptions ('Recipient EVM address', 'Amount in BTC'). It does not clarify format beyond the example in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Transfer' and identifies the resource as 'native BTC on the EVM layer', which clearly distinguishes it from sibling tools like midl_bridge_evm_to_btc or midl_transfer_token. However, it does not explicitly differentiate from similar transfer tools for other assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention any prerequisites, context, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_transfer_runeADestructive
Transfer Runes to another Bitcoin address.
| Name | Required | Description | Default |
|---|---|---|---|
| runeId | Yes | Rune ID to transfer (e.g., "840000:1") | |
| amount | Yes | Amount of runes to transfer | |
| toAddress | Yes | Recipient Bitcoin address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true, indicating state changes. The description 'Transfer Runes' aligns but adds no extra behavioral detail (e.g., fee requirements, confirmation handling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the core purpose without any redundant or unnecessary 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 simplicity of the tool, the description is minimal but lacks completeness. It does not mention prerequisites (e.g., sufficient balance) or post-transfer behavior (e.g., broadcast confirmation), which could help an agent use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions. The tool description adds no additional meaning beyond what the schema provides, meeting the baseline for complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (transfer), resource (Runes), and destination (Bitcoin address). It effectively distinguishes from sibling tools like 'midl_transfer_evm' and 'midl_transfer_token' which handle different assets.
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 only implies usage for transferring Runes but provides no explicit guidance on when to use this tool versus alternatives (e.g., bridging tools) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_transfer_tokenBDestructive
Transfer ERC20 tokens to another address.
| Name | Required | Description | Default |
|---|---|---|---|
| tokenAddress | Yes | ERC20 token contract address | |
| to | Yes | Recipient address | |
| amount | Yes | Amount to transfer (human-readable, e.g., "100") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds no additional behavioral context (e.g., gas costs, approval requirements). Minimal added value beyond annotations.
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?
Single sentence, 6 words – highly concise. However, could include more useful information without becoming lengthy. Still effectively front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the number of sibling tools and lack of output schema, the description is insufficient. It does not explain return values, error conditions, or prerequisites. Context is incomplete for an agent to use reliably.
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% coverage with clear descriptions for each parameter. The description adds no extra information beyond the schema, so 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 states 'Transfer ERC20 tokens to another address,' which is a specific verb-resource pair. It clearly distinguishes from sibling tools like midl_transfer_evm (native coin) and bridge 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?
No guidance on when to use this tool versus alternatives such as midl_transfer_evm or bridge tools. The description fails to provide context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_verify_contractA
Verify contract source code on Blockscout explorer. Requires contract address, source code, and compiler settings.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Contract address to verify | |
| sourceCode | Yes | Solidity source code | |
| contractName | Yes | Contract name (e.g., "Counter") | |
| compilerVersion | No | Solidity compiler version | v0.8.24+commit.e11b9ed9 |
| optimizationUsed | No | Whether optimization was used | |
| runs | No | Optimization runs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-destructive write operation (readOnlyHint=false, destructiveHint=false). The description adds that it interacts with Blockscout explorer, but does not disclose potential side effects (e.g., whether the verification is permanent, if it modifies state on-chain, or any failure modes). The added value over annotations is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the main purpose and key requirements without any filler. It is front-loaded with the action and platform, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description does not explain what the function returns (e.g., verification success/failure, transaction hash). Given the simplicity of a verification tool, more detail on the outcome would be helpful. Additionally, no guidance is provided on how to obtain the compiler version or other settings.
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 for all 6 parameters. The description mentions the three required parameters (address, sourceCode, contractName) and 'compiler settings' which groups the remaining parameters, but does not add new meaning beyond what the schema already provides. Baseline score due to high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'verify contract source code' and the target 'Blockscout explorer'. This verb+resource construction is specific and distinct from sibling tools like deploy or write_contract.
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 lists required inputs (contract address, source code, compiler settings) which provides some usage context. However, it does not explain when to use this tool versus alternatives like midl_deploy_contract or midl_write_contract, nor does it provide any exclusions or prerequisites beyond the inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
midl_write_contractBDestructive
Execute a state-changing function on a smart contract via MIDL intention flow. For payable functions, include value parameter (in wei).
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Contract address | |
| abi | Yes | Contract ABI (JSON array) | |
| functionName | Yes | Function name to call | |
| args | No | Function arguments | |
| value | No | BTC value to send (in wei) for payable functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds that it is state-changing and mentions value for payable functions, which is consistent but adds minimal new behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loaded with the primary action and key usage detail (payable functions need value). No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks explanation of return values, error handling, or safety warnings for a destructive tool. Does not clarify 'MIDL intention flow' or what happens on failure.
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 all parameters have descriptions. The description provides context about payable functions needing value, which reinforces the schema's value field description but does not add new parameter semantics.
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 executes a state-changing function on a smart contract, which distinguishes it from read tools. However, it does not explicitly differentiate from other write tools like deploy or transfer, but the name and context are sufficient.
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 guidance for payable functions (include value parameter), but lacks when-to-use versus alternatives (e.g., deploy, transfer) or any exclusions.
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.
29 tool updates
v1.0.0- First observed
midl_bridge_btc_to_evm - First observed
midl_bridge_erc20_to_rune - First observed
midl_bridge_evm_to_btc - First observed
midl_bridge_rune_to_erc20 - First observed
midl_convert_btc_to_evm - First observed
midl_deploy_contract - First observed
midl_estimate_gas - First observed
midl_get_block - First observed
midl_get_bridge_status - First observed
midl_get_btc_balance - First observed
midl_get_evm_balance - First observed
midl_get_fee_rate - First observed
midl_get_logs - First observed
midl_get_network_info - First observed
midl_get_rune_balance - First observed
midl_get_rune_erc20_address - First observed
midl_get_runes - First observed
midl_get_system_contracts - First observed
midl_get_token_balance - First observed
midl_get_transaction - First observed
midl_get_transaction_receipt - First observed
midl_get_utxos - First observed
midl_read_contract - First observed
midl_send_raw_transaction - First observed
midl_transfer_evm - First observed
midl_transfer_rune - First observed
midl_transfer_token - First observed
midl_verify_contract - First observed
midl_write_contract
TDQS
Each tool targets a distinct operation (e.g., bridging, querying balances, deploying contracts, transferring tokens) with clear direction or resource. No two tools appear to do the same thing.
All tools follow the pattern midl_verb_noun in snake_case, e.g., midl_get_btc_balance, midl_transfer_rune. The prefix 'midl_' is consistent, and verbs like get, transfer, bridge, deploy are used appropriately.
29 tools is on the higher end but justified by the broad scope of the server (bridging, EVM, token operations, network queries). Each tool serves a specific function, and the set is well-scoped for a cross-chain hub.
The tool surface covers bridging, contract lifecycle (deploy, read, write, verify, logs, gas estimation), transfers, balance queries, and network info. Minor gaps like token approval or transaction cancellation exist but do not severely hinder core workflows.
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
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Bitcoin and YouTube video intelligence for AI agents. Pay-per-call via x402 USDC on Base.
Non-custodial crypto payments for AI assistants: balances, payments, and create payment links.
OpenAI-compatible LLM MCP (7 tools); chat via balance key or x402 USDC on Base
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI applications to interact with the Base blockchain network, allowing wallet management, smart contract deployment, token transfers, NFT operations, DeFi interactions with Morpho vaults, and onramping funds via Coinbase.13-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with the Solana blockchain, manage accounts and tokens, and develop and deploy smart contracts end-to-end.4-

Bink MCP Serverofficial
FlicenseNot gradedqualityDmaintenanceEnables AI agents to perform blockchain operations like wallet management, token info, DeFi swaps, cross-chain bridging, and price checking across Ethereum, BNB Chain, and Solana.-- AlicenseCqualityDmaintenanceEnables AI applications to interact with the Bitcoin Network, manage wallets, check balances, convert prices, and send transactions.4616MIT
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/midl-ai/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server