Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions EXPLAINME.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ This is the Model-Controller-Processor pattern: cartridges are pluggable service

**Location**: `elixir/lib/boj_rest/catalog.ex` (Elixir GenServer cartridge discovery and initialization)

**How verified**: `BojRest.Catalog` scans `cartridges/*/cartridge.json` at startup, reads tool schemas from each, and stores them in an ETS table. It validates `name`, `version`, `tools` required fields and prevents duplicate names. 112 cartridges are auto-discovered. This enables the "unified endpoint" claim: a single REST server exposes the union of all cartridges' tools without hardcoding each one.
**How verified**: `BojRest.Catalog` scans `cartridges/*/cartridge.json` at startup, reads tool schemas from each, and stores them in an ETS table. It validates `name`, `version`, `tools` required fields and prevents duplicate names. 115 cartridges are auto-discovered. This enables the "unified endpoint" claim: a single REST server exposes the union of all cartridges' tools without hardcoding each one.

**Caveat**: Auto-discovery is runtime dynamic; there is no compile-time verification that all cartridge schemas are valid JSON Schema. A malformed `cartridge.json` is silently skipped at startup. The authoritative manifest format is Nickel (closed decision `boj-cartridge-manifest-format-dd.md`); migration from JSON is future work.

Expand All @@ -41,15 +41,15 @@ This is the Model-Controller-Processor pattern: cartridges are pluggable service
| gossamer, burble, ephapax, hypatia, verisimdb, typed-wasm — universal ABI/FFI pattern across the estate

| *Pluggable cartridge architecture*
| 112 cartridge directories (`cartridges/*/`), each with `abi/`, `ffi/`, `mod.js` structure; auto-discovered at startup via manifest scan
| 115 cartridge directories (`cartridges/*/`), each with `abi/`, `ffi/`, `mod.js` structure; auto-discovered at startup via manifest scan
| echidna (prover orchestration as cartridges), hypatia (rule composition), gitbot-fleet (bot cartridges per service)

| *PanLL ReScript workspace layer*
| `panll/` — ReScript/TEA panel framework, autowiring constraint solver, 108 panels for UI
| idaptik (game UI panels), gossamer-powered SPAs, PanLL monorepo panels estate-wide

| *panic-attack security gate*
| Pre-commit `panic-attack assail` enforces PA001-PA025 across all 112 cartridges; security module tests cover injection, unicode bypass, SSRF
| Pre-commit `panic-attack assail` enforces PA001-PA025 across all 115 cartridges; security module tests cover injection, unicode bypass, SSRF
| Every RSR repo in the estate; panicbot wraps it in CI

| *Elixir/BEAM + Deno runtime*
Expand All @@ -69,7 +69,7 @@ This is the Model-Controller-Processor pattern: cartridges are pluggable service
| `elixir/lib/boj_rest/js_worker.ex` | GenServer wrapping a single Deno port; newline-delimited JSON protocol
| `elixir/lib/boj_rest/node_key.ex` | X25519 keypair persistence; ChaCha20-Poly1305 credential decryption
| `elixir/priv/js_pool_worker.js` | Deno-side pool worker; module cache, env isolation per request
| `cartridges/*/` | 112 cartridge directories, each with abi/, ffi/, mod.js structure
| `cartridges/*/` | 115 cartridge directories, each with abi/, ffi/, mod.js structure
| `src/abi/Boj/` | Idris2 ABI definitions (Protocol, Domain, Catalogue, Safety, etc.)
| `panll/` | ReScript/TEA panel framework for UI workspace layer
|===
Expand Down
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import? "contractile.just"

# Project metadata — customize these
project := "Bundle of Joy Server"
version := "0.3.1"
version := "0.4.6"
tier := "infrastructure" # 1 | 2 | infrastructure

# ═══════════════════════════════════════════════════════════════════════════════
Expand Down
17 changes: 12 additions & 5 deletions QUICKSTART-USER.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ toc::[]

== What is BoJ Server?

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.
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. 115 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).

Expand Down Expand Up @@ -76,7 +76,7 @@ Start the Elixir/BEAM server:
just run
----

This starts the BEAM application, auto-discovers all 112 cartridges, and launches the Deno worker pool for JS dispatch:
This starts the BEAM application, auto-discovers all 115 cartridges, and launches the Deno worker pool for JS dispatch:

- REST API on http://localhost:7700

Expand Down Expand Up @@ -142,17 +142,24 @@ Starts the server + Cloudflare Quick Tunnel (requires `cloudflared`).

| 7700
| REST (HTTP)
| Primary API, status endpoint
| Primary API, status endpoint — implemented in `elixir/lib/boj_rest/router.ex`

| 7701
| gRPC
| Binary protocol
| Planned (binary protocol). The `Boj.Protocol` ABI enum lists `GRPC` but no `.proto` files exist and no gRPC server is wired into the BEAM application yet.

| 7702
| GraphQL
| Query interface
| Planned (query interface). Not present in the `Boj.Protocol` ABI enum and no schema or Absinthe server is wired into the BEAM application yet.
|===

[NOTE]
====
Only the REST surface on port 7700 is currently implemented. The gRPC and
GraphQL rows above are forward-looking; until they ship, only `7700` will
actually accept connections.
====

== Guided Tour

[source,bash]
Expand Down
4 changes: 2 additions & 2 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ image:https://img.shields.io/badge/License-PMPL--1.0-blue.svg[License: PMPL-1.0,
image:https://glama.ai/mcp/servers/hyperpolymath/boj-server/badge[Glama MCP Server,link=https://glama.ai/mcp/servers/hyperpolymath/boj-server]
image:https://api.thegreenwebfoundation.org/greencheckimage/boj-server.net[Green Hosting,link="https://www.thegreenwebfoundation.org/green-web-check/?url=boj-server.net"]

BoJ (Bundle of Joy) is a unified MCP server that consolidates all hyperpolymath tooling into a single endpoint — GitHub, GitLab, Cloudflare, Vercel, Verpex, Gmail, Calendar, browser automation, research, ML, and 106+ open-source cartridges.
BoJ (Bundle of Joy) is a unified MCP server that consolidates all hyperpolymath tooling into a single endpoint — GitHub, GitLab, Cloudflare, Vercel, Verpex, Gmail, Calendar, browser automation, research, ML, and 115 open-source cartridges.

== Install

Expand Down Expand Up @@ -43,7 +43,7 @@ Glama listing: https://glama.ai/mcp/servers/hyperpolymath/boj-server
* *Research* — Semantic Scholar papers, citations, authors
* *ML* — Hugging Face model / dataset / inference
* *Local coordination* — `local-coord-mcp` (24 tools): multi-instance AI peer discovery, typed envelopes, claim/heartbeat/watchdog, quarantine + master/journeyman/apprentice supervision, track-record affinity, capability advertisement
* *Cartridges* — 100 pluggable cartridges across Teranga / Shield / Ayo trust tiers
* *Cartridges* — 115 pluggable cartridges across Teranga / Shield / Ayo trust tiers

== Local-coord-mcp at a glance

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[![Glama MCP Server](https://glama.ai/mcp/servers/hyperpolymath/boj-server/badge)](https://glama.ai/mcp/servers/hyperpolymath/boj-server)
[![Green Hosting](https://api.thegreenwebfoundation.org/greencheckimage/boj-server.net)](https://www.thegreenwebfoundation.org/green-web-check/?url=boj-server.net)

BoJ (Bundle of Joy) is a unified MCP server that consolidates all hyperpolymath tooling into a single endpoint — GitHub, GitLab, Cloudflare, Vercel, Verpex, Gmail, Calendar, browser automation, research, ML, and 50+ open-source cartridges.
BoJ (Bundle of Joy) is a unified MCP server that consolidates all hyperpolymath tooling into a single endpoint — GitHub, GitLab, Cloudflare, Vercel, Verpex, Gmail, Calendar, browser automation, research, ML, and 115 open-source cartridges.

## Install

Expand Down Expand Up @@ -35,7 +35,7 @@ Glama listing: <https://glama.ai/mcp/servers/hyperpolymath/boj-server>
- **Research** — Semantic Scholar papers, citations, authors
- **ML** — Hugging Face model / dataset / inference
- **Local coordination** — `local-coord-mcp` (24 tools): multi-instance AI peer discovery, typed envelopes, claim/heartbeat/watchdog, quarantine + master/journeyman/apprentice supervision, track-record affinity, capability advertisement
- **Cartridges** — 100 pluggable cartridges across Teranga / Shield / Ayo trust tiers
- **Cartridges** — 115 pluggable cartridges across Teranga / Shield / Ayo trust tiers

## Local-coord-mcp at a glance

Expand Down
4 changes: 2 additions & 2 deletions ai-plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"schema_version": "v1",
"name_for_human": "Bundle of Joy Server",
"name_for_model": "boj_server",
"description_for_human": "Cartridge-based DevOps toolkit with 55 formally verified domain cartridges spanning database, cloud, git, Kubernetes, containers, observability, secrets, IaC, ML, browser automation, communications, and research.",
"description_for_model": "A cartridge-based MCP server exposing 55 DevOps domain cartridges via a unified REST API. Each cartridge has a formally verified Idris2 ABI, Zig FFI bridge, and V-lang adapter. Domains include: database (VeriSimDB, PostgreSQL, Redis, DuckDB, MongoDB, Neo4j, ClickHouse, Turso, Supabase, Neon, ArangoDB), cloud providers (AWS, GCP, Cloudflare, Vercel, Verpex, DigitalOcean, Hetzner, Fly.io, Railway, Render, Linode), git forges (GitHub, GitLab), Kubernetes, containers, observability, secrets/vault, IaC, ML/AI (HuggingFace), browser automation (Firefox), communications (Gmail, Calendar), queues, SSG, research (academic papers), and language tooling. Use boj_menu to discover available cartridges, boj_cartridge_info to inspect a cartridge, and boj_cartridge_invoke to call operations.",
"description_for_human": "Cartridge-based DevOps toolkit with 115 formally verified domain cartridges spanning database, cloud, git, Kubernetes, containers, observability, secrets, IaC, ML, browser automation, communications, and research.",
"description_for_model": "A cartridge-based MCP server exposing 115 DevOps domain cartridges via a unified REST API. Each cartridge has a formally verified Idris2 ABI, Zig FFI bridge, and Deno/JS adapter. Domains include: database (VeriSimDB, PostgreSQL, Redis, DuckDB, MongoDB, Neo4j, ClickHouse, Turso, Supabase, Neon, ArangoDB), cloud providers (AWS, GCP, Cloudflare, Vercel, Verpex, DigitalOcean, Hetzner, Fly.io, Railway, Render, Linode), git forges (GitHub, GitLab), Kubernetes, containers, observability, secrets/vault, IaC, ML/AI (HuggingFace), browser automation (Firefox), communications (Gmail, Calendar), queues, SSG, research (academic papers), and language tooling. Use boj_menu to discover available cartridges, boj_cartridge_info to inspect a cartridge, and boj_cartridge_invoke to call operations.",
"auth": {
"type": "none"
},
Expand Down
2 changes: 1 addition & 1 deletion docs/glama/CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
- **gRPC**: gRPC support for high-performance clients

### Cartridge System
- **106 Cartridges**: Covering databases, git, cloud, comms, ML, browser, and more
- **115 Cartridges**: Covering databases, git, cloud, comms, ML, browser, and more
- **1041 Tools**: Specialized operations across all domains
- **Hot-Reloading**: Add/remove cartridges without restarting
- **Isolation**: Each cartridge runs in its own sandbox
Expand Down
2 changes: 1 addition & 1 deletion docs/glama/RESOURCES.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Factual statements about entities with temporal validity.
{
"id": "obs_456",
"entity_id": "ent_123",
"content": "BoJ Server supports 106 cartridges",
"content": "BoJ Server supports 115 cartridges",
"source": "documentation",
"valid_from": "2026-01-01T00:00:00Z",
"valid_to": null,
Expand Down
2 changes: 1 addition & 1 deletion docs/specification/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ openapi: 3.1.0

info:
title: BoJ Server REST API
version: 0.3.0
version: 0.4.6
summary: Formally verified cartridge server for cloud infrastructure, databases, git, containers, and more.
description: |
BoJ (Bundle of Joy) Server is a cartridge-based infrastructure management
Expand Down
2 changes: 1 addition & 1 deletion gemini-extension.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "boj-server",
"version": "0.4.0",
"version": "0.4.6",
"description": "Unified Gemini extension for the BoJ (Bundle of Joy) Server infrastructure.",
"author": "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
"mcpServers": {
Expand Down
6 changes: 3 additions & 3 deletions llm-warmup-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ elixir/ Elixir/BEAM REST server
test/ 50 ExUnit tests (catalog, router, crypto, JS dispatch)
config/ config.exs / test.exs

cartridges/ 112 cartridge directories
cartridges/ 115 cartridge directories
database-mcp/ Example cartridge
abi/database-mcp.ipkg Idris2 ABI
abi/Database/Mcp.idr Idris2 source
Expand Down Expand Up @@ -113,7 +113,7 @@ panll/src/ PanLL panel (ReScript/TEA)
```bash
just build # Build all Zig FFI layers (catalogue + cartridges)
just build-release # Optimized build (-Doptimize=ReleaseFast)
just run # Start Elixir/BEAM server (REST 7700, auto-discovers 112 cartridges)
just run # Start Elixir/BEAM server (REST 7700, auto-discovers 115 cartridges)
just serve # Server + Cloudflare tunnel
just test # Elixir ExUnit test suite (mix test)
just test-smoke # Quick: typecheck core ABI + ExUnit smoke
Expand Down Expand Up @@ -204,7 +204,7 @@ POST /cartridge/{name}/invoke: { "tool": "...", "args": {...}, "credential_envel

## Cartridge Matrix

112 cartridges organized in a 2D matrix (Protocol x Domain).
115 cartridges organized in a 2D matrix (Protocol x Domain).
Each has: `abi/` (Idris2), `ffi/` (Zig), `mod.js` (Deno adapter).
View status: `just matrix`

Expand Down
2 changes: 1 addition & 1 deletion llm-warmup-user.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ and many more.
| `ffi/zig/src/catalogue.zig` | Mount/unmount operations |
| `ffi/zig/src/boj_invoke_main.zig` | boj-invoke CLI (dlopen dispatch) |
| `elixir/lib/boj_rest/` | Elixir REST server (Catalog, Router, JsWorkerPool) |
| `cartridges/` | 112 cartridge directories |
| `cartridges/` | 115 cartridge directories |

## Invariants

Expand Down
4 changes: 2 additions & 2 deletions openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ openapi: "3.1.0"
info:
title: Bundle of Joy Server API
description: |
Cartridge-based DevOps toolkit with 106 formally verified domain cartridges.
Cartridge-based DevOps toolkit with 115 formally verified domain cartridges.
Each cartridge has an Idris2 ABI (dependent type proofs), Zig FFI bridge,
and HTTP adapter. The REST API at port 7700 provides discovery,
inspection, and invocation of all cartridges.
version: "0.4.0"
version: "0.4.6"
contact:
name: Jonathan D.A. Jewell
email: j.d.a.jewell@open.ac.uk
Expand Down
6 changes: 3 additions & 3 deletions smithery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
# https://smithery.ai

name: boj-server
description: "Bundle of Joy — cartridge-based MCP server with 53 formally verified domain cartridges (database, cloud, git, k8s, containers, observability, secrets, IaC, and more)"
version: "0.4.0"
description: "Bundle of Joy — cartridge-based MCP server with 115 formally verified domain cartridges (database, cloud, git, k8s, containers, observability, secrets, IaC, and more)"
version: "0.4.6"
author: "Jonathan D.A. Jewell"
license: "PMPL-1.0-or-later"
homepage: "https://github.com/hyperpolymath/boj-server"
Expand All @@ -33,7 +33,7 @@ tools:
- name: boj_health
description: "Check BoJ server health status"
- name: boj_menu
description: "List all 53 cartridges with domains, protocols, and tiers"
description: "List all 115 cartridges with domains, protocols, and tiers"
- name: boj_cartridges
description: "Show the cartridge matrix — protocol x domain grid"
- name: boj_cartridge_info
Expand Down
2 changes: 1 addition & 1 deletion stapeln.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[metadata]
name = "boj-server"
version = "0.3.1"
version = "0.4.6"
description = "Bundle of Joy Server — unified MCP capability catalogue with formally verified Zig/Idris2 cartridges"
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>"
license = "PMPL-1.0-or-later"
Expand Down
Loading