ARBuilder
AI-powered code generator for Arbitrum Stylus, SDK bridging, dApps & Orbit chains β 19 MCP tools with RAG
Ask AI about ARBuilder
Powered by Claude Β· Grounded in docs
I know everything about ARBuilder. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
ARBuilder
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
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
- Project Structure
- Setup
- Quick Start (IDE Integration)
- Usage
- API Access
- MCP Capabilities
- User Guide
- Milestones
- Development
- Troubleshooting
- Contributing
- License
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 β β
β βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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.
- Sign up at https://arbuilder.app and get your API key
- 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
continuemessages for additional file batches and afinalizemessage 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
forkedFromprovenance 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.,
mainfor 0.10.0,v0.9.0for original) - Branch-aware scraping: CF Worker ingests each branch as a separate source entry
- Version-aware generation:
generate_stylus_codeandask_stylusaccepttarget_versionto 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 forprepareChainConfig(),createRollup(),createTokenBridge(),prepareNodeConfig() - Deployment output persisted to
deployment.jsonβ downstream scripts (token bridge, node config) chain automatically - Crash-proof deployment: saves
deployment.jsonBEFORE receipt fetch, with try/catch for block number - Custom gas tokens: generates
approve-token.tswith correct RollupCreator addresses, ERC-20 deploy guidance - Docker:
offchainlabs/nitro-node:v3.9.4-7f582c3, bind mounts (./data/arbitrum), nouser: 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-rootsprevents crash-loops on startup - AnyTrust: BLS keygen via
datool keygenfrom 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 byopenai/gpt-oss-120bvia 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 sourcesGET /api/public/templates- List all code templatesGET /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_SECRETin 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 checkwith 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 checkloop catches and auto-fixes compilation errors - Executable Scripts: Generated
setup.sh,deploy.sh, andstart.shfor one-command workflows - CLI Scaffolding:
setup.shuses 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-proofdeployment.jsonoutput (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-routedsetValidKeyset(), 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-atinjection, 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-m3is 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
- Arbitrum Documentation
- Stylus Documentation
- ICP Coder - Reference implementation
- Stacks Builder - Reference implementation

