Skip to main content

Unified production framework for both REST APIs and MCP servers. Drop-in replacement for FastAPI and FastMCP with schema validation, security, middleware, and OpenMCP spec generation.

Project description

ProdMCP

Unified production framework for both REST APIs and MCP servers. Drop-in replacement for FastAPI and FastMCP with schema validation, security, middleware, dependency injection, and OpenMCP spec generation.

Installation

pip install prodmcp              # Core (MCP tools, prompts, resources)
pip install prodmcp[rest]        # + FastAPI + Uvicorn for the unified server

Quick Start

from pydantic import BaseModel
from prodmcp import ProdMCP

app = ProdMCP("MyServer", version="1.0.0")


# --- Define Schemas ---

class UserInput(BaseModel):
    user_id: str

class UserOutput(BaseModel):
    name: str
    email: str


# --- Unified: Same handler as both MCP tool AND REST endpoint ---

@app.common(input_schema=UserInput, output_schema=UserOutput)
@app.tool(name="get_user", security=[{"type": "bearer", "scopes": ["user"]}])
@app.get("/users/{user_id}")
def get_user(user_id: str) -> dict:
    return {"name": "Alice", "email": "alice@example.com"}


# --- MCP-only Prompt ---

@app.prompt(name="summarize", input_schema=UserInput)
def summarize(user_id: str) -> str:
    return f"Please summarize data for user {user_id}"


# --- MCP-only Resource ---

@app.resource(uri="data://users", name="user_db", output_schema=UserOutput)
def fetch_users() -> list:
    return [{"name": "Alice", "email": "alice@example.com"}]


# --- Export OpenMCP Spec ---

spec = app.export_openmcp()
print(spec)

# --- Run the unified server ---

if __name__ == "__main__":
    app.run()  # REST at / (Swagger at /docs) + MCP SSE at /mcp/sse

Features

  • Unified Framework — One ProdMCP instance replaces both FastAPI and FastMCP
  • Decorator Stacking@app.tool() + @app.get() on the same handler with @app.common() for shared config
  • HTTP Methods@app.get(), @app.post(), @app.put(), @app.delete(), @app.patch() (FastAPI-identical)
  • MCP Primitives@app.tool(), @app.prompt(), @app.resource() (FastMCP-identical)
  • Schema-First — Pydantic models or raw JSON Schema for input/output definitions
  • Validation Engine — Automatic input/output validation with structured error reporting
  • Security Layer — Bearer, Basic, Digest, API keys, OAuth2, OpenID Connect
  • Middleware System — Global before/after hooks (logging, rate limiting, tracing)
  • Dependency Injection — Composable dependencies injected into handlers
  • OpenMCP Spec — Auto-generated, machine-readable specification from code
  • Unified Server — REST + MCP SSE on a single HTTP server (app.run())

License

MIT


Release Notes

Version 0.3.0 — Unified Framework Release

One framework. Both worlds. ProdMCP 0.3.0 makes ProdMCP a true drop-in replacement for FastAPI and FastMCP.

Key changes:

  • Unified Architecture — FastAPI-style HTTP decorators + FastMCP-style MCP decorators on a single class
  • @app.common() — Define schemas, security, and middleware once for stacked decorators
  • app.run(transport="unified") — REST at / + MCP SSE at /mcp/sse on one server (new default)
  • Expanded SecurityHTTPBasicAuth, HTTPDigestAuth, APIKeyHeader/Query/Cookie, OAuth2PasswordBearer, OAuth2AuthorizationCodeBearer, OAuth2ClientCredentialsBearer, OpenIdConnect
  • Migration Examplesfastapi_migration.py, fastmcp_migration.py, unified_example.py
  • Bug Fixes — Fixed $ref paths in OpenMCP spec, security config propagation, and API key scheme naming

See CHANGELOG.md for the full changelog.

Version 0.2.0 — Initial Public API Release

  • Decorator API: @app.tool(), @app.prompt(), @app.resource() with schema, security, and middleware support.
  • Schema-First Validation: Pydantic BaseModel input/output validation with strict_output toggle.
  • Security Manager: BearerAuth, ApiKeyAuth, CustomAuth with shorthand inline definitions.
  • Dependency Injection: Depends() for async context resolution.
  • Middleware Hooks: Global and entity-specific before/after lifecycle hooks.
  • OpenMCP Spec Engine: app.export_openmcp() generates machine-readable specs.
  • REST Bridge: app.as_fastapi() for MCP-to-REST testing.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prodmcp-0.3.0.tar.gz (45.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prodmcp-0.3.0-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file prodmcp-0.3.0.tar.gz.

File metadata

  • Download URL: prodmcp-0.3.0.tar.gz
  • Upload date:
  • Size: 45.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for prodmcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 401e397869e8c7cf942692e934628db17bd441314211c2bc9faffa1b74195f06
MD5 e15f28b65cc3f96e70d5d29c2b145fdc
BLAKE2b-256 094cc8857e4f19a11c059d78f02e0b84ed03d2467b80f811f9c500582cfbca0f

See more details on using hashes here.

File details

Details for the file prodmcp-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: prodmcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 29.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for prodmcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04b598d47fcf57c6fd47eeb6c6b2799f886cdd09873e6795a912384bb755e605
MD5 d8a724541bb4d966ee3ef342ff36ff76
BLAKE2b-256 f9c7257b174a2157f904ba2568aa6e6db4bb5dc076703cf0f94f44c437aa1b3b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page