Skip to main content
Glama
README.md
# mcp-forge

An MCP stdio server that serves the **mcp-forge** prompt library — a deterministic, enterprise-grade system for creating new, or rewriting existing, Node.js projects (including MCP servers) to production-quality TypeScript.

Connect this server to any MCP client and call its tools to retrieve the exact prompts needed to rewrite a project step by step. The same source code always produces the same output — deterministic by design. Rewrite an existing project step by step, or generate a brand-new MCP server from an API spec with Create mode.

**Supported project types:** `http-api` · `library` · `cli` · `worker` · `mcp-server`

## Tools

| Tool                | Description                                                                            |
| ------------------- | -------------------------------------------------------------------------------------- |
| `list_steps`        | List all 15 rewrite steps. Pass `projectType` to see which steps apply or are skipped. |
| `get_step`          | Get the full prompt for a specific step (0–14). Step 8 requires `projectType`.         |
| `get_entrypoint`    | Get the Step 8 entrypoint prompt for a given project type.                             |
| `get_master_prompt` | Get the single-pass master prompt for small projects (< 2 000 lines).                  |
| `get_create_prompt` | Generate a new MCP server from an OpenAPI doc or BUILD_SPEC.                           |
| `validate_manifest` | Validate an `AUDIT_MANIFEST` JSON string produced by Step 0.                           |

## Setup

```bash
git clone <repo-url>
cd mcp-forge
npm install
npm run setup
```

`npm run setup` builds the project and automatically:

1. Registers the MCP server in Claude Desktop
2. Registers the MCP server in Claude Code (`~/.claude.json`)
3. Installs `/forge-*` slash commands globally to `~/.claude/commands/`

Restart Claude Desktop after running setup. Claude Code picks up changes automatically.

### Manual setup (Cursor or other MCP clients)

Add this to your client's MCP config:

```json
{
  "mcpServers": {
    "mcp-forge": {
      "command": "node",
      "args": ["/absolute/path/to/repo/dist/stdio.js"]
    }
  }
}
```

Build first if you haven't already: `npm run build`

> `PROMPTS_DIR` defaults to `.claude/commands` inside the repo — no environment variable needed.

## Slash commands in Claude Code

After `npm run setup`, the following commands are available globally in **any project** — no per-project setup required:

| Command                         | Description                                                                                   |
| ------------------------------- | --------------------------------------------------------------------------------------------- |
| `/forge-audit`                  | Audit the codebase and emit an `AUDIT_MANIFEST`. Always start here.                           |
| `/forge-create`                 | Create a brand-new MCP server from an OpenAPI doc or BUILD_SPEC (no existing project needed). |
| `/forge-plan [projectType]`     | List which steps apply to this project type. Run after audit.                                 |
| `/forge-step <n> [projectType]` | Apply a specific step. Example: `/forge-step 3` or `/forge-step 8 mcp-server`                 |
| `/forge-rewrite`                | Single-pass full rewrite for small projects (< 2 000 lines).                                  |

**Typical workflow:**

```
/forge-audit
/forge-plan
/forge-step 1
/forge-step 2
... (continue through the steps)
/forge-step 8 mcp-server
/forge-step 9
... through /forge-step 14
```

**Or — create a new MCP server from scratch:**

```
/forge-create
```

Supply an OpenAPI document or fill in the BUILD_SPEC when prompted; mcp-forge
generates the whole server (steps 1–14 + the mcp-server entrypoint).

## Using the MCP tools directly

**Incremental rewrite (large projects, recommended):**

1. `get_step({ step: 0 })` → run the audit prompt, receive an `AUDIT_MANIFEST` JSON
2. `validate_manifest({ manifestJson: "..." })` → confirm it's valid
3. `list_steps({ projectType: "mcp-server" })` → see which steps apply
4. `get_step({ step: 1 })` → `get_step({ step: 7 })` → scaffold in order
5. `get_entrypoint({ projectType: "mcp-server" })` → entrypoint layer (Step 8)
6. `get_step({ step: 9 })` → `get_step({ step: 14 })` → testing, security, CI, docs

**Single-pass rewrite (small projects, < 2 000 lines):**

1. `get_master_prompt()` → paste your entire project source into context with the returned prompt

**Creating a new MCP server from an API spec:**

1. `get_create_prompt()` → returns the Create-mode prompt
2. Supply an OpenAPI document (`openapi.json` / `openapi.yaml`) or fill in the `BUILD_SPEC` template from the prompt
3. The prompt emits an `AUDIT_MANIFEST` with `projectType: "mcp-server"` and a populated `mcpTools` array
4. `validate_manifest({ manifestJson: "..." })` → confirm it is valid
5. Continue with steps 1–14 and `get_entrypoint({ projectType: "mcp-server" })` exactly as for a rewrite — all downstream steps are unchanged

## Environment variables

| Variable      | Default                                     | Description                             |
| ------------- | ------------------------------------------- | --------------------------------------- |
| `PROMPTS_DIR` | `.claude/commands` (relative to the binary) | Override the prompts directory location |
| `NODE_ENV`    | `development`                               | Environment                             |
| `LOG_LEVEL`   | `info`                                      | pino log level                          |

## Development

```bash
npm run dev          # tsx watch mode
npm test             # run all tests (25 unit + integration)
npm run typecheck    # TypeScript check
npm run lint         # ESLint
npm run build        # compile to dist/
```

## Prompt library layout

```
.claude/commands/
  shared/          Steps 00–07, 09–14 (all project types, conditional sections)
  entrypoints/     Step 08 — one file per project type
  masters/         MASTER.md — universal single-pass prompt
```

## License

MIT

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool serves a distinct purpose: retrieving specific prompts (entrypoint, master, or step), listing steps, or validating manifests. No ambiguity in their roles.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., get_entrypoint, list_steps, validate_manifest), ensuring predictability.

Tool Count5/5

With 5 tools, the server is well-scoped for its domain of prompt management and validation, neither too sparse nor too heavy.

Completeness5/5

The tool set covers retrieval of all prompt variations, step listing, and manifest validation, leaving no obvious gaps for the intended use case.

Maintenance

ActivityInactive
ResponsivenessNo issues