Skip to main content

Create a low-code, SSE-transport-enabled Model Context Protocol server project from a template, packaged with Docker for easy deployment and orchestration.

Project description

mMCP

Motivation

mmcp is inspired by Anthropic's MCP-based create-python-server with the following changes:

  • Microservices architecture
  • Docker baked-in for immediate deployment
  • CLI tooling for ease-of-use (e.g., mmcp add tool)
  • Added support for Poetry

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.

Quickstart

>> 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")

Usage

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.

Development

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"

License

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.

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

mmcp-0.1.0.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

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

mmcp-0.1.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file mmcp-0.1.0.tar.gz.

File metadata

  • Download URL: mmcp-0.1.0.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for mmcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 495679c34080f2c8f7a024c6df559cb2f7795aa5f4adff1cfda80c5fe35a5bb2
MD5 c6649889b2dd43ebbd77d648e059eeb9
BLAKE2b-256 0bec6b890a6d068a6a1fcea0f68aba743fba63cc4dda34e4e3b3360b0c7323bb

See more details on using hashes here.

File details

Details for the file mmcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mmcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for mmcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3493d8816eba32cc28cbaacd4be7a3f91cb3178c466c9e3bb44d38538eb98751
MD5 b8484abfb21ee141db1b7c6257165632
BLAKE2b-256 582415238abb146468e4344d34591165116d8db7db7e2b02784c7e83963b8cb3

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