mcpField
M
MCP_Server_Setup

MCP_Server_Setup

本地服务
github.com/DikshantBadawadagi开发工具080 周前更新

关于 MCP_Server_Setup

MCP_Server_Setup 是 Python MCP 服务的搭建与运行示例,面向开发者。内容涵盖工具和资源定义、测试及客户端连接,展示 stdio 与 SSE 传输方式。

主要功能

  1. 01定义 MCP 工具与资源
  2. 02使用 MCP Inspector 测试
  3. 03安装到 Claude Desktop
  4. 04支持 stdio 与 SSE 传输

适用场景

  1. 01本地测试 MCP 服务
  2. 02将服务接入 Claude Desktop
  3. 03让客户端通过 stdio 或 SSE 连接

MCP 相关

介绍如何构建 MCP 服务,以及通过 stdio 或 SSE 连接 MCP 客户端。服务可向客户端提供定义的工具和资源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("DemoServer")

@mcp.tool()
def say_hello(name: str) -> str:
    """Say hello to someone

    Args:
        name: The person's name to greet
    """
    return f"Hello, {name}! Nice to meet you."

if __name__ == "__main__":
    mcp.run()
运行服务

运行 MCP 服务有几种方式:

1. 使用 MCP Inspector 进行开发模式运行

测试服务最简单的方式是使用 MCP Inspector:

mcp dev server.py

这会在本地运行服务,并将其连接到 MCP Inspector。MCP Inspector 是一款基于 Web 的工具,可让你直接与服务的工具和资源交互。这种方式非常适合测试。

2. 集成 Claude Desktop

如果已安装 Claude Desktop,可以安装服务并在 Claude 中使用:

mcp install server.py

这会将服务添加到 Claude Desktop 的配置中,以便在 Claude 中使用。

3. 直接执行(仅在需要 SSE 时)

你也可以直接运行服务:

# Method 1: Running as a Python script
python server.py

# Method 2: Using UV (recommended)
uv run server.py
运行 MCP 服务时会发生什么?

运行 MCP 服务时:

  1. 服务会使用已定义的功能(工具、资源等)进行初始化。
  2. 服务会开始通过特定传输方式侦听连接。

默认情况下,MCP 服务不会使用传统 Web 服务端口,而是使用以下任一种方式:

  • stdio 传输:服务通过标准输入和输出进行通信(mcp run 和集成 Claude Desktop 时的默认方式)
  • SSE 传输:用于基于 HTTP 的通信(显式配置时使用)

如果要通过 HTTP 使用特定端口公开服务,需要将服务修改为使用 SSE 传输:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("MyServer", host="127.0.0.1", port=8050)

# Add your tools and resources here...

if __name__ == "__main__":
    # Run with SSE transport on port 8000
    mcp.run(transport="sse")

然后可以通过以下命令运行:

python server.py

这会在 http://127.0.0.1:8050 启动服务。

客户端实现(使用标准 I/O)

接下来,看看如何创建一个使用该服务的客户端:

import asyncio
import nest_asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    server_params = StdioServerParameters(
        command="python",  # The command to run your server
        args=["server.py"],  # Arguments to the command
    )

    async with stdio_client(server_params) as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()

            tools_result = await session.list_tools()
            print("Available tools:")
            for tool in tools_result.tools:
                print(f"  - {tool.name}: {tool.description}")

            result = await session.call_tool("add", arguments={"a": 2, "b": 3})
            print(f"2 + 3 = {result.content[0].text}")


if __name__ == "__main__":
    asyncio.run(main())

此客户端会:

  1. 通过 stdio 与服务建立连接
  2. 建立 MCP 会话
  3. 列出可用工具
  4. 使用参数调用 add 工具
客户端实现(使用服务器发送事件)

以下是使用 SSE 连接到服务的方法:

import asyncio
import nest_asyncio
from mcp import ClientSession
from mcp.client.sse import sse_client

async def main():
    async with sse_client("http://localhost:8050/sse") as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()

            tools_result = await session.list_tools()
            print("Available tools:")
            for tool in tools_result.tools:
                print(f"  - {tool.name}: {tool.description}")

            result = await session.call_tool("add", arguments={"a": 2, "b": 3})
            print(f"2 + 3 = {result.content[0].text}")


if __name__ == "__main__":
    asyncio.run(main())
应该选择哪种方式?
  • 如果客户端和服务在同一进程中运行,或者由客户端直接启动服务进程,请使用 stdio。
  • 如果服务与客户端分开运行(可能位于不同机器或不同容器中),请使用 HTTP。

对于大多数生产环境中的后端集成,HTTP 方式的隔离性和可扩展性更好,而 stdio 方式对于开发或紧密耦合的系统来说可能更简单。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。