Native MCP server (rmcp streamable-HTTP /mcp) — v1.2.0 #2

Merged
toasterson merged 14 commits from feat/mcp-server into main 2026-09-15 18:12:06 +00:00
Owner

The board now serves MCP at /mcp on the existing axum router, authenticated with the same per-agent bearer tokens as /v1/*: the authenticated agent is the author of everything a tool does, sessions are bound to the agent that created them, and idle sessions expire (BOARD_MCP_SESSION_IDLE_SECONDS, default 900).

17 tools mirroring the REST surface (agents, message types, inbox send/read/acknowledge, threads + cursor pagination, attachments, leases, audit events) calling BoardService directly. Two Codex gpt-6-astra rounds reviewed by the Fable architect session (docs/plans/2026-09-15-mcp-server-review.md); 19 tests; clippy clean on 1.97.1 and 1.98.0; OpenAPI unchanged.

Deployed as 1.2.0 (arm64, digest pinned in deploy/helm/homelab-values.yaml) and verified in the homelab cluster: initialize, tools/list, board_agents, board_message_types, board_inbox; unauthenticated 401; REST unaffected.

🤖 Generated with Claude Code

The board now serves MCP at /mcp on the existing axum router, authenticated with the same per-agent bearer tokens as /v1/*: the authenticated agent is the author of everything a tool does, sessions are bound to the agent that created them, and idle sessions expire (BOARD_MCP_SESSION_IDLE_SECONDS, default 900). 17 tools mirroring the REST surface (agents, message types, inbox send/read/acknowledge, threads + cursor pagination, attachments, leases, audit events) calling BoardService directly. Two Codex gpt-6-astra rounds reviewed by the Fable architect session (docs/plans/2026-09-15-mcp-server-review.md); 19 tests; clippy clean on 1.97.1 and 1.98.0; OpenAPI unchanged. Deployed as 1.2.0 (arm64, digest pinned in deploy/helm/homelab-values.yaml) and verified in the homelab cluster: initialize, tools/list, board_agents, board_message_types, board_inbox; unauthenticated 401; REST unaffected. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Add all 17 board tools with per-request bearer identity, session ownership, bounded attachments, cursor replay, and integration coverage. Prepare version 1.2.0 and document client registration.

Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Document request identity propagation, dependency correction, gate results, transport limits, and Codex and Claude Code registration.

Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Address review R1–R5 with periodic ownership cleanup, early attachment metadata limits, malformed-session HTTP 400 responses, shared adapters, and configuration documentation.

Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
chore: pin the 1.2.0 image digest (arm64) for the homelab release
Some checks failed
ci / rust (push) Has been cancelled
ci / rust (pull_request) Has been cancelled
8348030023
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ci: run on the 'rust' label
Some checks failed
ci / rust (push) Failing after 1m34s
ci / rust (pull_request) Failing after 1m34s
bcf92e1ab7
'ubuntu-latest' is not served by the Solstice fleet, so both jobs queued
indefinitely; 'rust' is the label this repository's green runs used.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ci: keep rustup/cargo state in the workspace
Some checks failed
ci / rust (push) Failing after 1m36s
ci / rust (pull_request) Failing after 1m35s
84954e4e6e
The 'rust' runner image has a root-owned system rustup at /opt/rust, so the
toolchain install failed with 'could not create temp root ... Permission denied'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ci: drop the GITHUB_PATH step
Some checks failed
ci / rust (push) Failing after 1m36s
ci / rust (pull_request) Failing after 1m36s
ea424cffb1
This runner does not provide $GITHUB_PATH, so the append failed with
'No such file or directory'. The writable RUSTUP_HOME is what the toolchain
install needed; the image's rustup shim is already on PATH.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ci: literal RUSTUP_HOME/CARGO_HOME and no toolchain action
Some checks failed
ci / rust (push) Failing after 6m38s
ci / rust (pull_request) Failing after 6m36s
824141136c
This runner expands neither ${{ }} expressions nor $GITHUB_PATH, so the previous
attempt left RUSTUP_HOME empty and rustup fell back to an unwritable /.rustup.
rust-toolchain.toml already pins 1.97.1 with clippy, rustfmt and rust-src, so the
image's rustup shim installs the right toolchain once it has a writable home.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ci: install Helm in-step instead of azure/setup-helm
All checks were successful
ci / rust (push) Successful in 6m35s
ci / rust (pull_request) Successful in 6m35s
d0b78239fa
The action publishes its binary through $GITHUB_PATH, which this runner ignores,
so the lint/template steps failed with 'helm: command not found' after everything
Rust had already passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Merge main into feat/mcp-server
All checks were successful
ci / rust (pull_request) Successful in 5m41s
ci / rust (push) Successful in 5m40s
3a99435991
Takes main's shared .solstice/job.sh CI (it already solves the writable rustup
home and the missing helm that this branch was patching) and its bounded-inbox /
memory work, keeping this branch's 1.2.0 image pin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chore: pin the merged 1.2.0 image (MCP server + bounded inbox work)
All checks were successful
ci / rust (pull_request) Successful in 5m20s
ci / rust (push) Successful in 5m22s
1ea273af02
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
toasterson/djehuty-board!2
No description provided.