Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Create a low-code, SSE-transport-enabled Model Context Protocol server project from a template, packaged with Docker for easy deployment and orchestration.
mmcp
is inspired by Anthropic's MCP-based create-python-server
with the following changes:
mmcp add tool
)The purpose of this project is to provide a more streamlined and user-friendly experience for creating SSE-specific MCP servers, foregrounding deployment options in order to make it easier to get started with MCP. In sum, it began and ended as a means to satisfy my own needs from the MCP.
>> pip install mmcp
>> mmcp create-mmcp --name my-mmcp-server
>> cd my-mmcp-server
>> mmcp run server
To add a tool, use the following command:
>> mmcp add tool --name my-tool
Refer to the project structure for more information, where mmcp add tool
will add a tool to the tools/
directory.
- MY_MMCP_SERVER/
- src/
- my_mmcp_server/
- prompts/ # Prompt-definition code
- resources/ # Resource-definition code
- services/ # Service-layer code
- __init__.py
- prompts.py
- resources.py
- tools.py
- tools/ # Tool-definition code
- __init__.py
- base.py
- my_tool.py # <-- Added by `mmcp add tool --name my_tool`
- __init__.py
- app.py
- server.py
- tests/
- .env
- docker-compose.yml
- Dockerfile # Docker image definition
- pyproject.toml
- README.md
The services/
layer orchestrates the mcp
-specific decorators, employed generically via server.py
:
@server.list_tools()
async def handle_list_tools():
return await tool_service.list_tools()
@server.call_tool()
async def handle_call_tool(name: str, arguments: dict | None):
return await tool_service.execute_tool(name, arguments or {})
where @server
is:
from mcp.server import Server
# Create the server instance
server = Server("my_mmcp_server")
To run the project, use the following command:
>> mmcp run server
which launches the server via poetry run python -m my_server.server
.
A common pattern to route calls to the server via an endpoint.
Suppose your server is running on http://127.0.0.1:8080/sse
:
from mcp.client.session import ClientSession
from mcp.client.sse import sse_client
# ...fastapi setup
# ...
@router.get("/mcp-list-tools")
async def mcp_list_tools():
async with sse_client(url="http://127.0.0.1:8080/sse") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
return tools
@router.post("/mcp-call-tool")
async def mcp_call_tool(tool_name: str, parameters: Dict[str, Any]):
async with sse_client(url="http://127.0.0.1:8080/sse") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# # Call the fetch tool
# result = await session.call_tool("fetch", {"url": "https://example.com"})
result = await session.call_tool(tool_name, parameters)
return result
Additionally, the tests/test_mcp_list_tools.py
file can be run to test the list_tools
method, for a sanity check. Just make sure the server is running.
Note: More extensive documentation and usage is on the way.
To run the project, use the following command:
>> poetry install --no-cache
>> poetry shell
>> poetry run mmcp create-mmcp --name my_project
To build and run the project, use the following command:
>> cd path/to/your/mmcp
>> python -m build
>> pip install "path/.../dist/mmcp-0.1.0.whl"
This project is licensed under the MIT License. See LICENSE for details.
NOTE
This project is based on create-python-server by Anthropic, PBC.
This project is not affiliated with Anthropic, PBC., and does not reflect my views or opinions on the strengths or weaknesses of Anthropic's MCP.
FAQs
Create a low-code, SSE-transport-enabled Model Context Protocol server project from a template, packaged with Docker for easy deployment and orchestration.
We found that mmcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.