mcp-forge
Allows MCP clients to interact with any REST API described by an OpenAPI/Swagger spec by dynamically generating tools from the spec at runtime.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-forgeload petstore spec and get pet by id 1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-forge
Turn any OpenAPI spec into a working MCP server. Point it at a spec (file or URL) and Claude instantly gets a tool for every endpoint — no codegen, no boilerplate, no hand-writing tool definitions.
npx mcp-forge ./openapi.json
# -> serving 14 tools from ./openapi.json -> https://api.example.com/v1MCP is how Claude calls real tools. Writing an MCP server for an API you already have is tedious busywork — mcp-forge does it in one command by reading the API's own OpenAPI/Swagger spec at runtime and proxying the calls.
🔌 Any REST API with an OpenAPI 3 / Swagger spec → Claude tools
⚡ Runtime, zero codegen — no generated files to maintain
🧭 One tool per operation, typed inputs built from the spec's parameters
🔐 Pass auth headers through to the upstream API
📄 JSON or YAML specs, local file or URL
Use it with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"petstore": {
"command": "npx",
"args": ["-y", "mcp-forge", "https://petstore3.swagger.io/api/v3/openapi.json"]
}
}
}With auth + an explicit base URL:
{
"mcpServers": {
"myapi": {
"command": "npx",
"args": [
"-y", "mcp-forge", "./openapi.yaml",
"--base-url", "https://api.example.com/v1",
"--header", "Authorization: Bearer YOUR_TOKEN"
]
}
}
}Related MCP server: OpenAPI to MCP
CLI
mcp-forge <openapi-spec-file-or-url> [options]
--base-url URL Override the server URL (else taken from spec.servers[0])
--header "Key: Value" Header added to every upstream request (repeatable)
--name NAME MCP server nameAs a library
import { loadSpec, openapiToTools, buildServer } from 'mcp-forge'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
const spec = await loadSpec('./openapi.json')
const tools = openapiToTools(spec) // -> ToolDef[]
const server = buildServer(tools, { baseUrl: 'https://api.example.com/v1' })
await server.connect(new StdioServerTransport())How it works
Load + parse the spec (JSON/YAML, local or remote).
Walk
paths× HTTP methods → one tool per operation. The tool's input schema is built from the operation'spath,query, andheaderparameters (plus abodyfor request bodies).When Claude calls a tool,
mcp-forgebuilds the real HTTP request — filling path/query/header params and the JSON body — sends it, and returns the status + response.
Scope (v1)
Supports OpenAPI 3 operations with path/query/header params and JSON request bodies, and local #/... $ref resolution. Deep/remote $refs, oneOf/allOf body schemas, and non-JSON bodies are simplified — PRs welcome.
License
MIT © 2026 Neil Gilani
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hilothefunnydog123-coder/mcp-forge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server