Skip to main content
Glama

ARBuilder

GitHub stars License: MIT MCP Tools Python ARBuilder MCP server

AI-powered development assistant for the Arbitrum ecosystem. ARBuilder transforms natural language prompts into:

  • Stylus smart contracts (Rust)

  • Cross-chain SDK implementations (asset bridging and messaging)

  • Full-stack dApps (contracts + backend + indexer + oracle + frontend + wallet integration)

  • Orbit chain deployment assistance

Demo

Watch the tutorial

Quick Start

Hosted (no setup):

# Claude Code
claude mcp add arbbuilder -- npx -y mcp-remote https://arbuilder.app/mcp --header "Authorization: Bearer YOUR_API_KEY"

Or add to ~/.cursor/mcp.json (Cursor / VS Code):

{
  "mcpServers": {
    "arbbuilder": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://arbuilder.app/mcp",
               "--header", "Authorization: Bearer YOUR_API_KEY"]
    }
  }
}

Get your API key at arbuilder.app

Self-hosted — see Setup below.

Table of Contents

Architecture

ARBuilder uses a Retrieval-Augmented Generation (RAG) pipeline with hybrid search (vector + BM25 + cross-encoder reranking) to provide context-aware code generation. Available as a hosted service at arbuilder.app or self-hosted via MCP server.

┌─────────────────────────────────────────────────────────────────────────┐
│                            ARBuilder                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  DATA PIPELINE                                                          │
│  ┌──────────┐    ┌──────────┐    ┌───────────┐    ┌──────────────────┐  │
│  │ Scraper  │───▶│Processor │───▶│ Embedder  │───▶│    ChromaDB      │  │
│  │ crawl4ai │    │ 3-layer  │    │ BGE-M3    │    │ (local vectors)  │  │
│  │ + GitHub │    │ filters  │    │ 1024-dim  │    │                  │  │
│  └──────────┘    └──────────┘    └───────────┘    └────────┬─────────┘  │
│                                                            │            │
│  RETRIEVAL                                                 │            │
│  ┌──────────────────────────────────────────────────────────▼─────────┐ │
│  │                    Hybrid Search Engine                            │ │
│  │  ┌──────────┐    ┌──────────┐    ┌────────────┐                    │ │
│  │  │  Vector  │    │   BM25   │    │CrossEncoder│   RRF Fusion       │ │
│  │  │  Search  │───▶│ Keywords │───▶│ Reranker   │──▶ + MMR           │ │
│  │  └──────────┘    └──────────┘    └────────────┘                    │ │
│  └────────────────────────────────────────────────────────────────────┘ │
│                                         │                               │
│  GENERATION                             ▼                               │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                      MCP Server (19 tools)                        │  │
│  │                                                                   │  │
│  │  Stylus Contracts   Arbitrum-SDK       Full dApp Builder          │  │
│  │  ┌──────────────┐   ┌─────────────┐   ┌──────────────────────┐    │  │
│  │  │ generate_    │   │ generate_   │   │ generate_backend     │    │  │
│  │  │ stylus_code  │   │ bridge_code │   │ generate_frontend    │    │  │
│  │  │ ask_stylus   │   │ generate_   │   │ generate_indexer     │    │  │
│  │  │ get_context  │   │ messaging   │   │ generate_oracle      │    │  │
│  │  │ gen_tests    │   │ ask_bridging│   │ orchestrate_dapp     │    │  │
│  │  │ get_workflow │   │             │   │                      │    │  │
│  │  │ validate_code│   │             │   │                      │    │  │
│  │  └──────────────┘   └─────────────┘   └──────────────────────┘    │  │
│  │                                                                   │  │
│  │  Orbit Chain                                                      │  │
│  │  ┌──────────────────────┐                                         │  │
│  │  │ generate_orbit_config│                                         │  │
│  │  │ generate_orbit_deploy│                                         │  │
│  │  │ gen_validator_setup  │                                         │  │
│  │  │ ask_orbit            │                                         │  │
│  │  │ orchestrate_orbit    │                                         │  │
│  │  └──────────────────────┘                                         │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                           │                                             │
│  IDE INTEGRATION          ▼                                             │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │  Cursor / VS Code / Claude Desktop / Any MCP Client               │  │
│  │  <- via local stdio or remote mcp-remote proxy ->                 │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                                                         │
│  HOSTED SERVICE (Cloudflare Workers)                                    │
│  ┌──────────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────┐     │
│  │  Workers AI  │  │ Vectorize│  │    D1    │  │      KV          │     │
│  │  BGE-M3 +    │  │ 1024-dim │  │  Users   │  │   Source registry│     │
│  │  Reranker    │  │  index   │  │  API keys│  │   + Ingest state │     │
│  └──────────────┘  └──────────┘  └──────────┘  └──────────────────┘     │
│                                                                         │
│  INGESTION PIPELINE (Worker-native, cron every 6h)                      │
│  ┌──────────┐    ┌──────────┐    ┌───────────┐    ┌──────────────┐      │
│  │ scraper  │───▶│ chunker  │───▶│ Workers AI│───▶│  Vectorize   │      │
│  │ HTML/    │    │ doc+code │    │  BGE-M3   │    │   upsert     │      │
│  │ GitHub   │    │ splitter │    │ embedding │    │              │      │
│  └──────────┘    └──────────┘    └───────────┘    └──────────────┘      │
│                       │                ▲                                │
│                       │ >30 files      │ embed messages                 │
│                       ▼                │                                │
│              ┌─────────────────────────┴───┐                            │
│              │    CF Queue (async path)    │                            │
│              │  embed │ continue │finalize │                            │
│              └─────────────────────────────┘                            │
└─────────────────────────────────────────────────────────────────────────┘

Related MCP server: aipaygen-mcp

Project Structure

ArbBuilder/
├── sources.json          # Single source of truth for all data sources
├── scraper/              # Data collection module
│   ├── config.py         # Thin wrapper around sources.json (backward-compat helpers)
│   ├── scraper.py        # Web scraping with crawl4ai
│   ├── github_scraper.py # GitHub repository cloning
│   └── run.py            # Pipeline entry point
├── src/
│   ├── preprocessing/    # Text cleaning and chunking
│   │   ├── cleaner.py    # Text normalization
│   │   ├── chunker.py    # Document chunking with token limits
│   │   └── processor.py  # Main preprocessing pipeline
│   ├── embeddings/       # Embedding and vector storage
│   │   ├── embedder.py   # OpenRouter embedding client
│   │   ├── vectordb.py   # ChromaDB wrapper with hybrid search (BM25 + vector)
│   │   └── reranker.py   # CrossEncoder, MMR, LLM reranking
│   ├── templates/        # Code generation templates
│   │   ├── stylus_templates.py   # M1: Stylus contract templates
│   │   ├── backend_templates.py  # M3: NestJS/Express templates
│   │   ├── frontend_templates.py # M3: Next.js + wagmi templates
│   │   ├── indexer_templates.py  # M3: Subgraph templates
│   │   ├── oracle_templates.py   # M3: Chainlink templates
│   │   └── orbit_templates.py    # M4: Orbit chain deployment templates
│   ├── utils/            # Shared utilities
│   │   ├── version_manager.py   # SDK version management
│   │   ├── env_config.py        # Centralized env var configuration
│   │   ├── abi_extractor.py     # Stylus ABI extraction from Rust code
│   │   └── compiler_verifier.py # Docker-based cargo check verification
│   ├── mcp/              # MCP server for IDE integration
│   │   ├── server.py     # MCP server (tools, resources, prompts)
│   │   ├── tools/        # MCP tool implementations (19 tools)
│   │   │   ├── get_stylus_context.py       # M1
│   │   │   ├── generate_stylus_code.py     # M1
│   │   │   ├── ask_stylus.py               # M1
│   │   │   ├── generate_tests.py           # M1
│   │   │   ├── get_workflow.py             # M1
│   │   │   ├── validate_stylus_code.py     # M1
│   │   │   ├── generate_bridge_code.py     # M2
│   │   │   ├── generate_messaging_code.py  # M2
│   │   │   ├── ask_bridging.py             # M2
│   │   │   ├── generate_backend.py         # M3
│   │   │   ├── generate_frontend.py        # M3
│   │   │   ├── generate_indexer.py         # M3
│   │   │   ├── generate_oracle.py          # M3
│   │   │   ├── orchestrate_dapp.py         # M3
│   │   │   ├── generate_orbit_config.py    # M4
│   │   │   ├── generate_orbit_deployment.py # M4
│   │   │   ├── generate_validator_setup.py # M4
│   │   │   ├── ask_orbit.py                # M4
│   │   │   └── orchestrate_orbit.py        # M4
│   │   ├── resources/    # Static knowledge (11 resources)
│   │   │   ├── stylus_cli.py      # M1
│   │   │   ├── workflows.py       # M1
│   │   │   ├── networks.py        # M1
│   │   │   ├── coding_rules.py    # M1
│   │   │   ├── sdk_rules.py       # M2
│   │   │   ├── backend_rules.py   # M3
│   │   │   ├── frontend_rules.py  # M3
│   │   │   ├── indexer_rules.py   # M3
│   │   │   └── oracle_rules.py    # M3
│   │   └── prompts/      # Workflow templates
│   └── rag/              # RAG pipeline (TBD)
├── tests/
│   ├── mcp_tools/        # MCP tool test cases and benchmarks
│   │   ├── test_get_stylus_context.py
│   │   ├── test_generate_stylus_code.py
│   │   ├── test_ask_stylus.py
│   │   ├── test_generate_tests.py
│   │   ├── test_m2_e2e.py    # M2 end-to-end tests
│   │   ├── test_m3_tools.py  # M3 full dApp tests
│   │   ├── test_orbit_tools.py  # M4 orbit tests
│   │   └── benchmark.py      # Evaluation framework
│   └── test_retrieval.py # Retrieval quality tests
├── docs/
│   └── mcp_tools_spec.md # MCP tools specification
├── apps/web/               # Hosted service (Cloudflare Workers + Next.js)
│   ├── src/app/
│   │   ├── layout.tsx      # Root layout + SEO meta + JSON-LD structured data
│   │   ├── page.tsx        # Landing page (M1-M4 feature sections)
│   │   ├── robots.ts       # robots.txt generation
│   │   ├── sitemap.ts      # sitemap.xml generation
│   │   ├── llms.txt/       # LLM discovery endpoint
│   │   └── playground/     # Interactive tool playground (18 hosted tools)
│   ├── src/lib/
│   │   ├── scraper.ts      # Web doc scraping (HTMLRewriter)
│   │   ├── github.ts       # GitHub repo scraping (Trees/Contents API)
│   │   ├── chunker.ts      # Document + code chunking
│   │   ├── ingestPipeline.ts # Ingestion orchestrator (sync + async queue paths)
│   │   └── vectorize.ts    # Search + embedding utilities
│   ├── src/app/api/admin/  # Admin APIs (sources, ingest, migrate)
│   ├── worker.ts           # Worker entry + cron + queue consumer handler
│   └── wrangler.prod.jsonc # Production config (D1, KV, Vectorize, Queue)
├── scripts/
│   ├── run_benchmarks.py     # Benchmark runner
│   ├── diff-migrate.ts       # Push chunks to CF Vectorize
│   ├── sync_sources.ts       # Sync sources.json to CF KV registry
│   └── ingest_m3_sources.py  # M3 source ingestion
├── data/
│   ├── raw/              # Raw scraped data (docs + curated repos)
│   ├── processed/        # Pre-processed chunks
│   └── chroma_db/        # ChromaDB vector store (generated locally, not in repo)
├── environment.yml       # Conda environment specification
├── pyproject.toml        # Project metadata and dependencies
└── .env                  # Environment variables (not committed)

Setup

1. Create Conda Environment

# Create and activate the environment
conda env create -f environment.yml
conda activate arbbuilder

Note: If you plan to refresh the knowledge base by scraping (optional), also install playwright:

playwright install chromium

2. Configure Environment Variables

Copy the example environment file and configure your API keys:

cp .env.example .env

Edit .env with your credentials:

OPENROUTER_API_KEY=your-api-key
NVIDIA_API_KEY=your-nvidia-api-key
DEFAULT_MODEL=deepseek/deepseek-v3.2
DEFAULT_EMBEDDING=baai/bge-m3
DEFAULT_CROSS_ENCODER=nvidia/llama-3.2-nv-rerankqa-1b-v2

3. Setup Data

The repository includes all data needed:

  • Raw data (data/raw/): Documentation pages + curated GitHub repos

  • Processed chunks (data/processed/): Chunks ready for embedding

Important: The ChromaDB vector database must be generated locally (it's not included in the repo due to binary compatibility issues across systems).

# Generate the vector database (required before using MCP tools)
python -m src.embeddings.vectordb

4. Verify MCP Server

Test that the MCP server starts correctly:

# Run the MCP server directly (press Ctrl+C to exit)
python -m src.mcp.server

You should see:

ARBuilder MCP Server started
Capabilities: 19 tools, 11 resources, 5 prompts

Optional: Refresh Data

If you want to re-scrape the latest documentation and code:

# Run full pipeline (web scraping + GitHub cloning)
python -m scraper.run

# Then preprocess the raw data
python -m src.preprocessing.processor

# And re-ingest into ChromaDB
python -m src.embeddings.vectordb --reset

Data Quality Filters: The pipeline applies a 3-layer filtering system to remove junk data (vendored crates, auto-generated TypeChain files, hex bytecode, lock files, and cross-repo duplicates). See docs/DATA_CURATION_POLICY.md for details.

Data Maintenance

Audit and clean up data sources:

# Audit: compare repos on disk vs config
python scripts/audit_data.py

# Show what orphan repos would be deleted
python scripts/audit_data.py --prune

# Actually delete orphan repos
python scripts/audit_data.py --prune --confirm

# Include ChromaDB stats in audit
python scripts/audit_data.py --chromadb

# GitHub scraper also supports audit/prune
python -m scraper.github_scraper --audit
python -m scraper.github_scraper --prune --dry-run

Fork & Migrate (SDK 0.10.0)

Fork community Stylus repos and migrate them to SDK 0.10.0:

# Dry run: show what would change without modifying anything
python scripts/fork_and_migrate.py --all --dry-run

# Migrate all 13 Stylus repos
python scripts/fork_and_migrate.py --all

# Migrate a specific repo
python scripts/fork_and_migrate.py --repo OffchainLabs/stylus-hello-world

# Re-verify already-forked repos after manual fixes
python scripts/fork_and_migrate.py --all --verify-only

Reports are saved to reports/fork_migration_*.json.

Quick Start (IDE Integration)

Option A: Self-Hosted (Full Control)

Run ARBuilder locally with your own API keys. No rate limits.

Step 1: Configure your IDE

Add the following to your MCP configuration file:

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "arbbuilder": {
      "command": "/path/to/miniconda3/envs/arbbuilder/bin/python3",
      "args": ["-m", "src.mcp.server"],
      "env": {
        "OPENROUTER_API_KEY": "your-api-key",
        "PYTHONPATH":"/path/to/ArbBuilder"
      }
    }
  }
}

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "arbbuilder": {
      "command": "python",
      "args": ["-m", "src.mcp.server"],
      "cwd": "/path/to/ArbBuilder",
      "env": {
        "OPENROUTER_API_KEY": "your-api-key"
      }
    }
  }
}

Step 2: Restart your IDE

After saving the configuration, restart Cursor or Claude Desktop. The ARBuilder tools will be available to the AI assistant.

Step 3: Start building!

Ask your AI assistant:

  • "Generate an ERC20 token contract in Stylus"

  • "How do I deploy a contract to Arbitrum Sepolia?"

  • "Write tests for my counter contract"

Option B: Hosted Service (Zero Setup)

Use our hosted API - no local setup required. Available at arbuilder.app.

  1. Sign up at https://arbuilder.app and get your API key

  2. Add to your MCP configuration:

{
  "mcpServers": {
    "arbbuilder": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://arbuilder.app/mcp",
               "--header", "Authorization: Bearer YOUR_API_KEY"]
    }
  }
}

The hosted service includes:

  • 100 API calls/day (free tier)

  • No local setup or Python environment required

  • Always up-to-date with latest Stylus SDK patterns

Usage

Data Ingestion

Hosted (Worker-native): The hosted service at arbuilder.app has a built-in ingestion pipeline that runs automatically via cron (every 6 hours). Sources can also be manually ingested via the admin UI at /admin.

The pipeline uses two paths based on source size:

  • Sync path (docs and repos ≤30 files): scrape → chunk → embed → upsert in a single Worker invocation (~40 subrequests)

  • Async path (repos >30 files): scrape → chunk → save to KV → enqueue to CF Queue. The queue consumer processes embed/upsert in batches of 10 chunks (~4 subrequests each), with continue messages for additional file batches and a finalize message to update source status. This stays within the 50 subrequest/invocation limit on the Free plan.

Local (Python pipeline): For self-hosted setups, run the full data collection pipeline:

conda activate arbbuilder

# Run full pipeline (web scraping + GitHub cloning)
python -m scraper.run

# Preprocess and push to CF Vectorize
python -m src.preprocessing.processor
AUTH_SECRET=xxx npx tsx scripts/diff-migrate.ts --full

Data Sources

All data sources are defined in sources.json — the single source of truth for both the local Python pipeline and the hosted CF Worker ingestion. The file contains 84 curated sources (53 documentation pages + 31 GitHub repos) across 4 milestones.

Versioned repos (with multiple SDK branches) use a versions array:

{
  "url": "https://github.com/ARBuilder-Forks/stylus-hello-world",
  "versions": [
    { "sdkVersion": "0.10.0", "branch": "main" },
    { "sdkVersion": "0.9.0", "branch": "v0.9.0" }
  ]
}

Sync to hosted service:

ARBBUILDER_ADMIN_SECRET=xxx npx tsx scripts/sync_sources.ts
ARBBUILDER_ADMIN_SECRET=xxx npx tsx scripts/sync_sources.ts --dry-run
ARBBUILDER_ADMIN_SECRET=xxx npx tsx scripts/sync_sources.ts --remove-stale

**Stylus Contracts/projects ** — 17 docs + 19 repos

  • Official documentation: docs.arbitrum.io (7 pages + gas-metering)

  • All Stylus repos sourced from ARBuilder-Forks for resilience against upstream deletions

  • 6 forks with SDK 0.10.0 branches: hello-world, vending-machine, erc6909, fortune-generator, ethbuc2025-gyges, WalletNaming

  • 7 forks at original SDK version (0.8.4–0.9.0) with separate branch per version

  • Production codebases: OpenZeppelin rust-contracts-stylus, stylus-test-helpers, stylusport, stylus-provider

Curation Policy:

  • No meta-lists (awesome-stylus) — causes outdated code ingestion

  • No unverified community submissions

  • All code repos must compile with stylus-sdk >= 0.8.0

  • SDK version tracked per-repo in sources.json

  • All Stylus repos forked to ARBuilder-Forks org with forkedFrom provenance tracking

Stylus SDK Version Support:

Version

Status

Notes

0.10.0

Main (default)

Latest stable, recommended for new projects

0.9.x

Supported

Separate branches in forked repos

0.8.x

Supported

Minimum supported version

< 0.8.0

Deprecated

Excluded from knowledge base

Multi-Version Strategy:

  • Branch-per-version: Forked repos maintain separate Git branches per SDK version (e.g., main for 0.10.0, v0.9.0 for original)

  • Branch-aware scraping: CF Worker ingests each branch as a separate source entry

  • Version-aware generation: generate_stylus_code and ask_stylus accept target_version to produce code for any supported SDK version

  • Version-aware retrieval: Vector search boosts chunks matching the requested SDK version

Arbitrum SDK — 6 docs + 5 repos

  • arbitrum-sdk, arbitrum-tutorials

  • 3 community repos: arbitrum-api, orbit-bridging, cross-messaging

  • Official bridging and messaging documentation (6 pages)

Full dApp Builder — 30 docs + 11 repos

  • Backend: NestJS (5 docs), Express (3 docs), nestjs/nest, arbitrum-token-bridge

  • Frontend: wagmi (5 docs), viem (4 docs), RainbowKit (4 docs), DaisyUI (5 docs) + 5 repos

  • Indexer: The Graph (5 docs), graph-tooling, messari/subgraphs

  • Oracle: Chainlink (4 docs), smart-contract-examples, chainlink

Orbit SDK — 5 Python MCP tools + 9 TypeScript templates

  • Tools: generate_orbit_config, generate_orbit_deployment, generate_validator_setup, ask_orbit, orchestrate_orbit

  • Templates: Chain Config, Deploy Rollup, Deploy Token Bridge, Custom Gas Token, Validator Management, Governance, Node Config, AnyTrust Config, Orchestration

  • Uses @arbitrum/chain-sdk ^0.25.0 + viem ^1.20.0 for prepareChainConfig(), createRollup(), createTokenBridge(), prepareNodeConfig()

  • Deployment output persisted to deployment.json — downstream scripts (token bridge, node config) chain automatically

  • Crash-proof deployment: saves deployment.json BEFORE receipt fetch, with try/catch for block number

  • Custom gas tokens: generates approve-token.ts with correct RollupCreator addresses, ERC-20 deploy guidance

  • Docker: offchainlabs/nitro-node:v3.9.4-7f582c3, bind mounts (./data/arbitrum), no user: root

  • Node config post-processing: restores masked private keys, disables staker for single-key setups, fixes DAS URL double-port

  • Wasm root check: --validation.wasm.allowed-wasm-module-roots prevents crash-loops on startup

  • AnyTrust: BLS keygen via datool keygen from nitro-node image

  • Supports: Rollup and AnyTrust chains, custom gas tokens, validator/batch poster management, full project scaffolding

API Access

Public MCP Endpoint (Free)

The MCP endpoint at /mcp is free to use and designed for IDE integration:

https://arbuilder.app/mcp
  • Requires arb_ API key from dashboard

  • Usage tracked per API key

  • Rate limited per free tier (100 calls/day)

Chat Completions API (OpenAI-compatible)

Conversational endpoint backed by a ReAct agent over 14 of the MCP tools, callable from any OpenAI SDK:

POST https://arbuilder.app/api/v1/chat/completions
Authorization: Bearer arb_<your-key>
  • Model: arbbuilder-chat (backed by openai/gpt-oss-120b via OpenRouter)

  • Streaming and non-streaming, OpenAI message + SSE shape

  • Native function calling — agent decides which tools to invoke; tool calls visible in delta.tool_calls

  • Chain-of-thought passthrough via reasoning_content

  • Stateless: clients send full message history each turn

  • Auto length-continuation across finish_reason: "length"

  • Limits: 6 ReAct iterations / 200K turn token budget / 32K char tool-result cap

  • Excludes the 4 large project scaffolders (generate_backend, generate_frontend, orchestrate_dapp, orchestrate_orbit) — call those directly via /api/v1/tools/<name> or MCP

Full reference: docs/api/chat-completions.md. Try it in the playground at /playground/chat.

Transparency Page

View all ingested sources and code templates at arbuilder.app/transparency.

This public page provides:

  • Ingested Sources: All documentation and GitHub repos in the knowledge base

  • Code Templates: Verified Stylus templates with full source code

  • Statistics: Chunk counts, SDK versions, and category breakdowns

Public API endpoints (no authentication required):

  • GET /api/public/sources - List all active sources

  • GET /api/public/templates - List all code templates

  • GET /api/public/templates?code=true - Templates with full source code

Internal Direct API (Testing Only)

Direct API routes at /api/v1/tools/* are for internal testing only:

  • Requires AUTH_SECRET in Authorization header

  • Not for public use

  • Used by CI/CD and internal validation scripts

MCP Capabilities

ARBuilder exposes a full MCP server with 19 tools, 11 resources, and 5 prompts for Cursor/VS Code integration.

Tools

Stylus Development (6 tools)

Tool

Description

get_stylus_context

RAG retrieval for docs and code examples

generate_stylus_code

Generate Stylus contracts from prompts

ask_stylus

Q&A, debugging, concept explanations

generate_tests

Generate unit/integration/fuzz tests

get_workflow

Build/deploy/test workflow guidance

validate_stylus_code

Compile-check code via Docker cargo check with Stylus-specific fix guidance

Arbitrum SDK - Bridging & Messaging (3 tools)

Tool

Description

generate_bridge_code

Generate ETH/ERC20 bridging code (L1<->L2, L1->L3, L3->L2)

generate_messaging_code

Generate cross-chain messaging code (L1<->L2, L2<->L3)

ask_bridging

Q&A about bridging patterns and SDK usage

Full dApp Builder (5 tools)

Tool

Description

generate_backend

Generate NestJS/Express backends with Web3 integration

generate_frontend

Generate Next.js + wagmi + RainbowKit frontends

generate_indexer

Generate The Graph subgraphs for indexing

generate_oracle

Generate Chainlink oracle integrations

orchestrate_dapp

Scaffold complete dApps with multiple components

Orbit Chain Integration (5 tools)

Tool

Description

generate_orbit_config

Generate Orbit chain configuration (prepareChainConfig, AnyTrust, custom gas tokens)

generate_orbit_deployment

Generate rollup and token bridge deployment scripts (createRollup, createTokenBridge)

generate_validator_setup

Manage validators, batch posters, and AnyTrust DAC keysets

ask_orbit

Q&A about Orbit chain deployment, configuration, and operations

orchestrate_orbit

Scaffold complete Orbit chain deployment projects with all scripts

Example: Get Build/Deploy Workflow

{
  "workflow_type": "deploy",
  "network": "arbitrum_sepolia",
  "include_troubleshooting": true
}

Returns step-by-step commands:

# Check balance
cast balance YOUR_ADDRESS --rpc-url https://sepolia-rollup.arbitrum.io/rpc

# Deploy contract
cargo stylus deploy --private-key-path=./key.txt --endpoint=https://sepolia-rollup.arbitrum.io/rpc

Resources (Knowledge Injection)

MCP Resources provide static knowledge that AI IDEs can load automatically:

Stylus Resources

Resource URI

Description

stylus://cli/commands

Complete cargo-stylus CLI reference

stylus://workflows/build

Step-by-step build workflow

stylus://workflows/deploy

Deployment workflow with network configs

stylus://workflows/test

Testing workflow (unit, integration, fuzz)

stylus://config/networks

Arbitrum network configurations

stylus://rules/coding

Stylus coding guidelines and patterns

Arbitrum SDK Resources

Resource URI

Description

arbitrum://rules/sdk

Arbitrum SDK bridging and messaging guidelines

Full dApp Builder Resources

Resource URI

Description

dapp://rules/backend

NestJS/Express Web3 backend patterns

dapp://rules/frontend

Next.js + wagmi + RainbowKit patterns

dapp://rules/indexer

The Graph subgraph development patterns

dapp://rules/oracle

Chainlink oracle integration patterns

Prompts (Workflow Templates)

MCP Prompts provide reusable templates for common workflows:

Prompt

Description

Arguments

build-contract

Build workflow guidance

project_path, release_mode

deploy-contract

Deploy workflow guidance

network, key_method

debug-error

Error diagnosis workflow

error_message, context

optimize-gas

Gas optimization workflow

contract_code, focus

generate-contract

Contract generation workflow

description, contract_type

How It Works

User: "Deploy my contract to Arbitrum Sepolia"
    ↓
AI IDE calls get_workflow(workflow_type="deploy", network="arbitrum_sepolia")
    ↓
Returns structured commands + troubleshooting
    ↓
AI IDE presents commands to user (user executes locally)

The MCP server provides knowledge about commands, not command execution. This ensures:

  • User controls what runs on their machine

  • No security risks from remote execution

  • AI IDE knows exact commands without hardcoding

See docs/mcp_tools_spec.md for full specification.

User Guide

Generating Stylus Contracts

ARBuilder uses template-based code generation to ensure generated code compiles correctly. Instead of generating from scratch, it customizes verified working templates from official Stylus examples.

Available Templates:

Template

Type

Description

Counter

utility

Simple storage with getter/setter operations

VendingMachine

defi

Mappings with time-based rate limiting

SimpleERC20

token

Basic ERC20 with transfer, approve, transferFrom

AccessControl

utility

Owner-only functions with ownership transfer

DeFiVault

defi

Cross-contract calls (sol_interface!), transfer_eth, Call::new_in(self)

NftRegistry

nft

Dynamic arrays (push), sol! events with camelCase, mint/transfer

Stylus SDK Version Support:

Version

Status

Notes

0.10.0

Main (default)

Recommended for new projects

0.9.x

Supported

Use target_version: "0.9.0" for 0.9.x output. Separate branches in forks

0.8.x

Supported

Minimum supported version

< 0.8.0

Deprecated

Warning shown, may not compile

Pass target_version to tools for version-specific output:

User: "Generate a counter contract for SDK 0.9.0"
AI uses: generate_stylus_code(prompt="...", target_version="0.9.0")
Returns: Code using msg::sender(), .getter(), print_abi() patterns

Ask your AI assistant to generate contracts:

User: "Create an ERC20 token called MyToken with 1 million supply"

AI uses: generate_stylus_code tool
Returns: Complete Rust contract based on SimpleERC20 template with proper imports, storage, and methods

Getting Context and Examples

Search the knowledge base for documentation and code examples:

User: "Show me how to implement a mapping in Stylus"

AI uses: get_stylus_context tool
Returns: Relevant documentation and code snippets from official examples

Q&A and Debugging

Ask questions about Stylus development:

User: "Why am I getting 'storage not initialized' error?"

AI uses: ask_stylus tool
Returns: Explanation with solution based on documentation context

Generating Tests

Create test suites for your contracts:

User: "Write unit tests for this counter contract: [paste code]"

AI uses: generate_tests tool
Returns: Comprehensive test module with edge cases

Build/Deploy Workflows

Get step-by-step deployment guidance:

User: "How do I deploy to Arbitrum Sepolia?"

AI uses: get_workflow tool
Returns: Commands for checking balance, deploying, and verifying

Features

Stylus Smart Contract Builder

AI-powered Stylus contract development with RAG-based context retrieval:

  • Context Search: Hybrid search (vector + BM25 + cross-encoder reranking) over Stylus docs and code examples

  • Code Generation: Generate production-ready Stylus contracts from natural language, with 7 built-in templates (Counter, VendingMachine, SimpleERC20, AccessControl, DeFiVault, StakingRewards, NftRegistry)

  • Test Generation: Generate unit, integration, and fuzz tests for Stylus contracts

  • Q&A Assistant: RAG-powered answers to Stylus development questions with code fix post-processing

  • Workflow Guides: Step-by-step build, deploy, and test workflow guidance

  • Code Validation: Docker-based cargo check with up to 3 auto-fix attempts and Stylus-specific error guidance

  • SDK 0.10.0: Full support for the latest Stylus SDK (alloy 1.0.1, Rust 1.91.0, self.vm() API)

# Example: Generate a Stylus contract
echo '{"method": "tools/call", "id": 1, "params": {"name": "generate_stylus_code", "arguments": {"prompt": "Create an ERC20 token with mint and burn"}}}' | python -m src.mcp.server

# Example: Ask a Stylus question
echo '{"method": "tools/call", "id": 1, "params": {"name": "ask_stylus", "arguments": {"question": "How do I use mappings in Stylus?"}}}' | python -m src.mcp.server

Arbitrum SDK Integration

Cross-chain bridging and messaging support:

  • ETH Bridging: L1 <-> L2 deposits and withdrawals

  • ERC20 Bridging: Token bridging with gateway approvals

  • L1 -> L3 Bridging: Direct L1 to Orbit chain bridging via double retryables

  • Cross-chain Messaging: L1 -> L2 retryable tickets, L2 -> L1 messages via ArbSys

  • Status Tracking: Message status monitoring and withdrawal claiming

# Example: Generate ETH deposit code
echo '{"method": "tools/call", "id": 1, "params": {"name": "generate_bridge_code", "arguments": {"bridge_type": "eth_deposit", "amount": "0.5"}}}' | python -m src.mcp.server

Full dApp Builder

Complete dApp scaffolding with all components:

  • Backend Generation: NestJS or Express with viem/wagmi integration

  • Frontend Generation: Next.js 14 + wagmi v2 + RainbowKit v2 + DaisyUI

  • Indexer Generation: The Graph subgraphs (ERC20, ERC721, DeFi, custom events)

  • Oracle Integration: Chainlink Price Feeds, VRF, Automation, Functions

  • Full Orchestration: Scaffold complete dApps with monorepo structure

  • ABI Auto-Extraction: Contract ABI is parsed from Stylus Rust code and injected into backend/frontend

  • ABI-Aware Generation: Indexer schema/mappings, frontend hooks, and backend routes are generated from contract ABI

  • Compiler Verification: Docker-based cargo check loop catches and auto-fixes compilation errors

  • Executable Scripts: Generated setup.sh, deploy.sh, and start.sh for one-command workflows

  • CLI Scaffolding: setup.sh uses a scaffold-first, backfill pattern with official CLI tools (cargo stylus new, create-next-app, @nestjs/cli) to fill in config files our templates don't generate, with graceful fallback if tools aren't installed

  • Env Standardization: Centralized env var config (PORT 3001, CORS, BACKEND_URL) across all components

Backend Templates:

  • NestJS + Stylus contract integration

  • Express + Stylus (lightweight)

  • NestJS + GraphQL (for subgraph querying)

  • API Gateway (cross-chain proxy)

Frontend Templates:

  • Next.js + wagmi + RainbowKit base

  • DaisyUI component library

  • Contract Dashboard (admin panel)

  • Token Interface (ERC20/721 UI)

Indexer Templates:

  • ERC20 Subgraph (transfers, balances)

  • ERC721 Subgraph (ownership, metadata)

  • DeFi Subgraph (swaps, liquidity)

  • Custom Events Subgraph

Oracle Templates:

  • Chainlink Price Feed

  • Chainlink VRF (randomness)

  • Chainlink Automation (keepers)

  • Chainlink Functions

# Example: Generate full dApp scaffold
echo '{"method": "tools/call", "params": {"name": "orchestrate_dapp", "arguments": {"prompt": "Create a token staking dApp", "components": ["contract", "backend", "frontend", "indexer"]}}}' | python -m src.mcp.server

# Example: Generate backend only
echo '{"method": "tools/call", "params": {"name": "generate_backend", "arguments": {"prompt": "Create a staking API", "framework": "nestjs"}}}' | python -m src.mcp.server

# Example: Generate frontend with contract ABI
echo '{"method": "tools/call", "params": {"name": "generate_frontend", "arguments": {"prompt": "Create token dashboard", "contract_abi": "[...]"}}}' | python -m src.mcp.server

Orbit Chain Integration

Orbit chain deployment and management support:

  • Chain Configuration: Generate prepareChainConfig() scripts for Rollup or AnyTrust chains

  • Rollup Deployment: Generate createRollup() scripts with crash-proof deployment.json output (saves before receipt fetch)

  • Token Bridge: Generate createTokenBridge() scripts with automatic ERC-20 approval for custom gas token chains

  • Custom Gas Tokens: Full approval flow — RollupCreator + TokenBridgeCreator + Inbox approvals

  • AnyTrust DAC: Full keyset lifecycle — BLS key generation (generate-das-keys.sh), keyset encoding, UpgradeExecutor-routed setValidKeyset(), hash verification

  • Validator Management: Add/remove validators and batch posters

  • Node Configuration: Generate Nitro node config via prepareNodeConfig() with post-processing — private key restoration, staker disable for single-key setups, deployed-at injection, DAS URL fix

  • Docker Compose: Battle-tested templates with explicit HTTP/WS/metrics CLI flags, WASM cache cleanup entrypoint, DAS server with all required flags

  • Governance Management: UpgradeExecutor role checking, granting, and revocation (manage-governance.ts)

  • Chain Verification: Health check script tests RPC connectivity, balances, transfers, and contract deployment (test-chain.ts)

  • Full Orchestration: Scaffold complete deployment projects with all scripts, configs, and documentation

# Example: Scaffold a complete Orbit chain deployment project
echo '{"method": "tools/call", "params": {"name": "orchestrate_orbit", "arguments": {"prompt": "Deploy an AnyTrust chain on Arbitrum Sepolia", "chain_name": "my-orbit-chain", "chain_id": 412346, "is_anytrust": true, "parent_chain": "arbitrum-sepolia"}}}' | python -m src.mcp.server

# Example: Generate chain configuration
echo '{"method": "tools/call", "params": {"name": "generate_orbit_config", "arguments": {"prompt": "Configure a custom gas token chain", "native_token": "0x...", "parent_chain": "arbitrum-sepolia"}}}' | python -m src.mcp.server

# Example: Ask about Orbit deployment
echo '{"method": "tools/call", "params": {"name": "ask_orbit", "arguments": {"question": "How do I deploy an Orbit chain with a custom gas token?"}}}' | python -m src.mcp.server

Development

Running Tests

# Run all unit tests
pytest tests/ -m "not integration"

# Run retrieval quality tests
pytest tests/test_retrieval.py -v

# Run MCP tool tests (requires tool implementations)
pytest tests/mcp_tools/ -v

# Run template selection and validation tests
pytest tests/test_templates.py -v -m "not integration"

# Run template compilation tests (requires Rust toolchain + cargo-stylus)
pytest tests/test_templates.py -v -m integration

Template compilation tests require:

  • Rust toolchain 1.87.0: rustup install 1.87.0

  • WASM target: rustup target add wasm32-unknown-unknown --toolchain 1.87.0

  • cargo-stylus: cargo install --locked cargo-stylus

Running Benchmarks

# Run all benchmarks
python scripts/run_benchmarks.py

# Run only P0 (critical) tests
python scripts/run_benchmarks.py --priority P0

# Run benchmarks for a specific tool
python scripts/run_benchmarks.py --tool get_stylus_context

Benchmark reports are saved to benchmark_results/.

Code Formatting

black .
ruff check .

Troubleshooting

Embedding Generation Errors

If you encounter errors like Error generating embeddings: RetryError or KeyError during vector database ingestion:

1. Check OpenRouter API Key

# Verify your .env file has a valid API key
cat .env | grep OPENROUTER_API_KEY

Ensure:

  • The API key is correctly set (no extra spaces or quotes)

  • Your OpenRouter account has credits

  • The embedding model baai/bge-m3 is available on OpenRouter

2. Rate Limiting Issues

If you see HTTPStatusError with status 429, you're being rate limited. Solutions:

# Run with smaller batch size
python -m src.embeddings.vectordb --batch-size 25

# Or modify max_workers in vectordb.py to 1 for sequential processing

3. Enable Debug Logging

Add this to your script or at the start of your session to see detailed logs:

import logging
logging.basicConfig(level=logging.INFO)
# For more verbose output:
# logging.basicConfig(level=logging.DEBUG)

Scraper Errors

"Execution context was destroyed" errors

This is a browser navigation issue during scraping. The scraper will automatically retry. If it persists:

  • The page may have heavy JavaScript that interferes with scraping

  • These pages are skipped after retries; the scraper continues with other URLs

Git clone failures

If repository cloning fails:

# Check your network connection
ping github.com

# Try cloning manually to diagnose
git clone --depth 1 https://github.com/OffchainLabs/stylus-hello-world

# If behind a proxy, configure git
git config --global http.proxy http://proxy:port

Timeout errors

For slow connections, increase timeouts in the scraper config or reduce concurrent requests:

python -m scraper.run --max-concurrent 1

ChromaDB Issues

"Collection is empty" error

If you see collection is empty when using get_stylus_context tool:

# The vector database must be generated locally (it's not included in the repo)
# Run this command to populate the database:
python -m src.embeddings.vectordb

# If that doesn't work, try resetting first:
python -m src.embeddings.vectordb --reset

Import errors with opentelemetry

If you see TypeError: 'NoneType' object is not subscriptable when importing chromadb:

# This is usually a conda environment issue
# Make sure you're in the correct environment
conda activate arbbuilder

# Or reinstall chromadb
pip uninstall chromadb
pip install chromadb

Database corruption

If the vector database seems corrupted:

# Reset and re-ingest
python -m src.embeddings.vectordb --reset

CI/CD Workflows

Workflow

Trigger

Purpose

qa.yml

PRs to main, push to main

TypeScript type check, Python lint, Python tests

maintenance.yml

Weekly (Mon 6AM UTC) + manual

SDK monitoring, health checks, discovery, re-verification, auto-remediation

refresh-rag.yml

Manual

Full RAG refresh: scrape, process, migrate to Vectorize

deploy-staging.yml

Manual

Deploy to staging environment

release-chunks.yml

GitHub release

Build and publish pre-processed chunks + embeddings

maintenance.yml Jobs

Job

Trigger

What It Does

sdk-monitor

Weekly + manual

Checks crates.io/npm for new SDK versions

health-check

Weekly + manual

Checks all repos for archived/deleted status

discover

Manual only

Searches GitHub for new community repos

reverify

On SDK update or manual

Re-verifies all repos with verify_source.py --all

remediate

Manual only

Auto-removes archived/deleted repos from sources.json

sync-sources

Weekly + manual

Syncs sources.json to CF KV registry

create-issue

When problems found

Creates GitHub issue with maintenance label

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines on how to get started.

License

MIT License - see LICENSE for details.

References

Available Tools

19 tools
ask_bridgingC

Answer questions about Arbitrum bridging and cross-chain messaging patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesQuestion about Arbitrum bridging or messaging
include_code_exampleNoInclude a code example in the answer if relevant

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool answers questions, implying a read-only, informational operation, but doesn't disclose any behavioral traits such as response format, potential errors, rate limits, or authentication needs. This leaves significant gaps in understanding how the tool behaves beyond its basic purpose.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's front-loaded with the core function and appropriately sized, making it easy to parse and understand quickly.

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

Completeness2/5

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

Given the complexity of a Q&A tool with no annotations and no output schema, the description is incomplete. It doesn't explain what kind of answers to expect, how detailed they are, or any limitations (e.g., scope of knowledge). For a tool that likely provides informational responses, more context on behavior and output would be helpful to set proper expectations.

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

Parameters3/5

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

The description adds no parameter semantics beyond what the input schema provides. With 100% schema description coverage, the schema already documents both parameters ('question' and 'include_code_example') clearly. The description doesn't elaborate on parameter usage, constraints, or examples, so it meets the baseline for high schema coverage without adding extra value.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Answer questions about Arbitrum bridging and cross-chain messaging patterns.' It specifies the verb ('answer questions') and the domain/resource ('Arbitrum bridging and cross-chain messaging patterns'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'ask_orbit' or 'ask_stylus', which likely answer questions about different topics, so it misses full sibling distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'ask_orbit' or 'ask_stylus' for comparison, nor does it specify prerequisites, contexts, or exclusions for usage. The agent must infer usage based on the topic alone, which is insufficient for clear decision-making.

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

ask_orbitC

Answer questions about Arbitrum Orbit chain deployment, configuration, validators, AnyTrust, custom gas tokens, and governance.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesQuestion about Orbit chain deployment or management
question_typeNoType of question for optimized responsegeneral

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'answers questions', implying it's a read-only operation, but doesn't cover critical aspects like response format, limitations (e.g., accuracy, depth), rate limits, or authentication needs. For a Q&A tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

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

Conciseness4/5

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

The description is a single, efficient sentence that lists key topics upfront. It avoids redundancy and wastes no words, though it could be slightly more structured (e.g., by grouping topics). Overall, it's appropriately concise for its purpose.

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

Completeness2/5

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

Given the complexity of a Q&A tool with no annotations and no output schema, the description is incomplete. It doesn't explain what kind of answers to expect (e.g., text responses, links, code snippets), potential limitations, or how it integrates with sibling tools. For a tool that likely returns varied outputs, more context is needed to guide effective use.

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

Parameters3/5

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

The schema description coverage is 100%, with both parameters ('question' and 'question_type') well-documented in the schema. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain how 'question_type' affects responses or provide examples). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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

Purpose4/5

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

The description clearly states the tool's purpose: answering questions about Arbitrum Orbit chain topics. It specifies the scope with concrete topics (deployment, configuration, validators, etc.), which is more specific than just restating the name. However, it doesn't explicitly differentiate from sibling tools like 'ask_bridging' or 'ask_stylus', which appear to be similar Q&A tools for different topics.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It lists topics but doesn't specify prerequisites, exclusions, or compare to sibling tools like 'ask_bridging' or 'generate_orbit_config'. Without such context, an agent might struggle to choose between this and other tools for Orbit-related queries.

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

ask_stylusB

Ask questions about Stylus development, get concept explanations, or debug code issues. Supports version-specific guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesThe question to answer
code_contextNoOptional code snippet for context (e.g., for debugging)
question_typeNoType of question for optimized response (default: general)general
target_versionNoTarget stylus-sdk version for version-specific guidance (default: 0.10.0).

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'get concept explanations' and 'debug code issues,' implying it returns informative responses, but doesn't detail response format, potential limitations (e.g., accuracy, depth), rate limits, or authentication needs. For a Q&A tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves beyond basic purpose.

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

Conciseness4/5

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

The description is concise and front-loaded, stating the core purpose in the first sentence and adding a supplementary note in the second. Both sentences earn their place by clarifying scope and capabilities. It avoids redundancy and is appropriately sized for a tool with four parameters, though it could be slightly more detailed given the lack of annotations.

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

Completeness3/5

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

Given the tool's complexity (Q&A with four parameters), no annotations, and no output schema, the description is moderately complete. It covers the purpose and hints at usage but lacks details on behavioral traits, response format, and error handling. For a tool without structured output or safety annotations, more context on what to expect from the tool's operation would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema, only implying that parameters like target_version enable 'version-specific guidance.' It doesn't provide additional context on parameter usage or interactions. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't detract either.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Ask questions about Stylus development, get concept explanations, or debug code issues.' It specifies the verb ('ask questions') and resource ('Stylus development'), and distinguishes from most siblings (e.g., generate_* tools, orchestrate_* tools) by focusing on Q&A rather than code generation or orchestration. However, it doesn't explicitly differentiate from other ask_* tools like ask_bridging or ask_orbit, which may have overlapping domains.

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

Usage Guidelines3/5

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

The description implies usage context through 'Supports version-specific guidance' and the input schema's parameters (e.g., question_type, target_version), suggesting it's for Stylus-related inquiries with optional specificity. However, it lacks explicit guidance on when to use this tool versus alternatives like ask_bridging or ask_orbit, or when to prefer code-generation siblings for similar tasks. The guidance is present but not fully articulated.

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

generate_backendC

Generate TypeScript backend code for Arbitrum dApps. Supports NestJS and Express with viem integration.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the backend functionality needed
frameworkNoBackend framework to usenestjs
templateNoSpecific template to use (auto-selected if not provided)
contract_abiNoContract ABI JSON string (optional)
contract_addressNoContract address to integrate with
include_testsNoInclude test files

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what the tool generates but doesn't describe how it works: whether it creates files, returns code snippets, requires specific permissions, has rate limits, or what the output format looks like. For a code generation tool with no annotation coverage, this leaves significant behavioral questions unanswered.

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

Conciseness5/5

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

The description is extremely concise - a single sentence that efficiently communicates the core functionality. Every word earns its place: 'Generate TypeScript backend code' (action), 'for Arbitrum dApps' (context), 'Supports NestJS and Express' (framework options), 'with viem integration' (key technology). No wasted words or redundant information.

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

Completeness2/5

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

For a code generation tool with 6 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what the tool actually produces (files? code blocks? project structure?), doesn't mention any constraints or requirements, and provides minimal context about how the generation works. The description alone doesn't give enough information for an agent to understand the tool's full behavior.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description adds minimal parameter context beyond the schema - it mentions 'Supports NestJS and Express with viem integration' which relates to the framework parameter, but doesn't provide additional semantic meaning for other parameters like contract_abi or template. The description doesn't compensate for any gaps since there are none in the schema.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate TypeScript backend code for Arbitrum dApps' with specific frameworks mentioned (NestJS and Express) and viem integration. It distinguishes from some siblings like generate_frontend or generate_tests, but doesn't explicitly differentiate from other backend-related tools like generate_messaging_code or generate_indexer.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools available (like generate_bridge_code, generate_messaging_code, generate_oracle, etc.), there's no indication of when backend code generation is appropriate versus specialized code generation tools. No prerequisites 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.

generate_bridge_codeB

Generate TypeScript code for Arbitrum asset bridging using the Arbitrum SDK. Supports ETH/ERC20 bridging L1<->L2 and L1->L3.

ParametersJSON Schema
NameRequiredDescriptionDefault
bridge_typeYesType of bridging operation to generate code for
amountNoAmount to bridge (in ETH or token units)0.1
token_addressNoL1 token address (required for erc20 operations)
destination_addressNoDestination address (for deposit_to operations)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool generates code but doesn't mention whether it requires specific dependencies, how the code is delivered (e.g., as a file or snippet), error handling, or any rate limits. This leaves significant gaps for a code-generation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it front-loads the core purpose and succinctly lists supported operations without unnecessary elaboration.

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

Completeness2/5

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

Given the complexity of blockchain bridging and no annotations or output schema, the description is inadequate. It doesn't explain what the generated code looks like, any required setup (e.g., SDK installation), or error scenarios, leaving the agent with insufficient context for effective use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond implying support for ETH/ERC20 and L1/L2/L3 operations, which aligns with the bridge_type enum but doesn't provide extra value over the schema.

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

Purpose5/5

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

The description clearly states the specific action ('Generate TypeScript code'), resource ('Arbitrum asset bridging'), and scope ('using the Arbitrum SDK. Supports ETH/ERC20 bridging L1<->L2 and L1->L3'), distinguishing it from sibling tools like generate_frontend or generate_tests that handle different code generation tasks.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like ask_bridging or generate_messaging_code. It mentions what the tool supports but offers no context about prerequisites, typical use cases, or exclusions.

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

generate_frontendC

Generate Next.js frontend code for Arbitrum dApps. Uses wagmi v2 and RainbowKit.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the frontend functionality needed
templateNoSpecific template to use (auto-selected if not provided)
contract_abiNoContract ABI JSON string for generating hooks
contract_addressNoContract address to integrate with
ui_frameworkNoUI framework to usedaisyui

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions the technologies used (wagmi v2, RainbowKit) but doesn't describe what the tool actually produces (files, structure), whether it modifies existing code, error handling, or any limitations. The description is functional but lacks operational transparency.

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

Conciseness5/5

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

The description is extremely concise with just two sentences that directly state the tool's purpose and technologies. Every word earns its place with zero redundancy or unnecessary elaboration, making it efficiently front-loaded with essential information.

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

Completeness2/5

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

For a code generation tool with 5 parameters and no annotations or output schema, the description is insufficient. It doesn't explain what kind of output to expect (files, code snippets, project structure), how generated code integrates, or any constraints. The description provides basic purpose but lacks operational context needed for effective use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema, maintaining the baseline score of 3. It doesn't explain relationships between parameters or provide usage examples.

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

Purpose4/5

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

The description clearly states the tool generates Next.js frontend code for Arbitrum dApps using wagmi v2 and RainbowKit, providing specific technologies and target platform. It distinguishes from siblings like generate_backend or generate_tests by focusing on frontend, but doesn't explicitly contrast with other frontend-related tools like generate_bridge_code or generate_messaging_code.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. While it's clear this is for frontend generation, there's no mention of when to choose it over other code generation tools like generate_bridge_code or generate_messaging_code, nor any prerequisites or constraints for usage.

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

generate_indexerC

Generate subgraph code for indexing Arbitrum contracts with The Graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the indexing requirements
templateNoType of subgraph template to use
contract_addressNoContract address to index
contract_abiNoContract ABI JSON string for custom events
start_blockNoBlock number to start indexing from
networkNoNetwork to deploy the subgrapharbitrum-sepolia

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't mention any behavioral traits such as whether it's a read-only operation, if it has side effects (e.g., creating files or deploying code), rate limits, authentication needs, or error handling. This is a significant gap for a tool with multiple parameters and no structured safety hints.

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

Conciseness5/5

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

The description is a single, clear sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

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

Completeness2/5

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

Given the complexity (6 parameters, no annotations, no output schema), the description is incomplete. It lacks behavioral context, usage guidelines, and any mention of output or side effects. For a tool that likely generates code with potential deployment implications, this leaves significant gaps for an AI agent to infer correct usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents all parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain how parameters interact or provide examples). This meets the baseline of 3 when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('generate subgraph code') and the target ('for indexing Arbitrum contracts with The Graph'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like generate_backend or generate_frontend, which might also involve code generation for different components.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools focused on code generation (e.g., generate_backend, generate_frontend, generate_bridge_code), there's no indication of the specific context or prerequisites for choosing this tool over others.

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

generate_messaging_codeB

Generate TypeScript code for Arbitrum cross-chain messaging. Supports L1->L2 retryable tickets and L2->L1 messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_typeYesType of messaging operation to generate code for
include_exampleNoInclude example usage with sample contract call

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool 'generates' code, implying a creation operation, but doesn't specify whether this is read-only or has side effects (e.g., file writes), what permissions are needed, or any rate limits. The description adds minimal context beyond the basic action, leaving key behavioral traits unclear.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Generate TypeScript code for Arbitrum cross-chain messaging') and adds supporting details without waste. Every word contributes to understanding the tool's scope, making it appropriately sized and well-structured.

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

Completeness3/5

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

Given the complexity (cross-chain messaging code generation), lack of annotations, and no output schema, the description is moderately complete. It covers the purpose and supported message types but misses details like output format (e.g., code snippets or files), error handling, or dependencies. For a code-generation tool with 2 parameters, this is adequate but has clear gaps in behavioral context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters ('message_type' with enum values and 'include_example' with default). The description adds some semantic context by mentioning 'L1->L2 retryable tickets and L2->L1 messages', which loosely maps to the 'message_type' enum, but doesn't provide additional details like code format or examples. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate TypeScript code for Arbitrum cross-chain messaging.' It specifies the verb ('Generate') and resource ('TypeScript code'), and mentions the domain ('Arbitrum cross-chain messaging'). However, it doesn't explicitly differentiate from siblings like 'generate_bridge_code' or 'generate_frontend', which reduces clarity about its unique scope.

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

Usage Guidelines3/5

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

The description implies usage by listing supported message types ('L1->L2 retryable tickets and L2->L1 messages'), suggesting it's for cross-chain messaging scenarios. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., 'generate_bridge_code' for general bridging or 'generate_frontend' for UI code), and doesn't mention prerequisites or exclusions, leaving usage context somewhat vague.

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

generate_oracleB

Generate Chainlink oracle integration code for Arbitrum dApps.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the oracle functionality needed
oracle_typeNoType of Chainlink oracle to integrate
networkNoNetwork to deploy onarbitrumSepolia
include_stylusNoInclude Stylus (Rust) implementation if available
include_frontendNoInclude frontend React hooks

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool generates code but doesn't clarify what 'generate' entails—whether it produces complete deployable contracts, snippets, or documentation. It also omits details like authentication requirements, rate limits, or whether the output is deterministic based on inputs, which are critical for a code-generation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary elaboration. Every word contributes directly to understanding the tool's function, making it highly concise and well-structured for quick comprehension.

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

Completeness3/5

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

Given the tool's complexity (5 parameters, no output schema, and no annotations), the description is minimally adequate but lacks depth. It doesn't explain the output format (e.g., code files, documentation) or behavioral aspects like error handling, which are important for a code-generation tool. However, the high schema coverage partially compensates for these gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema, such as explaining how 'prompt' influences the generated code or clarifying the relationships between parameters like 'oracle_type' and 'include_stylus'. Baseline 3 is appropriate when the schema handles parameter documentation effectively.

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

Purpose4/5

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

The description clearly states the tool's purpose: generating Chainlink oracle integration code for Arbitrum dApps. It specifies the verb ('generate'), resource ('Chainlink oracle integration code'), and target platform ('Arbitrum dApps'). However, it doesn't explicitly differentiate from sibling tools like 'generate_backend' or 'generate_frontend' that might also produce code for dApps.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'generate_backend' or 'generate_frontend' that might overlap in generating code components for dApps, nor does it specify prerequisites or contexts where this tool is particularly appropriate.

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

generate_orbit_configC

Generate configuration code for Orbit chain deployment. Supports chain config, AnyTrust DAC setup, and custom gas token configuration using @arbitrum/orbit-sdk.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the configuration needed
chain_idNoChain ID for the new Orbit chain
ownerNoInitial chain owner address (0x...)
is_anytrustNoWhether this is an AnyTrust chain (vs Rollup)
native_tokenNoCustom gas token address (ERC20)
parent_chainNoParent chain for the Orbit chainarbitrum-sepolia

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the tool 'supports chain config, AnyTrust DAC setup, and custom gas token configuration' but doesn't describe what the tool actually produces (code format, language, structure), whether it's a read-only generation or has side effects, or any constraints like rate limits or authentication requirements. For a code generation tool with no annotation coverage, this is insufficient.

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

Conciseness4/5

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

The description is appropriately concise - a single sentence that efficiently communicates the core functionality. It's front-loaded with the main purpose and includes relevant technical context (the SDK used). There's no wasted verbiage or redundancy.

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

Completeness2/5

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

For a code generation tool with 6 parameters and no annotations or output schema, the description is incomplete. It doesn't explain what format the generated code takes (TypeScript? JSON? CLI commands?), what the output looks like, or any behavioral characteristics. With no output schema and no annotations, the description should provide more context about the tool's behavior and results.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'AnyTrust DAC setup' which relates to the 'is_anytrust' parameter, and 'custom gas token configuration' which relates to 'native_token', but doesn't provide additional semantic context beyond what's in the parameter descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate configuration code for Orbit chain deployment' with specific capabilities (chain config, AnyTrust DAC setup, custom gas token). It distinguishes from siblings like 'generate_orbit_deployment' by focusing on configuration code generation rather than deployment orchestration. However, it doesn't explicitly contrast with all similar tools like 'generate_validator_setup'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools like 'generate_orbit_deployment', 'orchestrate_orbit', and 'ask_orbit', there's no indication of when configuration generation is appropriate versus deployment orchestration or general queries. The description mentions what the tool supports but not when to choose it.

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

generate_orbit_deploymentC

Generate deployment code for Orbit chains. Supports rollup deployment, token bridge deployment, and full deployment with validators and batch posters.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the deployment requirements
deployment_typeNoType of deployment to generaterollup
validatorsNoValidator addresses for the rollup
batch_postersNoBatch poster addresses
native_tokenNoCustom gas token address
parent_chainNoParent chain for deploymentarbitrum-sepolia
rollup_versionNoRollup version to deployv3.1
chain_idNoChain ID for the new Orbit chain
is_anytrustNoWhether to deploy as AnyTrust chain
rollup_addressNoExisting rollup address (for token_bridge deployment)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions what the tool generates, it doesn't describe what 'generate' entails (e.g., returns code snippets, configuration files, or full deployment scripts), whether it requires authentication, rate limits, or what happens with existing deployments. For a complex 10-parameter tool with no annotations, this is insufficient.

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

Conciseness4/5

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

The description is a single, efficient sentence that states the core purpose upfront. It could be slightly more structured by separating the three deployment types with commas or bullets, but it's appropriately sized with zero wasted words.

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

Completeness2/5

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

For a complex tool with 10 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what 'generate' produces (code format, language, structure), doesn't mention error conditions or validation requirements, and provides minimal guidance on parameter usage. The description should do more to compensate for the lack of structured metadata.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description mentions the three deployment types which correspond to the 'deployment_type' enum values, adding minimal context about what each type includes. However, it doesn't explain relationships between parameters (e.g., that 'rollup_address' is only relevant for 'token_bridge' type). Baseline 3 is appropriate given high schema coverage.

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

Purpose4/5

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

The description clearly states the tool generates deployment code for Orbit chains and specifies three supported deployment types (rollup, token bridge, full). It uses specific verbs like 'generate' and identifies the resource as 'deployment code for Orbit chains', but doesn't explicitly differentiate from sibling tools like 'generate_orbit_config' or 'orchestrate_orbit'.

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

Usage Guidelines2/5

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

The description lists the three deployment types supported but provides no guidance on when to choose one type over another, what prerequisites exist, or when to use this tool versus alternatives like 'generate_orbit_config' or 'orchestrate_orbit'. There's no explicit when/when-not guidance or named alternatives.

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

generate_stylus_codeC

Generate Stylus/Rust smart contract code based on requirements. Uses RAG context to provide relevant examples. Supports version-aware generation for different stylus-sdk versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the code to generate
context_queryNoOptional query to retrieve additional context
contract_typeNoType of contract to generate
include_testsNoWhether to include unit tests (default: false)
temperatureNoGeneration temperature 0-1 (default: 0.2)
target_versionNoTarget stylus-sdk version (default: 0.10.0). Use this to generate code for a specific SDK version.0.10.0
cargo_tomlNoOptional Cargo.toml content for automatic SDK version detection. If provided, target_version is auto-detected from dependencies.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions using RAG context and version-aware generation, but doesn't cover important aspects like whether this is a read-only operation, what permissions are required, rate limits, error handling, or what the output format looks like. For a code generation tool with 7 parameters, this leaves significant gaps.

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

Conciseness4/5

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

The description is efficiently structured in two sentences that cover the core functionality, context mechanism, and version support. Every phrase adds value, though it could be slightly more front-loaded by leading with the primary purpose before mentioning implementation details.

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

Completeness2/5

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

For a code generation tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns (code snippets? full files? error formats?), doesn't mention authentication requirements, and provides no guidance on error conditions or limitations. The description assumes too much about what users already know.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'version-aware generation' which relates to target_version, and 'RAG context' which relates to context_query, but doesn't provide additional semantic context about how parameters interact or affect generation quality.

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

Purpose4/5

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

The description clearly states the tool generates Stylus/Rust smart contract code based on requirements, specifies it uses RAG context for examples, and mentions version-aware generation. It distinguishes itself from siblings like generate_frontend or generate_tests by focusing specifically on smart contract code, though it doesn't explicitly contrast with generate_bridge_code or other code generation tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like generate_bridge_code or generate_oracle. It mentions using RAG context and version-aware generation, but doesn't specify scenarios where this tool is preferred over other code generation tools or when it should be avoided.

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

generate_testsC

Generate test cases for Stylus smart contracts.

ParametersJSON Schema
NameRequiredDescriptionDefault
contract_codeYesThe contract code to generate tests for
test_frameworkNoTest framework to use (default: rust_native)rust_native
test_typesNoTypes of tests to generate (default: ["unit"])
coverage_focusNoSpecific functions to focus on

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool generates test cases but doesn't reveal critical traits like whether it's a read-only or mutating operation, authentication needs, rate limits, output format, or error handling. For a tool with 4 parameters and no annotations, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is extremely concise and front-loaded with a single sentence: 'Generate test cases for Stylus smart contracts.' It wastes no words and directly communicates the core purpose, making it efficient and easy to parse for an AI agent.

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

Completeness2/5

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

Given the tool's complexity (4 parameters, no annotations, no output schema), the description is incomplete. It lacks behavioral details, usage guidelines, and output expectations, which are crucial for a generation tool. Without annotations or an output schema, the description should provide more context to be fully helpful.

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

Parameters3/5

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

The description adds no parameter-specific information beyond what the input schema provides. Since schema description coverage is 100%, the schema already documents all parameters well, including enums and defaults. The description doesn't compensate with extra context, so it meets the baseline for high schema coverage without adding value.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate test cases for Stylus smart contracts.' It specifies the verb ('Generate') and resource ('test cases for Stylus smart contracts'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'validate_stylus_code' or 'generate_stylus_code,' which could involve testing-related functions, so it misses full sibling distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for test generation, or comparisons to sibling tools such as 'validate_stylus_code' or 'generate_stylus_code,' which might overlap in testing or code generation. This lack of usage context leaves the agent without clear direction.

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

generate_validator_setupC

Generate code for managing Orbit chain validators, batch posters, and AnyTrust DAC keysets.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the validator management action
actionNoAction to performlist
targetNoTarget entity to managevalidator
addressesNoAddresses to check, add, or remove
rollup_addressNoRollup contract address on parent chain
sequencer_inboxNoSequencerInbox contract address
parent_chainNoParent chain where contracts are deployedarbitrum-sepolia

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool 'generates code' but doesn't clarify what type of code (e.g., scripts, configuration files, smart contracts), where the code is output, whether it's executable or requires additional steps, or what permissions/authentication might be needed. The description is too vague about the tool's actual behavior.

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

Conciseness4/5

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

The description is a single, efficient sentence that gets straight to the point without unnecessary words. It's appropriately sized for the tool's complexity, though it could potentially be more specific about the type of code generated.

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

Completeness2/5

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

For a tool with 7 parameters (including complex enums and arrays), no annotations, and no output schema, the description is insufficient. It doesn't explain what the generated code looks like, how it should be used, what dependencies it might have, or provide any examples. The description leaves too many open questions about the tool's actual functionality and output.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description mentions 'managing Orbit chain validators, batch posters, and AnyTrust DAC keysets' which aligns with the 'target' parameter enum values, but adds no additional semantic context beyond what's already in the well-documented schema.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'Generate code for managing Orbit chain validators, batch posters, and AnyTrust DAC keysets.' It specifies the verb ('generate code') and resources (validators, batch posters, keysets), but doesn't explicitly differentiate from sibling tools like 'generate_orbit_config' or 'generate_orbit_deployment' that might also generate Orbit-related code.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools like 'generate_orbit_config', 'generate_orbit_deployment', and 'generate_bridge_code', there's no indication of what distinguishes this code generation tool from those others or when it should be selected.

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

get_stylus_contextA

Retrieve relevant Stylus documentation and code examples from the knowledge base. Use this to find examples, patterns, and documentation for Stylus development. Supports version-aware search to prioritize results matching your SDK version.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (concept, function name, or code pattern). Include specific technical terms for best results.
n_resultsNoNumber of results to return (1-20, default: 5)
content_typeNoFilter by content type (default: all)all
rerankNoWhether to apply advanced reranking with BM25 and metadata boosting (default: true, recommended)
target_versionNoTarget stylus-sdk version to prioritize results for. Results matching this version are boosted.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about version-aware search and prioritization of results, but does not cover aspects like rate limits, authentication needs, error handling, or the format of returned results. This leaves gaps for an agent to understand operational constraints.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by additional context in a second sentence. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.

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

Completeness3/5

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

Given the tool's complexity (5 parameters, no annotations, no output schema), the description is adequate but incomplete. It covers the purpose and some behavioral context, but lacks details on output format, error cases, or performance characteristics, which could hinder an agent's ability to use it effectively without trial and error.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description implies search functionality and version prioritization, but does not add specific meaning beyond what the schema provides, such as explaining how 'target_version' interacts with 'query' or detailing the 'rerank' algorithm. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

The description clearly states the verb ('Retrieve') and resource ('Stylus documentation and code examples from the knowledge base'), specifying it's for finding examples, patterns, and documentation for Stylus development. It distinguishes from sibling tools like 'ask_stylus' or 'generate_stylus_code' by focusing on retrieval rather than generation or questioning.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('to find examples, patterns, and documentation for Stylus development') and mentions version-aware search. However, it does not explicitly state when not to use it or name specific alternatives among sibling tools, such as 'ask_stylus' for queries or 'generate_stylus_code' for code generation.

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

get_workflowA

Get structured workflow information for Stylus development. Returns step-by-step commands for build, deploy, test operations. Use this when the user needs guidance on development workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflow_typeYesType of workflow information to retrieve
networkNoTarget network for deploy workflow (default: arbitrum_sepolia)arbitrum_sepolia
include_troubleshootingNoInclude common errors and solutions (default: true)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool returns 'step-by-step commands' but doesn't cover other aspects like whether it's read-only (implied by 'Get'), error handling, rate limits, or authentication needs. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is concise and front-loaded: two sentences that directly state the purpose and usage guidelines without unnecessary details. Every sentence earns its place by providing essential information efficiently.

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

Completeness3/5

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

Given the tool's moderate complexity (3 parameters, 100% schema coverage, no output schema, no annotations), the description is adequate but incomplete. It covers purpose and usage but lacks behavioral details like output format or error handling, which are important for a tool returning workflow guidance. No output schema exists, so the description doesn't need to explain return values, but it could benefit from more context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema, such as explaining the 'workflow_type' enums or 'network' defaults. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get structured workflow information for Stylus development. Returns step-by-step commands for build, deploy, test operations.' It specifies the verb ('Get'), resource ('structured workflow information'), and scope ('Stylus development'), though it doesn't explicitly differentiate from siblings like 'get_stylus_context' or 'orchestrate_dapp'.

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

Usage Guidelines4/5

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

The description provides clear context for usage: 'Use this when the user needs guidance on development workflows.' This indicates when to use the tool, but it doesn't specify when not to use it or name alternatives among siblings, such as 'ask_stylus' for queries or 'generate_stylus_code' for code generation.

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

orchestrate_dappB

Scaffold a template-based dApp monorepo with starter components (contract, backend, frontend, indexer, oracle).

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the dApp to generate
componentsNoComponents to generate (default: contract, backend, frontend)
networkNoTarget networkarbitrumSepolia
backend_frameworkNoBackend framework to usenestjs
contract_typeNoType of smart contractcustom
include_testsNoInclude test files for all components

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral context. It states the tool scaffolds a monorepo but doesn't disclose what 'scaffold' entails (e.g., file creation, directory structure, dependencies), whether it overwrites existing files, requires specific permissions, or handles errors. This leaves significant gaps for a complex generation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every element (verb, resource, components) earns its place, making it easy to parse quickly.

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

Completeness2/5

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

For a complex tool with 6 parameters, no annotations, and no output schema, the description is insufficient. It lacks details on what the tool returns (e.g., file paths, success status), behavioral traits like idempotency or side effects, and integration with sibling tools. This leaves the agent with incomplete operational context.

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

Parameters3/5

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

Schema description coverage is 100%, providing clear documentation for all 6 parameters. The description adds no parameter-specific information beyond implying components are generated, which is already covered by the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('scaffold') and resource ('template-based dApp monorepo'), listing the exact starter components (contract, backend, frontend, indexer, oracle). It distinguishes this tool from siblings like generate_backend or generate_frontend by indicating it creates a complete monorepo with multiple components rather than individual parts.

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

Usage Guidelines3/5

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

The description implies usage for generating a full-stack dApp from templates, but provides no explicit guidance on when to use this tool versus alternatives like generate_backend or generate_frontend for individual components, or orchestrate_orbit for Orbit-specific setups. There's no mention of prerequisites or exclusions.

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

orchestrate_orbitB

Scaffold a complete Orbit chain deployment project with all scripts for chain config, rollup deployment, token bridge, validator management, and node configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescription of the Orbit chain project
chain_nameNoName for the Orbit chainmy-orbit-chain
chain_idNoChain ID for the new Orbit chain
is_anytrustNoWhether to deploy as AnyTrust chain
native_tokenNoCustom gas token address (ERC20)
parent_chainNoParent chain for the Orbit chainarbitrum-sepolia
validatorsNoValidator addresses
batch_postersNoBatch poster addresses

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions scaffolding with scripts but doesn't disclose behavioral traits like whether this creates files locally, requires specific permissions, has side effects, or involves rate limits. The description adds minimal context beyond the basic action.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('scaffold a complete Orbit chain deployment project') and lists included components without unnecessary words. Every part earns its place by specifying scope.

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

Completeness3/5

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

Given the tool's complexity (8 parameters, no annotations, no output schema), the description is adequate but incomplete. It covers the purpose and scope but lacks details on behavioral aspects, output expectations, and usage context, which are needed for a comprehensive understanding.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 8 parameters. The description adds no additional meaning or clarification about parameters beyond what the schema provides, such as how 'prompt' influences scaffolding or interactions between parameters. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('scaffold') and resource ('complete Orbit chain deployment project'), listing all components included (chain config, rollup deployment, token bridge, validator management, node configuration). It distinguishes from siblings like generate_orbit_config or generate_orbit_deployment by emphasizing a comprehensive project setup rather than individual components.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like generate_orbit_config or generate_orbit_deployment is provided. The description implies usage for full project scaffolding but doesn't specify prerequisites, exclusions, or comparative contexts with sibling tools.

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

validate_stylus_codeA

Compile-check Stylus Rust code via cargo check and return structured errors with Stylus-specific fix guidance. Use AFTER generating code to verify correctness. Returns error codes, line numbers, and suggested fixes. Requires Docker.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYeslib.rs source code to validate
cargo_tomlNoCargo.toml content (uses default SDK 0.10.0 template if omitted)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it specifies the validation method ('via cargo check'), output format ('structured errors with Stylus-specific fix guidance'), and a requirement ('Requires Docker'). However, it doesn't mention potential side effects like resource usage or execution time limits.

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

Conciseness5/5

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

The description is efficiently structured in three sentences: first states the core function, second provides usage timing, third describes output and requirement. Every sentence adds essential information with zero wasted words, and key information is front-loaded.

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

Completeness4/5

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

For a validation tool with no annotations and no output schema, the description provides good context about what the tool does, when to use it, and behavioral requirements. However, without an output schema, it could more explicitly describe the return structure (error codes, line numbers, fixes) or error handling for edge cases.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain code format expectations or Cargo.toml template details). This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Compile-check Stylus Rust code via cargo check') and resource ('Stylus Rust code'), distinguishing it from sibling tools like 'generate_stylus_code' (which creates code) and 'get_stylus_context' (which retrieves context). It explicitly mentions the tool's function of returning structured errors with fix guidance.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('Use AFTER generating code to verify correctness'), which clearly differentiates it from code generation siblings. It also implies an alternative (not using it after generation would lead to unverified code), though it doesn't name specific alternative tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 19 tool updatesv1.0.0
    • First observedask_bridging
    • First observedask_orbit
    • First observedask_stylus
    • First observedgenerate_backend
    • First observedgenerate_bridge_code
    • First observedgenerate_frontend
    • First observedgenerate_indexer
    • First observedgenerate_messaging_code
    • First observedgenerate_oracle
    • First observedgenerate_orbit_config
    • First observedgenerate_orbit_deployment
    • First observedgenerate_stylus_code
    • First observedgenerate_tests
    • First observedgenerate_validator_setup
    • First observedget_stylus_context
    • First observedget_workflow
    • First observedorchestrate_dapp
    • First observedorchestrate_orbit
    • First observedvalidate_stylus_code

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlap exists between 'generate_backend' and 'orchestrate_dapp', and between 'ask_orbit' and 'generate_orbit_config'/'generate_orbit_deployment'. The descriptions help clarify, but an agent might occasionally misselect between these closely related tools.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, using snake_case. All tools start with verbs like 'ask_', 'generate_', 'get_', 'orchestrate_', or 'validate_', followed by a clear noun, making them predictable and readable.

Tool Count4/5

With 19 tools, the count is slightly high but reasonable for the broad scope of Arbitrum development support. It covers multiple domains (Stylus, Orbit, bridging, dApps), though it might feel heavy for a single-purpose server.

Completeness5/5

The toolset provides comprehensive coverage for Arbitrum development, including code generation for various components (backend, frontend, contracts, tests), configuration, deployment, validation, and Q&A support. No obvious gaps exist; it supports full CRUD/lifecycle workflows for the domain.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An autonomous AI development agent that enables full-stack coding, automated verification, RAG-powered code search, and quality assurance through MCP tools. Supports Gemini CLI, Claude Code CLI, with features like parallel verification, security scanning, and spec-driven development.
    5
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    250+ AI-powered MCP tools: research, write, code, translate, scrape, sentiment, vision, RAG, agent memory, marketplace, trading signals, and more. 15 models across 7 providers. Pay-per-use via API key or x402 USDC micropayments.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    AI-powered smart contract forge with an 8-agent adversarial security audit system. Generate, audit, fix, and compile Solidity and Anchor/Rust contracts across 8 chains.
    7
    69
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Quantum3-Labs/ARBuilder'

If you have feedback or need assistance with the MCP directory API, please join our Discord server