Skip to content

Commit bd84259

Browse files
hyperpolymathclaude
andcommitted
docs(outreach): update Show HN post to 96 cartridges; add VPS redeploy script
- show-hn-post.md: 95→96, "V-lang" removed (now unified Zig adapter), QUICKSTART.md→QUICKSTART-USER.adoc, PMPL/MPL-2.0 clarified, date updated - vps-redeploy.sh: one-shot redeploy script (pull→stop→rm→run→health check) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 53f04af commit bd84259

2 files changed

Lines changed: 48 additions & 6 deletions

File tree

docs/outreach/show-hn-post.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
<!-- SPDX-License-Identifier: PMPL-1.0-or-later -->
22
<!-- Show HN submission draft for BoJ Server -->
3-
<!-- Last updated: 2026-04-03 -->
3+
<!-- Last updated: 2026-04-12 -->
44

55
# Show HN Draft
66

7-
**Title:** Show HN: BoJ – One MCP server, 95 formally verified cartridges, zero Python
7+
**Title:** Show HN: BoJ – One MCP server, 96 capability cartridges, zero Python
88

99
---
1010

1111
**Body:**
1212

1313
I had three Claude instances, a Cursor session, and about twenty MCP/LSP/DAP servers running. My desktop froze. That was the moment I realised the problem wasn't any individual server — it was the combinatoric explosion of them.
1414

15-
BoJ (Bundle of Joy) is a single MCP server that covers 95 capability domains through swappable cartridges. Database, containers, git, secrets, queues, IaC, observability, static sites, proofs, fleet management, neurosymbolic AI, agent orchestration, cloud, Kubernetes, LSP, DAP, BSP, feedback, and more. Each cartridge has a formally verified interface (Idris2 dependent types prove the safety gate at compile time), a Zig FFI layer for native execution, and a V-lang adapter that exposes REST + gRPC + GraphQL on three ports. Five safety modules (SafeHTTP, SafePromptInjection, SafeCORS, SafeAPIKey, SafeWebSocket) guard the boundary.
15+
BoJ (Bundle of Joy) is a single MCP server that covers 96 capability domains through swappable cartridges. Database, containers, git, secrets, queues, IaC, observability, static sites, proofs, fleet management, neurosymbolic AI, agent orchestration, cloud, Kubernetes, LSP, DAP, BSP, feedback, and more. Each cartridge has a formally verified interface (Idris2 dependent types prove the safety gate at compile time), a Zig FFI layer for native execution, and a unified adapter that exposes REST + gRPC + GraphQL + SSE on four ports. Five safety modules (SafeHTTP, SafePromptInjection, SafeCORS, SafeAPIKey, SafeWebSocket) guard the boundary.
1616

17-
The architecture is a 2D matrix: protocols on one axis, domains on the other. Instead of N separate servers, you get one catalogue where AI agents read a menu and mount what they need. Federation is built in — community nodes discover each other via QUIC gossip with hash attestation, so you can self-host a node and join the network without any central coordination.
17+
The architecture is a 2D matrix: protocols on one axis, domains on the other. Instead of N separate servers, you get one catalogue where AI agents read a menu and mount what they need. Federation is built in — community nodes discover each other via gossip with hash attestation, so you can self-host a node and join the network without any central coordination.
1818

1919
Install: `deno install -g npm:@hyperpolymath/boj-server` or `brew install hyperpolymath/tap/boj-server`
2020

2121
The whole thing is Alpha — it needs real users doing real things.
2222

2323
Repo: https://github.com/hyperpolymath/boj-server
24-
Quickstart: https://github.com/hyperpolymath/boj-server/blob/main/docs/QUICKSTART.md
24+
Quickstart: https://github.com/hyperpolymath/boj-server/blob/main/QUICKSTART-USER.adoc
2525

26-
This is a community project. I make nothing from it. The code is PMPL-licensed. I built this to learn from it, and I learn most from other people using it.
26+
This is a community project. I make nothing from it. The code is PMPL-licensed (MPL-2.0 fallback). I built this to learn from it, and I learn most from other people using it.

docs/outreach/vps-redeploy.sh

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env bash
2+
# SPDX-License-Identifier: PMPL-1.0-or-later
3+
# VPS redeploy script — run locally after `podman push ghcr.io/hyperpolymath/boj-server:latest`
4+
# Usage: bash docs/outreach/vps-redeploy.sh
5+
set -euo pipefail
6+
7+
VPS="root@209.42.26.106"
8+
IMAGE="ghcr.io/hyperpolymath/boj-server:latest"
9+
10+
echo "==> Redeploying boj-server on $VPS"
11+
12+
ssh "$VPS" bash -s <<EOF
13+
set -euo pipefail
14+
15+
echo "Pulling latest image..."
16+
podman pull $IMAGE
17+
18+
echo "Stopping old container..."
19+
podman stop boj-server 2>/dev/null || true
20+
podman rm boj-server 2>/dev/null || true
21+
22+
echo "Starting new container..."
23+
podman run -d --name boj-server \
24+
--restart=always \
25+
-p 7700:7700 -p 7701:7701 -p 7702:7702 -p 7703:7703 \
26+
-v boj-server-data:/data \
27+
$IMAGE
28+
29+
echo "Waiting for health check..."
30+
sleep 5
31+
curl -sf http://localhost:7700/health && echo "Health: OK"
32+
33+
echo "Cartridge count:"
34+
curl -sf http://localhost:7700/menu | python3 -c "
35+
import sys, json
36+
data = json.load(sys.stdin)
37+
carts = data.get('cartridges', data.get('servers', []))
38+
print(f' {len(carts)} cartridges loaded')
39+
" 2>/dev/null || curl -sf http://localhost:7700/menu | head -5
40+
41+
echo "Done."
42+
EOF

0 commit comments

Comments
 (0)