Adapter for exposing Command Registry commands as tools for AI models via MCP Proxy.
Project description
MCP Proxy Adapter
Adapter for integrating Command Registry with MCP Proxy, allowing you to use commands as tools for AI models.
Overview
MCP Proxy Adapter transforms commands registered in the Command Registry into a format compatible with MCP Proxy. This enables:
- Using existing commands as tools for AI models
- Creating a hybrid REST/JSON-RPC API for command execution
- Automatic generation of OpenAPI schemas optimized for MCP Proxy
- Managing tool metadata for better AI system integration
Installation
pip install mcp-proxy-adapter
Quick Start
from mcp_proxy_adapter import MCPProxyAdapter, CommandRegistry
from fastapi import FastAPI
# Create a command registry instance
registry = CommandRegistry()
# Register commands
@registry.command
def calculate_total(prices: list[float], discount: float = 0.0) -> float:
"""
Calculates the total price with discount.
Args:
prices: List of item prices
discount: Discount percentage (0-100)
Returns:
Total price with discount
"""
subtotal = sum(prices)
return subtotal * (1 - discount / 100)
# Create FastAPI app
app = FastAPI()
# Create and configure MCP Proxy adapter
adapter = MCPProxyAdapter(registry)
# Register endpoints in FastAPI app
adapter.register_endpoints(app)
# Generate and save MCP Proxy config
adapter.save_config_to_file("mcp_proxy_config.json")
Supported Request Formats
The adapter supports three request formats for command execution:
1. JSON-RPC format
{
"jsonrpc": "2.0",
"method": "command_name",
"params": {
"param1": "value1",
"param2": "value2"
},
"id": 1
}
Example request to /cmd endpoint:
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"method": "calculate_total",
"params": {
"prices": [100, 200, 300],
"discount": 10
},
"id": 1
}' http://localhost:8000/cmd
Response:
{
"jsonrpc": "2.0",
"result": 540.0,
"id": 1
}
2. MCP Proxy format
{
"command": "command_name",
"params": {
"param1": "value1",
"param2": "value2"
}
}
Example request:
curl -X POST -H "Content-Type: application/json" -d '{
"command": "calculate_total",
"params": {
"prices": [100, 200, 300],
"discount": 10
}
}' http://localhost:8000/cmd
Response:
{
"result": 540.0
}
3. Params-only format
{
"params": {
"command": "command_name",
"param1": "value1",
"param2": "value2"
}
}
or
{
"params": {
"query": "command_name",
"param1": "value1",
"param2": "value2"
}
}
Example request:
curl -X POST -H "Content-Type: application/json" -d '{
"params": {
"command": "calculate_total",
"prices": [100, 200, 300],
"discount": 10
}
}' http://localhost:8000/cmd
Response:
{
"result": 540.0
}
Full Example: Integration with FastAPI
import logging
from fastapi import FastAPI, APIRouter
from mcp_proxy_adapter import CommandRegistry, MCPProxyAdapter, configure_logger
# Configure logging
logging.basicConfig(level=logging.INFO)
project_logger = logging.getLogger("my_project")
# Create FastAPI app
app = FastAPI(title="My API with MCP Proxy Integration")
# Create existing API router
router = APIRouter()
@router.get("/items")
async def get_items():
"""Returns a list of items."""
return [
{"id": 1, "name": "Smartphone X", "price": 999.99},
{"id": 2, "name": "Laptop Y", "price": 1499.99},
]
app.include_router(router)
# Register commands
registry = CommandRegistry()
@registry.command
def get_discounted_price(price: float, discount: float = 0.0) -> float:
"""
Returns the price after applying a discount.
"""
return price * (1 - discount / 100)
# Create and register MCP Proxy adapter
adapter = MCPProxyAdapter(registry)
adapter.register_endpoints(app)
# Save MCP Proxy config
adapter.save_config_to_file("mcp_proxy_config.json")
Features
- Universal JSON-RPC endpoint for command execution
- Automatic OpenAPI schema generation and optimization for MCP Proxy
- Tool metadata for AI models
- Customizable endpoints and logging
- Full test coverage and examples
License
MIT
Documentation
See docs/ for detailed guides, architecture, and examples.
CI/CD & PyPI automation
This project uses GitHub Actions for continuous integration and automated publishing to PyPI.
- All tests are run on every push and pull request.
- On push of a new tag (vX.Y.Z), the package is built and published to PyPI automatically.
See .github/workflows/publish.yml for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_proxy_adapter-2.0.0.tar.gz.
File metadata
- Download URL: mcp_proxy_adapter-2.0.0.tar.gz
- Upload date:
- Size: 118.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23d1eb3ded2b2c94404a86ff29c77ab1c86cec395a6fac1a7fef9ad89774579b
|
|
| MD5 |
53ae3addf655fcbefe8b8413803af097
|
|
| BLAKE2b-256 |
abad30332a810e63469e073a3dc569a679bfe3d931b194bde55c5daa5265efeb
|
File details
Details for the file mcp_proxy_adapter-2.0.0-py3-none-any.whl.
File metadata
- Download URL: mcp_proxy_adapter-2.0.0-py3-none-any.whl
- Upload date:
- Size: 38.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fac2683c67dbc7f12297daa7fb564ea883c39f723a4f131fe49bce5a0c19563
|
|
| MD5 |
ffd878f78f98422ff07319c5665a238f
|
|
| BLAKE2b-256 |
103ecaafe4bf4a361bff33cfbacdcb7e58e95e3ff009b28badae5c255762a687
|