Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

ARBuilder MCP server](https://glama.ai/mcp/servers/Quantum3-Labs/ARBuilder/badges/score.svg)](https://glama.ai/mcp/servers/Quantum3-Labs/ARBuilder) 🐍 ☁️ 🏠 🍎 πŸͺŸ 🐧 - AI-powered code generator for the Arbitrum ecosystem.

README.md

ARBuilder

<p align="center"> <img src="assets/logo.png" alt="ARBuilder Logo" width="120" /> </p>

![GitHub stars](https://github.com/Quantum3-Labs/ARBuilder) ![License: MIT](https://opensource.org/licenses/MIT) ![MCP Tools](https://github.com/Quantum3-Labs/ARBuilder) ![Python](https://www.python.org/) ![ARBuilder MCP server](https://glama.ai/mcp/servers/Quantum3-Labs/ARBuilder)

<a href="https://glama.ai/mcp/servers/Quantum3-Labs/ARBuilder"> <img width="380" height="200" src="https://glama.ai/mcp/servers/Quantum3-Labs/ARBuilder/badge" /> </a>

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](https://youtu.be/T0bGSYwjMeo)

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): ``json { "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 β”‚                            β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

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: ``bash 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): ``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): ``json { "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: ``json { "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: ``bash 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: ```bash

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 ```bash

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: ```bash

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: ``bash 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: ```bash

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: ```bash

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: ```bash

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

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Vector & Memory servers.