mcpforge
Generates a complete, tested FastMCP 3.x MCP server from a natural language description, eliminating manual protocol boilerplate.
README
mcpforge
<!-- mcp-name: io.github.saagpatel/mcpforge -->
One English sentence in. A tested, spec-free FastMCP 3.x server out.
mcpforge turns a plain-English description into a complete FastMCP 3.x MCP server — tools, Pydantic input validation, error handling, a pytest suite, run config, and client setup docs — all wired together and ready to inspect, validate, and install. There's no MCP schema or protocol boilerplate to hand-write: the sentence is the spec. You write it; Claude writes the implementation; mcpforge runs the generated test suite and validators before you ever run it.
⚡ 60-second start

You need Python 3.12+, uv, and an Anthropic API key.
uv tool install fastmcp-builder # or: pip install fastmcp-builder
export ANTHROPIC_API_KEY="your_anthropic_api_key"
mcpforge generate "A weather server that returns today's forecast for a city" -o weather-server
No key yet? Try the demo.
mcpforge demoruns the real plan → generate → validate pipeline against a built-in recording and writes a complete, validated weather server — no API key, no spend. It's the fastest way to see exactly what mcpforge produces:uvx --from fastmcp-builder mcpforge demo
Bring your own key (BYOK). Generation runs on your Anthropic API key — mcpforge calls the Claude API directly and nothing is proxied through a hosted service. A single
generatemakes a few model calls (plan → server → tests), so a typical run costs roughly $0.05–$0.30 in API usage on the default model (claude-sonnet-4-6). That figure is an estimate — it scales with server complexity and your chosen model, and is not a live measurement. Everything that doesn't call the model —validate,inspect,list,doctor, andinit— is free.
That's the whole loop. mcpforge plans the tools, generates the code, then runs syntax, security, lint, import, and pytest checks against the result — so what lands in ./weather-server/ is already validated:
# weather-server/server.py (excerpt)
"""Weather forecast MCP server."""
from fastmcp import FastMCP
mcp = FastMCP("Weather")
# Illustrative lookup — describe a real source and mcpforge wires the call for you.
_FORECASTS: dict[str, dict] = {
"san francisco": {"high_c": 18, "low_c": 12, "summary": "Foggy"},
"denver": {"high_c": 24, "low_c": 9, "summary": "Clear"},
}
@mcp.tool
async def get_forecast(city: str) -> dict:
"""Return today's forecast for a city."""
key = city.strip().lower()
if key not in _FORECASTS:
raise ValueError(f"No forecast available for {city!r}")
return {"city": city, **_FORECASTS[key]}
if __name__ == "__main__":
mcp.run(transport="streamable-http")
Every generation also produces test_server.py (a real pytest suite), pyproject.toml, a README.md, and an MCP client config.json — a complete project, not a snippet. Run it with:
cd weather-server
uv run server.py # start the server (streamable-http)
uv run pytest -v # run the generated tests
mcpforge validate . # re-run the full validation suite anytime

The snippet above is an illustrative toy ("weather") for the docs. Real generations match your description — see
examples/for live generated servers (todo, file reader, database query, Slack notifier, TypeScript).
Build, then audit — the MCP toolkit
mcpforge has a sibling: mcp-audit (mcp-audits on PyPI). They're two halves of one workflow — forge a server, then audit what your agents can actually touch before you trust it.
| Stage | Tool | What it does |
|---|---|---|
| Build | mcpforge |
Generate a complete, tested MCP server from one sentence. |
| Audit | mcp-audit |
Scan every MCP server wired into your machine and risk-score what each one can reach. |
# build
mcpforge generate "A weather server that returns today's forecast for a city" -o weather-server
# audit everything your agents can reach (read-only, no install needed)
uvx --from mcp-audits mcp-audit scan --ssrf-check
<!-- Record the build+audit GIF (vhs docs/assets/build-then-audit.tape), then uncomment the line below: -->
<!--
-->
mcp-audit is read-only by default — it never edits a config and reports env-var key names only, never values. Build with confidence, then verify your blast radius.
Registry-ready metadata lives in server.json with the MCP Registry name
io.github.saagpatel/mcpforge and PyPI package fastmcp-builder. Treat that metadata as
discovery/provenance context, not as proof that generated servers are safe to run without review.
Use as an MCP server
mcpforge is itself an MCP server: point an MCP client (Claude Code, Claude Desktop, Cursor) at it and your agent can forge, validate, and inspect MCP servers inside a conversation. It runs locally over stdio (it writes files into your workspace and calls your model provider on your own key), so it is not offered as a hosted remote.
uvx fastmcp-builder
Add it to a client config (Claude Code shown). generate, update, and plan call the model provider, so set the key in the server env:
{
"mcpServers": {
"mcpforge": {
"command": "uvx",
"args": ["fastmcp-builder"],
"env": { "ANTHROPIC_API_KEY": "<your-key>", "MCPFORGE_WORKSPACE": "/path/to/workspace" }
}
}
}
Workspace paths are resolved against MCPFORGE_WORKSPACE and confined to it. Note that generate and update write files and incur model-provider cost (roughly $0.05 to $0.30 per call on your key).
| Tool | What it does | Writes | Cost | Key args |
|---|---|---|---|---|
generate |
Generate a complete, tested FastMCP 3.x server from a description | yes (workspace) | API call | description, language, transport, output_path, dry_run |
update |
Apply a natural-language change to an existing generated server | yes (workspace) | API call | server_path, request |
plan |
Extract the structured server plan without generating code | no | API call | description, transport |
validate |
Run syntax, lint, import, and pytest checks on a generated server | no (executes tests) | none | server_path |
inspect |
Summarize a generated server without executing it | no | none | server_path |
doctor |
Check local prerequisites and provider readiness | no | none | workspace_path |
list_generated_servers |
List mcpforge-generated servers in a workspace | no | none | workspace_path, recursive |
Features
- Plain-English generation — describe your server in natural language; Claude writes the implementation
- Complete project scaffold — tools, Pydantic input models, error handling,
pyproject.toml, and a pytest suite generated together - FastMCP 3.x native — output uses modern FastMCP decorators and transport configuration, not raw MCP protocol boilerplate
- Validate before running —
mcpforge validateruns syntax, security, lint, import, and pytest checks against generated servers - Iterate safely —
mcpforge updatemodifies an existing generated server and backs up changed files before writing - Discover generated servers —
mcpforge listfinds mcpforge-generated projects in a workspace - Inspect and diagnose —
mcpforge inspectsummarizes generated server shape, whilemcpforge doctorchecks local readiness - Machine-readable output — status-like commands expose
--jsonfor agent workflows - OpenAPI curation controls — include/exclude tags, operation allowlists, and operation limits keep generated integrations focused
- Scaffold without an LLM —
mcpforge initcreates a minimal FastMCP server skeleton for local iteration - MCP server mode —
mcpforge-serverexposes generation, planning, validation, inspection, doctor, and discovery tools so AI assistants can build safely
More commands
The PyPI distribution is fastmcp-builder; the installed commands are mcpforge and mcpforge-server. Beyond generate:
# See it work with no API key — generate a weather server from a built-in recording
mcpforge demo
# Generate a new MCP server
mcpforge generate "A todo list manager with create, read, update, and delete operations"
# Validate an existing generated server
mcpforge validate ./my-server
# Modify an existing generated server
mcpforge update ./my-server "Add a tool to export todos as CSV"
# Find generated servers in the current workspace
mcpforge list . --recursive
# Inspect a generated server without executing it
mcpforge inspect ./my-server
# Check local prerequisites and provider readiness
mcpforge doctor
Useful generation flags:
--dry-rundisplays the structured plan without writing files.--no-executewrites files but skips import and test execution.--stricttreats lint errors as hard validation failures.--from-openapi FILEgenerates from an OpenAPI 3.x spec.--openapi-include-tag TAG,--openapi-exclude-tag TAG,--openapi-operation ID, and--openapi-limit Ncurate OpenAPI conversion.--language python|typescriptchooses the target server language.--auth-profile none|api-key|jwtadds optional Python auth profile metadata and env docs.--middleware-profile logging|timing|rate-limitadds optional Python middleware profiles; repeat it to combine profiles.--provider anthropic|openai|openrouterselects the generation provider.openrouteris the "bring any model" path: setOPENROUTER_API_KEYand pick any OpenRouter model with--model(e.g.--model anthropic/claude-opus-4.8), including free and low-cost ones. Generation quality and structured-output support vary by model — the recommended models are Claude Opus 4.8 (xHigh) and/or GPT 5.5 (High/Extra High). Theopenaipackage is a default dependency (included in all installs) because it backs both--provider openaiand--provider openrouter; setMCPFORGE_ENABLE_OPENAI_PROVIDER=1to enable the direct OpenAI provider for use withOPENAI_API_KEY.
Useful status flags:
mcpforge list --jsonmcpforge inspect PATH --jsonmcpforge validate PATH --jsonmcpforge doctor --jsonmcpforge version --json
Tech Stack
| Layer | Technology |
|---|---|
| Language | Python 3.12+ |
| Generation | Anthropic Claude via anthropic SDK; OpenAI and OpenRouter via openai SDK (included by default) |
| MCP framework | FastMCP 3.x |
| CLI | Click 8 |
| Templates | Jinja2 |
| Validation | Pydantic v2 |
| Output | Rich |
Architecture
The generate command sends the user's description to Claude with a structured prompt that includes FastMCP 3.x idioms and a tool-schema contract. Claude returns a JSON plan (tool names, signatures, and descriptions) that mcpforge validates against a Pydantic model before rendering through Jinja2 templates into a complete project directory. The generated project is then validated with syntax checks, security scanning, ruff linting, import checks, and pytest execution. The update command reads an existing generated server, asks Claude for a targeted modification, writes backups for changed files, and validates the result.
Current Status — v0.3.4
mcpforge is published to PyPI as fastmcp-builder. v0.3.4 adds a fastmcp-builder
console-script alias so the MCP server launches via uvx fastmcp-builder (matching the
MCP Registry's uvx <package> launch model) and corrects the registry metadata. v0.3.3
added the mcpforge demo command (try the full generate pipeline with no API key, no
cost), an OpenRouter provider (--provider openrouter), and official MCP Registry
metadata. The generate, update, validate, inspect, doctor, and demo commands
work against FastMCP 3.4.2+.
See CHANGELOG.md for the full version history.
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。