Skip to main content

🔨 MCP Forge

New here? Start with the Getting Started Guide.

Scaffold, test, and publish Model Context Protocol (MCP) servers in seconds.

Python 3.10+ License: MIT Tests PyPI


The Problem

Building MCP servers involves too much boilerplate. Every new server needs the same JSON-RPC handling, tool definitions, resource handlers, Dockerfile, tests, and packaging config. You end up copying from old projects, fixing import paths, and wasting time on plumbing instead of building.

MCP Forge fixes this. One command generates a complete, ready-to-develop MCP server project. Another command tests it. Another validates compliance. Another publishes it.

Features

  • 🏗️ Scaffold full MCP server projects from templates in one command
  • 🧪 Test servers with a built-in MCP test harness (JSON-RPC over stdio)
  • 🔍 Validate server compliance against the MCP specification
  • 📦 Publish to PyPI with a single command
  • 🎨 Jinja2-powered scaffolding with clean, extensible templates
  • 🐳 Dockerfile included in every generated project
  • ⚡ Zero config needed for standard MCP servers

Quick Start

Install

pip install mcp-server-forge

Create a new MCP server

mcp-forge new my-server --tools weather,calculator

That's it. You now have a complete, runnable MCP server:

my-server/
├── Dockerfile
├── README.md
├── pyproject.toml
├── .gitignore
├── src/
│   └── my_server/
│       ├── __init__.py
│       ├── server.py
│       ├── tools.py
│       └── resources.py
└── tests/
    └── test_my_server.py

Test your server

cd my-server
pip install -e .
mcp-forge test --cmd 'python -m my_server.server'
┌──────────────────────────────────────────────────┐
│           MCP Forge Test Results                 │
├──────────────┬────────┬──────────────────────────┤
│ Test         │ Status │ Details                  │
├──────────────┼────────┼──────────────────────────┤
│ server_start │  PASS  │ Server started           │
│ initialize   │  PASS  │ initialize response valid │
│ tools/list   │  PASS  │ Found 2 tools            │
│ tools/call   │  PASS  │ Called 'weather' OK      │
│ ping         │  PASS  │ Ping OK                  │
│ unknown      │  PASS  │ Correctly returned error │
│ server_stop  │  PASS  │ Server stopped cleanly   │
├──────────────┴────────┴──────────────────────────┤
│ 7/7 passed  All tests passed!                    │
└──────────────────────────────────────────────────┘

Validate compliance

mcp-forge validate ./my-server

Publish

mcp-forge publish ./my-server
mcp-forge publish ./my-server --repository testpypi --dry-run

Scaffolding

The new command generates a complete MCP server with:

  • A fully functional server.py with JSON-RPC request routing
  • Tool definitions and handlers in tools.py
  • Resource handlers in resources.py
  • A pyproject.toml configured with hatchling
  • A Dockerfile for containerized deployment
  • A README.md with usage instructions
  • Basic tests and .gitignore

Options

mcp-forge new my-server \
  --tools weather,calculator,search \
  --resources "file://data,http://api" \
  --description "My awesome MCP server" \
  --author "Your Name" \
  --output-dir ./projects

Templates

MCP Forge uses Jinja2 templates internally. Each generated file comes from a template in the templates/ directory:

Template Generates
server.py.j2 Main server with JSON-RPC routing
tools.py.j2 Tool definitions and handlers
resources.py.j2 Resource definitions and handlers
project_pyproject.toml.j2 Package configuration
project_readme.md.j2 Project README
dockerfile.j2 Docker container config
init.py.j2 Package init file

Testing

The built-in test harness starts your MCP server as a subprocess and sends JSON-RPC requests over stdio, validating:

  • Server startup and clean shutdown
  • initialize response with protocol version, capabilities, and server info
  • tools/list returns valid tool definitions
  • tools/call executes a tool and returns content
  • ping responds correctly
  • Unknown methods return proper JSON-RPC errors

Validation

The validate command checks your project for:

  • Required file structure (src/, pyproject.toml, server.py, tools.py)
  • Tool definitions match the MCP schema (name, description, inputSchema)
  • Initialize responses include all required fields
  • Tool results contain valid content arrays

Publishing

The publish command wraps build and twine for a smooth publishing experience:

# Build and publish to PyPI
mcp-forge publish .

# Dry run (build only)
mcp-forge publish . --dry-run

# Publish to TestPyPI
mcp-forge publish . --repository testpypi

Make sure you have build and twine installed:

pip install mcp-server-forge[publish]

Template Customization

The scaffolding uses Jinja2 templates internally. To customize the generated code, fork the repo and modify the templates in src/mcp_forge/templates/. The Jinja2 context includes:

  • project_name - the project name as given
  • pkg_name - Python package name (snake_case)
  • title - human readable title
  • description - project description
  • author - author name
  • tools - list of tool names
  • resources - list of resource URI patterns

Development

git clone https://github.com/manasvardhan/mcp-forge.git
cd mcp-forge
pip install -e ".[dev]"
pytest

License

MIT License. See LICENSE for details.


Built with 🔨 by Manas Vardhan

Metadata

Release files for mcp-server-forge 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-server-forge 0.1.1
File Size Uploaded Provenance
mcp_server_forge-0.1.1.tar.gz 17.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-server-forge 0.1.1
File Interpreter ABI Platform
mcp_server_forge-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 34.5 kB

Release files / mcp_server_forge-0.1.1.tar.gz

Download URL mcp_server_forge-0.1.1.tar.gz
Size 17.5 kB
Tags Source
SHA-256 checksum
How to use checksums
de9063f18d8c76596c52eb3fab16256c2f7a0cec50a988061aa4806ed4cc0dc0
BLAKE2b-256 checksum
How to use checksums
1d175231c7720375a8fcb186b96bf8d358f7f044d65b89dcee4d7501a8f1aff0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / mcp_server_forge-0.1.1-py3-none-any.whl

Download URL mcp_server_forge-0.1.1-py3-none-any.whl
Size 17.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f6901657dd9e4c7c5904130b63033d9de9f963531ef8863ec0747f2dfdb0f562
BLAKE2b-256 checksum
How to use checksums
d174f5feae82a9a224d59249f5ed1475112a20f81c03fe3e1ffbd52891cb26c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Security for mcp-server-forge 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page