MCP server exposing the Forge E-- library note catalog + compile/run/commit authoring loop
claude mcp add forge-mcp -- python -m forge-recipe-mcp{
"mcpServers": {
"forge-mcp": {
"command": "python",
"args": ["-m", "forge_mcp.server"],
"env": {
"FORGE_TRANSPILE_URL": "<forge_transpile_url>"
}
}
}
}FORGE_TRANSPILE_URLMCP Servers overview
# forge-mcp
**Author, compile, run, and commit generative-music E-- Recipes directly from any MCP-capable agent (Claude Desktop, Cursor, …).** forge-mcp exposes the Forge E-- library note catalog + vault as an MCP server and closes the authoring loop end-to-end: the agent picks a chip from the catalog, drafts a Recipe, verifies it parses, runs it in a sandbox, previews the artifact, and commits the finished Recipe to a vault note. All 6 tools ship today.
```
[library note catalog] → [compile] → [run] → [commit] → [vault note with recipe_version bump]
```
## Install into Claude Code
**Fastest path** — Claude Code spawns forge-mcp as a stdio subprocess. Full walkthrough at [docs/claude-code-install.md](docs/claude-code-install.md).
```bash
# 1. Install from PyPI (https://pypi.org/project/forge-recipe-mcp/)
pip install forge-recipe-mcp
# 2. Fetch your Bearer once and export
export FORGE_MCP_BEARER=$(jq -r '.transpileServiceToken' \
~/forge-vaults/bluh/.obsidian/plugins/forge-client-obsidian/data.json)
# 3. Register with Claude Code
claude mcp add forge-mcp \
-e FORGE_MCP_BEARER=$FORGE_MCP_BEARER \
-e FORGE_TRANSPILE_URL=https://forge.thecodingarena.com \
-e FORGE_VAULT_PATH=$HOME/forge-vaults/bluh \
-e FORGE_MCP_TRANSPORT=stdio \
-- forge-mcp
# 4. Start Claude Code and ask "list the notes in my forge music library."
```
## Install (other clients)
Full walkthrough (Claude Desktop config, forge-transpile Bearer acquisition, verification smoke, troubleshooting): [docs/install.md](docs/install.md).
Quick paths:
```bash
# From source (pip + editable install for development)
pip install -e ".[dev]"
python -m forge_mcp.server
# Docker
docker build -t forge-mcp:latest .
docker run --rm -p 8765:8765 \
-e FORGE_TRANSPILE_URL=https://forge.thecodingarena.com \
-e FORGE_VAULT_PATH=/path/to/your/vault \
forge-mcp:latest
```
Environment:
- `FORGE_TRANSPILE_URL` — base URL of the forge-transpile service. Default: `http://localhost:8000`.
- `FORGE_VAULT_PATH` — local vault directory for `forge_read_notes_in_vault` + `forge_commit_recipe`. Default: `~/forge-vaults/bluh`.
- `FORGE_MCP_HOST` — host to bind. Default: `0.0.0.0`.
- `FORGE_MCP_PORT` — port to bind. Default: `8765`.
- `FORGE_MCP_BEARER` — **dev fallback only**. Per-request Bearer extraction is the primary path (CW-MCP-1-B); this env var only fires when the incoming request has no `Authorization` header. Do NOT set in production.
## Claude Desktop config
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"forge-mcp": {
"url": "http://localhost:8765/mcp",
"headers": {
"Authorization": "Bearer <your-forge-transpile-token>"
}
}
}
}
```
Get your Bearer:
```bash
jq -r '.transpileServiceToken' \
~/forge-vaults/bluh/.obsidian/plugins/forge-client-obsidian/data.json
```
## Tools
**Read** (no side effects):
- `forge_read_note_catalog({domain?})` — list Forge library notes; every entry carries the E-- signature the agent needs to `Call` it.
- `forge_read_notes_in_vault({filter?})` — list vault notes with a `has_recipe` + `recipe_version` summary. Backed by a local filesystem walk (CW-MCP-2-E).
**Author** (deterministic — no LLM, no vault write):
- `forge_compile_recipe({source})` — Recipe → Python. Returns compiled source + unresolved slot count, OR a structured parse error with line/column (per drain CW-recipe-parser-line-info).
- `forge_run_recipe({source, domains?})` — compile + execute in a resource-limited server sandbox. Returns a short preview + a `run_id`; artifacts (MusicXML / MIDI / PNGs) accessible via the `forge-artifact://` resource.
- `forge_get_run_result({run_id})` — fetch full stdout/stderr + artifact manifest of a previous run. 7-day TTL, per-Bearer isolation.
**Commit**:
- `forge_commit_recipe({source, note_id, expected_version?})` — persist Recipe to a vault note (facet-scoped — Description + Python + frontmatter survive byte-for-byte). Bumps `recipe_version` in the note's frontmatter. Optimistic-concurrency via `expected_version`; version-conflict returns `isError:true` with expected + current numbers.
## Resources
- `forge-note:///{domain}/{name}` — library note content.
- `forge-artifact:///{run_id}/{artifact_name}` — on-demand binary fetch for run artifacts. Text mimes return via `text`; binaries via base64 `blob`.
- `forge-recipe:///{note_id}/v{n}` — Recipe body at a specific `recipe_version` (git-tracked vaults only; returns "history unavailable" text otherwise).
## Auth
forge-mcp does NOT validate tokens itself — forge-transpile is the source of truth (guarded by `FORGE_TRANSPILE_SECRET`). Each request's `Authorization: Bearer <token>` header is forwarded verbatim; a 401 or 403 from forge-transpile surfaces as `isError: true` with an actionable message the agent can read (drain CW-MCP-1-B).
Rotation is zero-downtime on the forge-mcp side: change `FORGE_TRANSPILE_SECRET` on forge-transpile, update your MCP client's header, done. Old tokens fail on the next request with a clean rejection message.
## Related repos
- **[forge](https://github.com/frmoded/forge)** — the E-- parser + transpiler + core music library. forge-mcp vendors a snapshot of `forge/recipe/` per the CW-MCP-2-A architecture; drift is caught by `scripts/check-recipe-drift.sh` in the forge-transpile repo.
- **[forge-transpile](https://github.com/frmoded/forge-transpile)** — the FastAPI service exposing `/compile` / `/run` / `/catalog` etc. that forge-mcp's tools proxy for the transpile + sandboxed-run paths. Vault reads + commits are LOCAL and don't hit forge-transpile.
- **forge-client-obsidian** — the Obsidian plugin end of the same authoring loop. forge-mcp writes to the SAME vault the plugin reads/renders; both share the note-file format.
<!-- mcp-name: io.github.frmoded/forge-mcp -->
What people ask about forge-mcp
What is frmoded/forge-mcp?
+
frmoded/forge-mcp is mcp servers for the Claude AI ecosystem. MCP server exposing the Forge E-- library note catalog + compile/run/commit authoring loop It has 0 GitHub stars and was last updated today.
How do I install forge-mcp?
+
You can install forge-mcp by cloning the repository (https://github.com/frmoded/forge-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is frmoded/forge-mcp safe to use?
+
frmoded/forge-mcp has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains frmoded/forge-mcp?
+
frmoded/forge-mcp is maintained by frmoded. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to forge-mcp?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy forge-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/frmoded-forge-mcp)<a href="https://claudewave.com/repo/frmoded-forge-mcp"><img src="https://claudewave.com/api/badge/frmoded-forge-mcp" alt="Featured on ClaudeWave: frmoded/forge-mcp" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!