Skip to content

M9: machine interface — stdio MCP server, pinned Dockerfile, creator-facing README (+ CI sfizz build)#3

Merged
jamiesun merged 2 commits into
mainfrom
codex/fix-ci-sfizz-build
Jul 18, 2026
Merged

M9: machine interface — stdio MCP server, pinned Dockerfile, creator-facing README (+ CI sfizz build)#3
jamiesun merged 2 commits into
mainfrom
codex/fix-ci-sfizz-build

Conversation

@jamiesun

@jamiesun jamiesun commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Outcome of the 2026-07 embedded-server audit: instead of a resident HTTP/API server, the third-party integration story ships as three thin artifacts, plus the CI sfizz fix this branch started with.

scorekit mcp — stdio MCP server (src/mcp.rs)

  • Newline-delimited JSON-RPC 2.0 over stdin/stdout; exposes doctor, validate, schema, lint, build, diff as MCP tools.
  • Pure protocol adapter: every tool call re-invokes the scorekit binary with --json; structured errors (code/field/exit_code) are passed through verbatim as isError: true results.
  • Zero HTTP, zero auth, zero resident state — determinism and the "CLI is the machine interface" stance untouched.

Pinned deployment image (Dockerfile, .dockerignore)

  • Multi-stage build (cargo build --locked → bookworm-slim), pinning FluidSynth 2.3.x, FFmpeg 5.1.x, and the SHA-256-verified MuseScore General SoundFont via the existing fetch script.
  • scorekit doctor self-check at image build time; entrypoint is the CLI. HTTP gateways stay outside the image, owned by deployers.
  • Verified: container build forest.yaml produces a seamless loop; docker run -i scorekit mcp completes the MCP handshake.

Docs

  • New docs-site page Machine Interface: semver-stable contract (exit codes, --json error object, schema exports), Python/Node subprocess recipes, built-in MCP usage, Docker deployment.
  • docs/roadmap.md: M9 milestone, capability-list entries, acceptance-matrix row for mcp (happy + failure path), audit outcome recorded (embedded HTTP server stays REJECTED; scorekit-core lib crate stays on HOLD pending a real consumer).
  • README rewritten creator-first: inline first-track example, Agent workflow, humanize/grammar/SFZ sections; engineering detail moved to the docs site.

CI

  • Build the sfizz renderer before running tests (original commit on this branch).

Acceptance matrix compliance

mcp is a new tier-1 feature and registers per rule 5: tests/cli.rs::mcp_initialize_lists_tools_and_validates_scene (happy path) and mcp_tool_failure_passes_structured_error_through (failure path: structured error passthrough, unknown tool → -32602, unknown method → -32601).

Validation

  • cargo fmt + cargo clippy --all-targets clean
  • 13 unit + 69 E2E tests pass
  • mdBook builds
  • Docker image builds and passes container smoke tests

jamiesun and others added 2 commits July 18, 2026 17:04
…facing README

- scorekit mcp: thin stdio MCP server (JSON-RPC 2.0); six tools (doctor/
  validate/schema/lint/build/diff) each re-invoke the CLI with --json and
  pass structured output through verbatim; no HTTP, no auth, no state
- Dockerfile + .dockerignore: pinned toolchain image (bookworm FluidSynth/
  FFmpeg, SHA-256-verified MuseScore General) carrying the determinism
  guarantee into cloud/CI; doctor self-check at build time
- docs-site: new Machine Interface page (semver-stable contract: exit codes,
  --json error object, schema exports, subprocess recipes, built-in MCP,
  Docker deployment); commands table gains mcp
- roadmap: M9 milestone, capability list, acceptance-matrix row for mcp
  (happy path + failure path E2E), audit outcome recorded (HTTP server
  stays REJECTED, scorekit-core lib crate stays on HOLD pending a real
  consumer)
- README rewritten creator-first: inline first-track example, Agent
  workflow, humanize/grammar/SFZ sections; engineering detail moved to
  the docs site

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@jamiesun jamiesun changed the title ci: build sfizz renderer before tests M9: machine interface — stdio MCP server, pinned Dockerfile, creator-facing README (+ CI sfizz build) Jul 18, 2026
@jamiesun
jamiesun merged commit 7f4fa4e into main Jul 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant