Bundle of Joy (BoJ) Server is a cartridge-based MCP protocol gateway. Each cartridge (database-mcp, fleet-mcp, nesy-mcp, etc.) is a formally verified Idris2 ABI + Zig FFI + Deno/JS adapter triple. The server exposes REST (port 7700) via Elixir/BEAM with Zig FFI for .so cartridges and a persistent Deno worker pool for JS cartridges. 112 cartridges cover databases, clouds, messaging, CI/CD, git forges, secrets, queues, proofs, and more.
Three-class architecture: Class 1 (simple CLI), Class 2 (orchestrator with webhooks/MQTT), Class 3 (BEAM multiplier for global scale).
| Tool | Minimum Version | Install |
|---|---|---|
Idris2 |
>= 0.7.0 |
|
Zig |
>= 0.15 |
|
just |
>= 1.25 |
|
Rust / Cargo (optional) |
>= 1.80 |
For |
Verify all tools:
just doctorcd ~/Documents/hyperpolymath-repos
git clone https://github.com/hyperpolymath/boj-server.git
cd boj-serverCheck dependencies:
just depsBuild all Zig FFI layers (catalogue + cartridges):
just buildStart the Elixir/BEAM server:
just runThis starts the BEAM application, auto-discovers all 112 cartridges, and launches the Deno worker pool for JS dispatch:
-
REST API on http://localhost:7700
Check health:
curl http://localhost:7700/statusType-check the core ABI and run one FFI test:
just test-smokeFull test suite (Elixir ExUnit — catalog, router, crypto, JS dispatch):
just testBoJ requires zero believe_me in all Idris2 sources. Run the full verification suite:
just verifyThis runs: typecheck → verify-no-believe-me → build → test.
Expose your local BoJ server publicly:
just serveStarts the server + Cloudflare Quick Tunnel (requires cloudflared).
| Port | Protocol | Notes |
|---|---|---|
7700 |
REST (HTTP) |
Primary API, status endpoint |
7701 |
gRPC |
Binary protocol |
7702 |
GraphQL |
Query interface |
src/abi/ Idris2 ABI (Catalogue.idr, Protocol.idr, etc.) ffi/zig/ Zig FFI (catalogue.zig, loader.zig) elixir/ Elixir/BEAM REST server (Catalog, Router, JsWorkerPool) cartridges/ One dir per cartridge (112 total) database-mcp/ Example: Idris2 ABI + Zig FFI + mod.js adapter container/ Stapeln container ecosystem tools/ Cartridge tooling (provisioner, configurator, harness) .machine_readable/ State, policies, contractiles
To run a community node that joins the Umoja seed network:
# Pull the latest image
podman-compose -f container/compose.prod.yaml pull
# Start (daemonised)
podman-compose -f container/compose.prod.yaml up -d
# Check it is live
curl http://localhost:7700/healthThe four continental seed nodes are pre-configured as bootstrap peers:
-
boj-seed-eu.fly.dev:9999— London (EU West) -
boj-seed-de.fly.dev:9999— Frankfurt (EU Central) -
boj-seed-us.fly.dev:9999— Virginia (US East) -
boj-seed-ap.fly.dev:9999— Sydney (Asia-Pacific)
Set BOJ_NODE_ID to give your node a stable identity in the gossip network.
For Podman Quadlet (systemd service), copy
container/boj-community-node.container to
~/.config/containers/systemd/ and run systemctl --user start boj-community-node.
The four canonical seed nodes are declared in container/seed-nodes.toml.