Skip to main content

multimoda MCP framework

Project description

SwiftMCP


中文   |   English  

📝 Introduction

SwiftMCP is a multimodal Model Control Protocol (MCP) framework designed to provide flexible and extensible service interfaces for integrating and managing various model services. It simplifies the implementation and deployment of MCP protocol, supports automatic conversion from OpenAPI to MCP, and provides toolchain integration capabilities to reduce the complexity of multimodal model service access.

🎉 News

  • 🎁 2025.09.02: Release v0.0.1 package.
More
  • 🎉 2024.09.02: Add swiftmcp command support.
  • 🔥 2025.08.25: Init the project.

🛠️ Installation

Prerequisites

  • Python >= 3.11 (Recommended: 3.12)
  • pip package manager

Install from PyPI

pip install swiftmcp -U

Install from Source

git clone https://github.com/yaqiangsun/SwiftMCP.git
cd SwiftMCP
pip install -e .

🚀 Quick Start

Run serve

Start the MCP service with the following command:

swiftmcp serve --port 8080 --path /mcp

This will start an HTTP server listening on port 8080 with the MCP endpoint at /mcp. You can then access the service at http://localhost:8080/mcp.

Command Line Options

  1. serve - Start the MCP composition service (MCP service composition tools will be fused with task tools into one MCP path)

    • --port: Specify the port number (default: 8000)
    • --path: Specify the service path (default: /mcp)
  2. splitserve - Start the split MCP composition service (MCP service tools and task tools are in two independent MCP paths)

    • --manager-port: Specify the manager endpoint port number (default: 8001)
    • --manager-path: Specify the manager endpoint path (default: /mcp_manager)
    • --task-port: Specify the task endpoint port number (default: 8002)
    • --task-path: Specify the task endpoint path (default: /mcp_task)
  3. openapi2mcp - Convert OpenAPI specification to MCP service

    • --port: Specify the port number (default: 8003)
    • --path: Specify the service path (default: /mcp)
    • --target-url: Specify the target URL for OpenAPI service (default: http://0.0.0.0:10050)
  4. mcp2mcp - Proxy one MCP service to another MCP service (Proxy HTTP MCP service to form a new HTTP MCP service)

    • --port: Specify the port number (default: 8003)
    • --path: Specify the service path (default: /mcp)
    • --target-url: Specify the URL of the target MCP service
  5. toolmanager - Start the tool management service (Supports tool modification functionality)

    • --port: Specify the port number (default: 8003)
    • --manager-path: Specify the manager endpoint path (default: /mcp_manager)
    • --task-path: Specify the task endpoint path (default: /mcp_task)
    • --mcp-url: Specify the URL of the target MCP service
  6. run - Run a YAMLMCP service from a Python script file (Code and configuration are completely decoupled)

    • script: Path to the Python script containing tool definitions
    • --host: Specify the host address (default: 0.0.0.0)
    • --port: Specify the port number (default: 8003)
    • --path: Specify the service path (default: /mcp)

    Example: swiftmcp run examples/split_define_serve/tools.py

🧩 YAMLMCP Usage

YAMLMCP is a subclass of FastMCP that automatically loads configuration from a descriptions.yaml file and provides decorator factories for tool, resource, and prompt, achieving complete decoupling between code and descriptions.

Example

server.py:

import os
import yaml
from swiftmcp.core.split_define.split_mcp import YAMLMCP

yaml_path = os.path.join(os.path.dirname(__file__), "descriptions.yaml")
mcp = YAMLMCP(yaml_path=yaml_path)

# Define pure logic functions (completely clean)
@mcp.tool_wrapper
def add_numbers(a: int, b: int, scale: float = 1.0) -> int:
    return int((a + b) * scale)

@mcp.tool_wrapper
def multiply(x: float, y: float) -> float:
    return x * y

@mcp.resource_wrapper("resource://{name}/details")  # uri read from "uri" field in descriptions.yaml
def user_greeting(name: str) -> str:
    return f"Hello, {name}! Welcome to MCP service."

@mcp.resource_wrapper("default://static")
def get_greeting() -> str:
    return "Hello from FastMCP!"

@mcp.prompt_wrapper
def code_review_prompt(code: str):
    from fastmcp.prompts import Message
    return [
        Message(f"Please review the following code and identify potential issues:\n``python\n{code}\n```"),
        Message("I'm here to help you review the code.")
    ]

# Start the service
if __name__ == "__main__":
    print("Starting completely decoupled MCP service...")
    mcp.run(transport="stdio")

descriptions.yaml:

server:
  name: "MyCompleteMCPServer"
  instructions: "A complete MCP example service: including tools, resources and prompt templates"

tools:
  add_numbers:
    description: "Add two integers with optional scaling"
    parameters:
      a: "First addend, must be integer"
      b: "Second addend, must be integer"
      scale: "Optional scaling factor, default 1.0"

  multiply:
    description: "Multiply two floating point numbers"

resources:
  get_greeting:
    description: "Return a friendly static greeting"

  user_greeting:               # Note: using function name as key since path contains {variable}
    uri: "resource://{name}/details"
    description: "Generate personalized greeting based on username"

prompts:
  code_review_prompt:
    description: "Generate a code review prompt template"

This approach allows you to define function logic separately from metadata configuration, making it easier to modify descriptions, parameters and other metadata without changing the code.

✨ Features

1. MCP Composition

SwiftMCP supports composing multiple MCP services into a single endpoint, allowing you to aggregate tools from different sources.

2. HTTP Proxy

The framework provides HTTP proxy capabilities to bridge local MCP services with remote clients.

3. OpenAPI Integration

SwiftMCP can automatically convert OpenAPI/Swagger specifications into MCP tools, making it easy to integrate existing HTTP APIs.

4. Tool Management

  • Dynamic addition and removal of MCP servers
  • List available tools from mounted servers
  • Support for hiding tools from the main interface
  • Dynamic modification of tool descriptions on remote MCP services

5. Multi-Protocol Support

  • HTTP transport for remote clients
  • STDIO transport for local applications like Claude Desktop

6. Multiple Service Architectures

  • Composed Architecture: Dynamically add remote MCP services to the main service
  • Split Architecture: Management functions and task execution functions are served by different endpoints

📚 API Reference

See API Documentation for detailed documentation on SwiftMCP APIs and tool development.

🤝 Contributing

We welcome contributions! Please see our contributing guidelines for details on how to submit pull requests, report issues, or request new features.

🏛 License

This framework is licensed under the Apache License (Version 3.0). For models and datasets, please refer to the original resource page and follow the corresponding License.

📚 Examples

The following examples demonstrate various use cases of SwiftMCP:

1. Composition

Demonstrates how to compose multiple independent MCP services into a unified service.

Key features:

  • Dynamically add/remove remote MCP services
  • Aggregate tools from different sources
  • Unified management of multiple service tools

2. FastAPI Composition

Demonstrates how to build a composite MCP service using FastAPI and SwiftMCP with a separation architecture.

Key features:

  • Separation of management and task execution functions
  • Mounting multiple MCP services under different paths of the same port
  • Suitable for production environments requiring clear functional separation

3. OpenAPI to MCP Conversion

Shows how to convert an OpenAPI service to MCP tools and use them.

Key features:

  • Automatic conversion from OpenAPI specification to MCP tools
  • Integration with existing HTTP APIs
  • Easy migration from traditional REST APIs to MCP

For detailed instructions on running these examples, please refer to their respective documentation.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

swiftmcp-0.0.8-cp313-cp313-win_amd64.whl (711.0 kB view details)

Uploaded CPython 3.13Windows x86-64

swiftmcp-0.0.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

swiftmcp-0.0.8-cp313-cp313-macosx_11_0_universal2.whl (1.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

swiftmcp-0.0.8-cp312-cp312-win_amd64.whl (365.0 kB view details)

Uploaded CPython 3.12Windows x86-64

swiftmcp-0.0.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (651.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

swiftmcp-0.0.8-cp312-cp312-macosx_11_0_universal2.whl (873.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file swiftmcp-0.0.8-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: swiftmcp-0.0.8-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 711.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for swiftmcp-0.0.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6b6d9ec259925c4dacb814513d98bcc2fb8f2a0d6745a65c2a82c5a5e6591272
MD5 6fb95054a81db76136df62ac1179e696
BLAKE2b-256 77865be3b04e472b0391cf010d1b6b1f0e0ad2600fc795f407318310cbc0a938

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d862d8ac92d6afe711e17c5b5e9567a30be89bca3053db582dabce4d70502580
MD5 69c69d782fa530f999841ba36b956d69
BLAKE2b-256 9777e586a6c662692e9771207a19fa014e9d2fb346b640b79fcab63907190897

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.8-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.8-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 4f277fbd82edd9f743ab18dfbbac497456b9807e34a51d65890a642aed2e79b0
MD5 7f2acc932a45b7bf23b50a73e0fe0d5d
BLAKE2b-256 e1e783d4959badc3197e8d2467480752ddc866d1c7241d4866081c02d7dfb1cb

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.8-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: swiftmcp-0.0.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 365.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for swiftmcp-0.0.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 36b3c6db754bd8f3f44d3d1770e26272fe046cb829fa8749ace7227976737754
MD5 5eaf7460019054d11f214115b3d7b713
BLAKE2b-256 f6eea81ddc20d383f47f90d65e00cc9183972395160129e285f5ef4284e97b4e

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c2c83774ea01f25412eb52836fec4c0f7826d3792c0fc1d5ba1d60f44fa653e4
MD5 8c0cf8b4e28d2a2cc4e469b2224a76d1
BLAKE2b-256 d9a0da3c7d81ca95dea2273876e78cc8633dda8b18fa060615be48766fcf6c6f

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.8-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.8-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 5f9db45b952bec47ee3fdc5dfb1ced1ba2c0a558a900bdf4848f90250a928155
MD5 749dded60db5bf5d1396d7db3e2280dc
BLAKE2b-256 c05a0b308ac10cc8f5c0d9a001bdb608842d1d7afc1d6483efca2938b4175d97

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