---
title: MCP server generation
description: A tool set derived from your spec, as source you own.
---

`reed mcp generate` turns a configured OpenAPI spec into a bare-HTTP MCP server source
tree.

```json
{
  "api": { "specs": { "ingestion": "openapi/ingestion.yaml" } },
  "mcp": {
    "ingestion": {
      "output": "generated/mcp-ingestion",
      "name": "@acme/ingestion-mcp",
      "version": "1.4.0",
      "baseUrl": "https://api.example.com"
    }
  }
}
```

Then:

```sh
reed mcp generate
```

Every `mcp` key must name a declared `api.specs` entry. Omit `--spec` to generate all of
them.

## What "bare HTTP" means

The generated server calls your API over plain HTTP. It does not depend on a client
library, which is what lets it exist at all — Reed does not generate an SDK, so a server
built on one would have nothing to import.

`name` must satisfy npm's package-name grammar; `version` must be valid SemVer;
`baseUrl` must be an absolute URL with a scheme. These are validated at `reed check` time
rather than discovered when the server fails to start.

## It lands in your repository

`output` is a path inside your project. The generated tree is source you own, commit,
review and deploy on your own terms.

Reed does not host an MCP endpoint for you. There is no Reed-operated URL your tools
connect to, and correspondingly no footer link to one on your built site — a link to an
endpoint that does not exist would be a fabrication.

## It changes nothing about your site

`mcp` config is generation-only. Adding the block does not alter a single rendered page,
and running `generate` does not require a build. The two outputs are independent.

## Regenerating

Generation is deterministic: the same spec and config produce the same tree. Commit the
output and regenerate when the spec changes — the diff then shows exactly which tools your
API change added, removed or altered, which is information a hand-maintained server never
gives you.
