Agentic Phased Array Builder — LLM-driven phased-array antenna design via MCP tools
Project description
APAB — Agentic Phased Array Builder
LLM-driven phased-array antenna design and analysis via MCP tools.
APAB connects an LLM agent to engineering tools for phased-array antenna design: full-wave unit-cell simulation with mutual coupling (over frequency, scan angle, polarization) propagated into array-level patterns and system-level metrics.
Features
- 17 MCP tools — unit-cell simulation (EdgeFEM), array patterns, system-level trades, import/export, plotting
- Agent orchestrator — natural-language design sessions with automatic tool dispatch
- Full pipeline — unit cell → coupling → pattern → system metrics in one run
- Trade studies — DOE sampling with Pareto extraction for multi-objective optimization
- Offline-first — default Ollama provider runs fully local; remote providers opt-in
- Extensible — plugin entry points for LLM providers, EM adapters, and compute backends
Installation
Requires Python 3.10+.
# Clone and install
git clone https://github.com/jman4162/agentic-phased-array-builder.git
cd agentic-phased-array-builder
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,ollama]"
# For the default LLM provider (Ollama):
# Install from https://ollama.ai, then:
ollama pull qwen2.5-coder:14b
Quick Start — CLI
# 1. Initialize a project
apab init --name my_array --dir ./my_project
# 2. Edit apab.yaml to define your array (see Configuration below)
# 3. Run non-interactively from config
apab run --config apab.yaml
# 4. Or run an interactive agent session
apab design --config apab.yaml
# 5. Generate a report
apab report <run_id> --config apab.yaml
# 6. Run as MCP server (for Claude Desktop, etc.)
apab mcp serve --config apab.yaml
Quick Start — Python API
from apab.core.schemas import ArraySpec, ScanPoint
from apab.pattern.wrappers_pam import PAMPatternEngine
spec = ArraySpec(
size=[8, 8],
spacing_m=[0.005, 0.005],
taper="uniform",
steer=ScanPoint(theta_deg=15, phi_deg=0),
)
engine = PAMPatternEngine()
result = engine.full_pattern(spec, freq_hz=28e9, theta0=0, phi0=0)
print(f"Directivity: {result.directivity_dbi:.2f} dBi")
print(f"Sidelobe level: {result.sidelobe_level_db:.2f} dB")
See examples/ for more: coupling analysis, trade studies, agent sessions, and Touchstone import.
Configuration
Edit apab.yaml to configure your project:
project:
name: my_array
workspace: ./workspace
llm:
provider: ollama
model: qwen2.5-coder:14b
base_url: http://localhost:11434
unit_cell:
period_x_mm: 5.0
period_y_mm: 5.0
substrate_height_mm: 0.254
substrate_eps_r: 2.2
patch_length_mm: 3.0
patch_width_mm: 3.8
sweep:
freq_start_ghz: 27.0
freq_stop_ghz: 29.0
freq_points: 5
theta_max_deg: 60
theta_points: 7
phi_points: 5
array:
size: [8, 8]
spacing_m: [0.005, 0.005]
taper: taylor
steer:
theta_deg: 0
phi_deg: 0
Architecture
┌─────────────────────────────────────────────────┐
│ Agent Orchestrator (LLM ↔ tool-calling loop) │
├─────────────────────────────────────────────────┤
│ MCP Tool Layer (17 tools via FastMCP) │
├─────────────────────────────────────────────────┤
│ Domain Wrappers (PAM, PAS, EdgeFEM, importers) │
├─────────────────────────────────────────────────┤
│ External Libraries (edgefem, phased-array-*) │
└─────────────────────────────────────────────────┘
| Layer | Directory | Purpose |
|---|---|---|
| Agent | src/apab/agent/ |
LLM providers, tool dispatch, orchestration |
| MCP | src/apab/mcp/ |
First-party MCP server with 17 tools |
| Wrappers | src/apab/pattern/, system/, coupling/ |
Domain logic bridging tools to libraries |
| Core | src/apab/core/ |
Config, schemas, workspace management |
Available MCP Tools
| Tool | Description |
|---|---|
edgefem_run_unit_cell |
Run EdgeFEM unit-cell frequency sweep |
edgefem_surface_impedance |
Compute surface impedance at a frequency |
edgefem_export_touchstone |
Export S-params to Touchstone file |
pattern_compute |
Compute full 2-D array radiation pattern |
pattern_plot_cuts |
Generate E/H-plane pattern cut plots |
pattern_plot_3d |
Generate 3-D pattern visualization |
pattern_multi_beam |
Compute multi-beam pattern |
pattern_null_steer |
Compute pattern with null steering |
system_evaluate |
Evaluate comms/radar link metrics |
system_trade_study |
Run DOE trade study with Pareto extraction |
project_init |
Initialize project scaffold |
project_validate |
Validate apab.yaml configuration |
io_import_touchstone |
Import Touchstone S-parameter file |
io_save_hdf5 |
Save data to run artifact directory |
plot_quicklook |
Generate quick-look summary plot |
emtool_list_adapters |
List external EM tool adapters |
emtool_import_results |
Import results from external EM tools |
Development
# Run all tests
pytest tests/ -v
# Linting and type checking
ruff check src/ tests/
mypy src/apab/
# Run examples
python examples/01_simple_patch_28ghz.py
License
See SPEC.md for the full specification and CHANGELOG.md for release history.
Project details
Release history Release notifications | RSS feed
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 apab-0.2.0.tar.gz.
File metadata
- Download URL: apab-0.2.0.tar.gz
- Upload date:
- Size: 72.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f616c7c974429eb48e6590a4760be61c3df92dde5ddd7994c3a1cc0045f69df8
|
|
| MD5 |
582ce03a22e2bc2afe304b9022dceae0
|
|
| BLAKE2b-256 |
7f4ecaa2120962c870b7d7a402909ed65415b0dc13b79500962811fd6f14f7b5
|
File details
Details for the file apab-0.2.0-py3-none-any.whl.
File metadata
- Download URL: apab-0.2.0-py3-none-any.whl
- Upload date:
- Size: 60.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5310304b0857cd7b10b0eb06e1ca37eaacac9a1b13ce13ce9c44fa1d369cf4a0
|
|
| MD5 |
22d31073b5c322ebdf2af3ddd5d0deaf
|
|
| BLAKE2b-256 |
10e320e053b21bfd0101f1d8b511da114fa9cb90c26bdc5fa85e264836184bba
|