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

🧩 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.5-cp313-cp313-win_amd64.whl (703.2 kB view details)

Uploaded CPython 3.13Windows x86-64

swiftmcp-0.0.5-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.5-cp313-cp313-macosx_11_0_arm64.whl (808.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

swiftmcp-0.0.5-cp312-cp312-win_amd64.whl (361.0 kB view details)

Uploaded CPython 3.12Windows x86-64

swiftmcp-0.0.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (645.6 kB view details)

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

swiftmcp-0.0.5-cp312-cp312-macosx_11_0_arm64.whl (412.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: swiftmcp-0.0.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 703.2 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 57014598aaa5becfc308ce017667a9184a02ec675dcf846951f8309df74f7e30
MD5 02af22f5645360e55863a6931b7ba6d7
BLAKE2b-256 6805f78090ea0ca0fdb7c0eb24289af679965e470e70246530ae0ecdae86126d

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.5-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.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a620cde31cdc7262cddc8d6df48b3caa501b4f0665474e50d6a3e653934fd14d
MD5 56a95a60f9342d55fe5e5e7278cd7462
BLAKE2b-256 17ecba87a5d435e8cda8298261bf9968a9223fc63be8b0b94323b9a50c1048b3

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8772b76632a937e8a5c9f90f024bf798a42667559eea0f1f71aa262ef91cc59c
MD5 aa3c460d0307e8a80b975bb7515c651d
BLAKE2b-256 5452763456993981893994879356fa7950ee36dc29ac74125eeb8b7b0d4c7460

See more details on using hashes here.

File details

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

File metadata

  • Download URL: swiftmcp-0.0.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 361.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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 104240ed9f5866a8b0b2384fb6c195741a05f9c9d681ecb6b7b6c63baa1b6c2e
MD5 2708ac12a8c1aab13ff51aece731baab
BLAKE2b-256 443b49fdf75258a359948d919c38f2ee0b8db67ccfd287a5ee6e5353dd89f297

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.5-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.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4bbd150db654992575b55d399085bd9109ada9438741d652b1a4af2077199271
MD5 d1ba4260ac72b3a08eb7af0852a76b44
BLAKE2b-256 9e5fd1f472c2022f08702425fa207a8bf94a632540b8dd1e20c25948dffe5134

See more details on using hashes here.

File details

Details for the file swiftmcp-0.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for swiftmcp-0.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1868ec53104ef2406853e0a03021c8fefa119a042fea64728dbe5403b32ec05
MD5 632de9ede9d4318722c30ae36288a541
BLAKE2b-256 b486ad4f009989c26b0eed752c81960cc47d8345b3186d57216fc8c8843cc07c

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