Production-ready CLI tool for scaffolding A2ABase Agent SDK projects
Project description
A2ABase CLI
Production-ready CLI tool for scaffolding and managing A2ABase Agent SDK projects.
One command to scaffold, develop, and deploy A2ABase AI agents.
The A2ABase CLI helps you quickly create, manage, and run production-grade AI agent projects with built-in tooling, MCP server integration, and deployment workflows.
๐ Quick Start
Installation
pip install a2abase-cli
After installation, the a2abase command is available globally:
a2abase --help
Create Your First Project
# Initialize a new project
a2abase init --name my-agent
# Navigate to project
cd my-agent
# Set up environment (add your API key)
cp .env.example .env
# Edit .env and add: BASEAI_API_KEY=pk_xxx:sk_xxx
# Install dependencies
pip install -e .
# Run in development mode
a2abase dev
That's it! You now have a fully functional A2ABase agent project with:
- โ Pre-configured project structure
- โ Example weather agent with real API integration
- โ MCP server for custom tools
- โ Auto-reload development server
- โ Ngrok integration for remote agent access
๐ Get Your API Key
Before using the CLI, you'll need an A2ABase API key:
- Sign up at A2ABaseAI Dashboard
- Create an API key
- Add it to your project's
.envfile:
BASEAI_API_KEY=pk_xxx:sk_xxx
๐ Commands
Initialize a new project
a2abase init
This will interactively prompt you for:
- Project name
- Package name
- Template (basic, advanced, complex)
- Package manager (uv or pip)
Template Options:
basic: Simple agent with native A2ABase tools only (no MCP server)advanced: Agent with custom tools via MCP server (requires ngrok)complex: Multi-agent system with multiple agents and coordination
๐ Understanding Templates: Basic vs Advanced
Basic Template
The basic template creates a simple agent project that uses only native A2ABase tools - the 50+ built-in tools provided by the A2ABase platform (web search, file operations, browser automation, etc.).
When to use Basic:
- โ You only need A2ABase's built-in tools
- โ You want a simple setup without MCP server complexity
- โ You're prototyping or learning the SDK
- โ You don't need custom integrations
What you get:
- Simple agent structure
- Access to all A2ABase built-in tools
- No MCP server setup required
- No ngrok configuration needed
Advanced Template
The advanced template creates an agent project with custom tools served via an MCP (Model Context Protocol) server. This allows you to create your own tools and integrate with external APIs, databases, or services.
When to use Advanced:
- โ You need custom tools not available in A2ABase's catalog
- โ You want to integrate with your own APIs or services
- โ You need domain-specific functionality
- โ You want to serve tools that can be discovered dynamically
What you get:
- MCP server setup (FastMCP)
- Example weather tool with real API integration
- Custom tool scaffolding
- Ngrok integration for remote agent access
- Complete MCP server implementation
๐ How MCP (Model Context Protocol) Works
MCP (Model Context Protocol) is a standardized protocol that allows AI agents to discover and use tools from external servers. Think of it as a way for your agent to "call" functions that live on your local machine or remote server.
Architecture Overview
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ A2ABase Agent โโโโโโโโโโถโ MCP Server โโโโโโโโโโถโ Your Custom โ
โ (Remote) โ HTTP โ (Local/Remote) โ Python โ Tools โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ
โ โ
โโโโโโโโโโโ Discovers tools โโโโ
via MCP protocol
How It Works
-
MCP Server: Your custom tools run in an MCP server (using FastMCP) that exposes them via HTTP
# Example: tools/weather.py async def get_weather_tool(city: str) -> str: # Your custom logic here return weather_data
-
Tool Registration: Tools are registered with the MCP server using decorators
@mcp.tool() async def get_weather_tool(city: str) -> str: """Get weather for a city.""" return await fetch_weather(city)
-
Agent Connection: Your agent connects to the MCP server using
MCPToolsfrom a2abase.tools import MCPTools custom_tools = MCPTools( endpoint="http://localhost:8000/mcp", # Your MCP server name="custom_tools", allowed_tools=["get_weather_tool"] # Tool names to enable ) await custom_tools.initialize()
-
Tool Discovery: The agent discovers available tools from the MCP server
- The MCP server exposes a list of available tools
- Each tool has a schema (name, description, parameters)
- The agent can call these tools during execution
-
Tool Execution: When the agent needs to use a tool, it makes an HTTP request to your MCP server
- Agent sends:
{"tool": "get_weather_tool", "arguments": {"city": "San Francisco"}} - MCP server executes your Python function
- Returns result back to the agent
- Agent sends:
Why Ngrok is Required
The Challenge:
- A2ABase agents run on remote servers (not on your local machine)
- Your MCP server runs locally on your machine (
localhost:8000) - Remote agents cannot access
localhost- they need a public URL
The Solution:
- Ngrok creates a secure tunnel from the internet to your localhost
- It gives you a public URL like
https://abc123.ngrok.iothat forwards tolocalhost:8000 - Remote agents can now access your local MCP server via the ngrok URL
Example Flow:
1. Start MCP server locally: localhost:8000
2. Ngrok creates tunnel: https://abc123.ngrok.io โ localhost:8000
3. Agent connects to: https://abc123.ngrok.io/mcp
4. Agent discovers tools and can call them
5. Tool execution happens on your local machine
Key Benefits of MCP
- โ Separation of Concerns: Tools run independently from agents
- โ Dynamic Discovery: Agents can discover new tools without code changes
- โ Language Agnostic: MCP servers can be written in any language
- โ Security: Tools run in your controlled environment
- โ Flexibility: Easy to add, remove, or update tools
Example: Adding a Custom Tool
-
Create the tool function (
tools/my_tool.py):async def my_tool(param: str) -> dict: """My custom tool.""" return {"result": f"Processed: {param}"}
-
Register with MCP server (
tools/mcp_server.py):from .my_tool import my_tool @mcp.tool() async def my_tool_mcp(param: str) -> str: """My custom tool description.""" result = await my_tool(param) return json.dumps(result)
-
Use in your agent:
custom_tools = MCPTools( endpoint="https://your-ngrok-url.ngrok.io/mcp", name="custom_tools", allowed_tools=["get_weather_tool", "my_tool_mcp"] # Add your tool )
Options:
--name, -n: Project name (non-interactive)--package, -p: Package name (non-interactive)--template, -t: Template type: basic, advanced, or complex (non-interactive)--pm: Package manager: uv or pip (non-interactive)--install: Install dependencies after creation--force: Overwrite existing files--cwd: Working directory
Add an agent
a2abase add agent <name>
Example:
a2abase add agent research
This creates src/<package>/agents/research_agent.py with a basic agent implementation.
Add a tool
a2abase add tool <name>
Example:
a2abase add tool web_search
This creates src/<package>/tools/web_search.py with a basic tool implementation.
Options:
--from-api: Select from available A2ABase API tools--agent, -a: Associate tool with specific agent--force: Overwrite existing tool file
Select from A2ABase API tools:
a2abase add tool --from-api
This will show an interactive list of available A2ABase built-in tools (50+ tools available).
Run in development mode
a2abase dev
Runs the project with auto-reload on file changes. Automatically starts the MCP server with ngrok tunnel.
โ ๏ธ IMPORTANT: Ngrok is enabled by default because A2ABase agents run on remote servers and require public access to your local MCP server. Your custom tools won't work without ngrok!
Setup (required for remote agents):
# 1. Install ngrok support
pip install pyngrok
# 2. Get free ngrok auth token from https://dashboard.ngrok.com/get-started/your-authtoken
export NGROK_AUTH_TOKEN=your_token_here
# 3. Run dev command (ngrok enabled by default)
a2abase dev
Options:
--watch/--no-watch: Enable/disable auto-reload (default: enabled)--mcp-port: MCP server port (default: 8000)--no-mcp: Don't start MCP server--ngrok/--no-ngrok: Enable/disable ngrok tunnel (default: enabled, required for remote agents)--ngrok-token: Ngrok auth token (or set NGROK_AUTH_TOKEN env var)
The dev command will:
- โ
Start MCP server on
http://localhost:8000/mcp(or custom port) - โ Create ngrok tunnel (enabled by default, required for remote agents)
- โ Display both local and public URLs in a formatted table
- โ Run your agent with auto-reload on file changes
Disable ngrok (only for local testing without remote agents):
a2abase dev --no-ngrok
Run once
a2abase run --input "your prompt here"
Options:
--input, -i: Input text for the agent--json: Output as JSON
Run tests
a2abase test
Options:
--verbose, -v: Verbose output--coverage: Run with coverage
Doctor (validate environment)
a2abase doctor
Checks your environment for:
- โ Python version (3.11+)
- โ Virtual environment
- โ Required dependencies
- โ Project configuration
- โ Write permissions
- โ Package manager availability
Show version
a2abase version
Shows CLI version, SDK version, and Python version.
๐ Project Structure
When you run a2abase init, it creates a production-ready project structure:
<project_name>/
โโโ pyproject.toml # Project configuration
โโโ README.md # Project documentation
โโโ .gitignore # Git ignore rules
โโโ .env.example # Environment variables template
โโโ a2abase.yaml # A2ABase project config
โโโ src/
โ โโโ <package_name>/
โ โโโ __init__.py
โ โโโ main.py # Entrypoint
โ โโโ sdk_adapter.py # SDK adapter (real or stub)
โ โโโ agents/
โ โ โโโ __init__.py
โ โ โโโ weather_agent.py # Example weather agent
โ โโโ tools/
โ โ โโโ __init__.py
โ โ โโโ weather.py # Real weather tool (Open-Meteo API)
โ โ โโโ mcp_server.py # MCP server for custom tools
โ โ โโโ README.md # Tools documentation
โ โโโ registry/
โ โโโ __init__.py
โ โโโ tools.py # Tool registry
โ โโโ card.py # Agent card generator
โโโ vendor/
โ โโโ a2abase_sdk_stub/ # Fallback stub SDK
โ โโโ __init__.py
โ โโโ agent.py
โ โโโ tools.py
โ โโโ runner.py
โโโ tests/
โโโ __init__.py
โโโ test_smoke.py
โจ Generated Project Features
Weather Tool
- ๐ค๏ธ Real weather data using Open-Meteo API
- โ Free - No API key required
- โ Current weather - Temperature, humidity, wind, conditions
- โ Forecast - Up to 16 days of weather forecast
- โ Geocoding - Automatic coordinate lookup for city names
MCP Server
- ๐ง Custom tools - Serve your tools via MCP (Model Context Protocol)
- ๐ Auto-start - Automatically started by
a2abase dev - ๐ Ngrok support - Expose server publicly with
--ngrokflag - ๐ Well-documented - Complete guide in
tools/README.md
Example Agent
- ๐ค Weather Agent - Ready-to-use example with custom weather tool
- ๐ Agent cards - Metadata generation for agent registry
- ๐ Auto-reload - Development mode with file watching
๐ฏ Key Features
- โ Interactive project scaffolding - Create projects with guided prompts
- โ Agent and tool generators - Quickly add new agents and tools
- โ MCP server integration - Serve custom tools to A2ABase agents
- โ Ngrok support - Expose MCP server publicly for remote access
- โ Weather tool example - Real weather API integration (Open-Meteo)
- โ Auto-reload development server - Watch for changes and auto-restart
- โ Environment validation - Doctor command checks your setup
- โ Fallback stub SDK - Projects work without SDK installed
- โ
Idempotent operations - Won't overwrite without
--force - โ Rich terminal UI - Beautiful colors, tables, and formatting
- โ Cross-platform - Works on macOS, Linux, Windows
- โ Python 3.11+ support - Modern Python features
๐ Documentation
- Quick Start Guide - Get started in 5 minutes
- A2ABaseAI SDK Docs - Main SDK documentation
- Python SDK Docs - Python SDK reference
- TypeScript SDK Docs - TypeScript SDK reference
๐ Ngrok Integration (Required for Remote Agents)
Ngrok is enabled by default because A2ABase agents run on remote servers and need public access to your local MCP server. Without ngrok, remote agents cannot access your custom tools.
Why Ngrok is Required
- โ A2ABase agents execute on remote servers (not locally)
- โ Your MCP server runs locally on your machine
- โ Remote agents need a public URL to access your local MCP server
- โ Ngrok creates a secure tunnel from the internet to your local server
Setup
-
Get free ngrok auth token:
-
Install pyngrok:
pip install pyngrok
-
Set environment variable:
export NGROK_AUTH_TOKEN=your_token_here
-
Run dev command (ngrok enabled by default):
a2abase dev
The CLI will display both local and public URLs. Use the public URL in your agent's MCPTools configuration for remote agent access.
โ ๏ธ Security Note: Ngrok exposes your MCP server publicly. Use only for development/testing. For production, deploy your MCP server to a proper hosting service with HTTPS and authentication.
๐ฌ Support
- Run
a2abaseto see available commands - Run
a2abase --helpfor command overview - Run
a2abase <command> --helpfor specific command help - Run
a2abase doctorto validate your environment - Discord: https://discord.gg/qAncfHmYUm
- GitHub Issues: https://github.com/A2ABaseAI/sdks/issues
๐ค Contributing
Contributions are welcome!
- Open an issue to discuss larger changes
- Submit pull requests for bug fixes or new features
- Follow the style and lint rules (uses
ruff)
๐ License
Released under the MIT License.
See LICENSE for full details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file a2abase_cli-0.1.7.tar.gz.
File metadata
- Download URL: a2abase_cli-0.1.7.tar.gz
- Upload date:
- Size: 51.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c15847d3baf0503640823c16dea903a9272139e0a12a349d8cf0e9c0c662fa8d
|
|
| MD5 |
1cb9da725184815c35e55b370f26f92d
|
|
| BLAKE2b-256 |
3e0f6691131cb613aa7d563e9da2d0b23a623701abeaaf50836e3ae5d2506d55
|
File details
Details for the file a2abase_cli-0.1.7-py3-none-any.whl.
File metadata
- Download URL: a2abase_cli-0.1.7-py3-none-any.whl
- Upload date:
- Size: 47.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f8155f8a292b55df3b5d0509364e48fdd407f19e268f0f9a198166a9b93d940
|
|
| MD5 |
be4844d5f3fd779cc4da9de70650f473
|
|
| BLAKE2b-256 |
99e054e1ec1401884a0a4c23cbef1ce34f9772db5dbe0d1f3f30bb650a0bdd7f
|