项目简介

'nacos-mcp-wrapper-python' 是一个Python库,它建立在标准MCP服务器Python SDK之上,增加了将MCP服务器实例自动注册到Nacos服务注册中心以及利用Nacos配置中心进行工具描述和参数描述动态管理的功能。

主要功能点

  • Nacos服务注册: 自动将MCP服务器的服务地址和元数据注册到Nacos,方便客户端发现。
  • 动态配置管理: 将MCP服务器的工具、Prompt、资源等描述信息发布到Nacos配置中心,并支持运行时动态更新工具的描述和参数描述,无需重启服务器。
  • 基于标准SDK扩展: 在'modelcontextprotocol/python-sdk' 的'Server'和'FastMCP'类基础上进行封装,保留了原有SDK的使用方式。
  • 支持多种传输协议: 兼容MCP标准SDK支持的'stdio'和'sse'传输协议。

安装步骤

确保您的Python版本 >= 3.10。

  1. 使用pip安装库:

    pip install nacos-mcp-wrapper-python

服务器配置 (供MCP客户端参考)

MCP客户端需要知道如何找到并连接到您的MCP服务器。使用此库构建的服务器会将连接信息注册到Nacos。客户端通常需要配置以下信息:

  • 服务器名称 (Server Name): 在代码中创建'NacosServer'或'NacosMCP'时指定的名称(例如:"nacos-mcp-python", "mcp-website-fetcher")。
  • 传输协议 (Transport Protocol): 服务器使用的传输协议,例如 "stdio" 或 "sse"。
  • 连接详情 (Connection Details):
    • 对于 'stdio' 协议(本地进程):客户端需要配置用于启动服务器进程的命令及其参数(例如:'python your_server_script.py --transport stdio')。
    • 对于 'sse' 协议(网络服务):客户端需要配置服务器的网络地址和路径。此库会将服务器注册到Nacos服务注册中心(使用服务器名称加 '-mcp-service' 作为服务名),并在Nacos配置中心发布包含服务引用(服务名、组、命名空间)和导出路径的信息。客户端可以通过Nacos服务发现获取实际的网络地址,或直接配置服务注册信息和路径来连接。

基本使用方法

您可以在现有使用 'mcp.server.Server' 或 'mcp.server.FastMCP' 构建的MCP服务器代码基础上进行修改,将服务器类替换为 'NacosServer' 或 'NacosMCP',并提供Nacos连接配置。

以下是使用 'NacosMCP' 的基本示例:

from nacos_mcp_wrapper.server.nacos_mcp import NacosMCP
from nacos_mcp_wrapper.server.nacos_settings import NacosSettings

# 配置Nacos连接信息
nacos_settings = NacosSettings()
nacos_settings.SERVER_ADDR = "<您的Nacos服务器地址,例如: 127.0.0.1:8848>" # 替换为实际地址

# 创建NacosMCP服务器实例
# 参数1: 服务器名称
# 参数2: Nacos配置对象
mcp = NacosMCP("my-awesome-mcp-server", nacos_settings=nacos_settings)

# 使用装饰器注册工具、Prompt、资源等,方式与标准SDK相同
@mcp.tool()
def greet(name: str) -> str:
    """根据提供的名字生成问候语"""
    return f"你好, {name}!"

@mcp.prompt()
def instruct_user() -> str:
    """提供一个简单的用户指令Prompt"""
    return "请根据以下信息回答问题:"

@mcp.resource("file://{filename}")
def get_file_content(filename: str) -> str:
    """读取并返回指定文件的内容"""
    try:
        with open(filename, 'r') as f:
            return f.read()
    except FileNotFoundError:
        return f"错误: 文件 '{filename}' 未找到。"

# 运行服务器,选择传输协议 (例如 "sse" 或 "stdio")
if __name__ == "__main__":
    try:
        # 对于 SSE 协议,需要指定端口
        mcp.run(transport="sse", port=8000)
        # 对于 Stdio 协议
        # mcp.run(transport="stdio")
    except ValueError as e:
        print(f"运行时发生错误: {e}")

运行上述代码后,您的MCP服务器将启动,并将其信息(包括服务地址和服务提供的工具描述等)注册到Nacos。您可以通过修改Nacos配置中心中对应的数据(数据ID格式为 '<服务器名称>-mcp-tools.json'),动态更新工具的描述信息。

信息

分类

开发者工具