MCP服务器演示

一个使用FastMCP框架实现的MCP服务器演示项目,提供基本算术工具和动态问候资源。

  • by dcvii
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 dcvii/mcp-server-demo

使用说明

MCP服务器演示

一个演示项目,展示了使用FastMCP的模型上下文协议(MCP)服务器实现。

概述

本项目演示了如何使用FastMCP框架构建一个简单的MCP服务器。该服务器提供:

  • 一个基本的算术工具(add)将两个整数相加
  • 生成个性化问候的动态问候资源

什么是MCP?

模型上下文协议(MCP)是用于将AI模型与外部工具和资源连接的标准化协议。它能够:

  • 工具:AI模型可以调用的函数来执行操作
  • 资源:AI模型可以读取的数据源
  • 鼓励:AI交互模板

项目结构

mcp-server-demo/
├── README.md          # This file
├── pyproject.toml     # Project configuration and dependencies
├── uv.lock           # Dependency lock file
├── main.py           # Simple entry point
├── server.py         # MCP server implementation
├── .python-version   # Python version specification (3.12)
├── .gitignore        # Git ignore patterns
└── prompt/           # Status reports directory

特性

工具

  • add(a:int,b:int)->int:将两个整数相加并返回结果

资源

  • 问候语://{姓名}:为指定名称生成问候消息的动态资源

需求

  • Python 3.12+(指定于 .python-version)
  • uv(用于依赖性管理)
  • 带CLI附加功能的MCP库

依赖项

该项目使用以下主要依赖项:

  • mcp[cli]>=1.9.0:支持CLI的模型上下文协议库

关键传递依赖关系:

  • anyio:异步I/O库
  • httpx:HTTP客户端库
  • pydantic:数据验证库
  • starlette:Web框架
  • uvicorn:ASGI服务器
  • typer:CLI框架

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd mcp-server-demo
    
  2. 使用uv安装依赖项:

    uv sync
    

用法

运行基本脚本

uv run python main.py

这将输出: Hello from mcp-server-demo!

运行MCP服务器

服务器可以在不同的模式下运行:

STDIO模式(标准输入/输出)

uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_stdio_async())"

SSE模式(服务器发送事件)

uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_sse_async())"

HTTP流模式

uv run python -c "from server import mcp; import asyncio; asyncio.run(mcp.run_streamable_http_async())"

测试服务器功能

您可以通过编程方式测试服务器组件:

from server import mcp
import asyncio

async def test_server():
    # Test the add tool
    result = await mcp.call_tool('add', {'a': 5, 'b': 3})
    print(f"5 + 3 = {result}")
    
    # Test the greeting resource
    greeting = await mcp.read_resource('greeting://World')
    print(greeting)

# Run the test
asyncio.run(test_server())

代码示例

服务器实现(Server.py)

from mcp.server.fastmcp import FastMCP

# Create an MCP server instance
mcp = FastMCP("Demo")

# Define a tool (function that can be called)
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two integers together."""
    return a + b

# Define a dynamic resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Generate a personalized greeting."""
    return f"Hello, {name}!"

主入口点(Main.py)

def main():
    print("Hello from mcp-server-demo!")

if __name__ == "__main__":
    main()

发展

建立发展环境

  1. 确保您已安装Python 3.12+
  2. 安装紫外线: curl -LsSf https://astral.sh/uv/install.sh | sh
  3. 克隆存储库并安装依赖项:
    git clone <repository-url>
    cd mcp-server-demo
    uv sync
    

项目配置

该项目使用 pyproject.toml 配置:

[project]
name = "mcp-server-demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "mcp[cli]>=1.9.0",
]

添加新工具

要向服务器添加新工具,请执行以下操作:

@mcp.tool()
def your_tool_name(param1: type, param2: type) -> return_type:
    """Tool description."""
    # Your implementation here
    return result

添加新资源

要添加新资源,请执行以下操作:

@mcp.resource("resource://pattern/{param}")
def get_resource(param: str) -> str:
    """Resource description."""
    # Your implementation here
    return resource_content

建筑

MCP服务器是使用FastMCP框架构建的,该框架提供:

  • 异步支持:基于asyncio构建,用于并发操作
  • 多种运输方式:STDIO、SSE和HTTP流媒体
  • 类型安全:使用Pydantic进行数据验证
  • 易于集成:工具和资源的简单装饰器

故障排除

常见问题

  1. Python版本:确保你使用的是Python 3.12+
  2. 依赖项:运行 uv sync 安装所有依赖项
  3. 导入错误:确保您在正确的目录中并使用 uv run

开发技巧

  • 使用 uv run 在项目环境中执行Python脚本
  • 服务器函数是异步的,因此使用 asyncio.run() 用于测试
  • 检查 prompt/ 开发过程中的状态报告目录

许可证

该项目仅用于演示目的。请检查MCP库许可证的使用权限。

贡献

这是一个演示项目。有关对MCP库本身的贡献,请参阅主MCP存储库。

资源


最后更新时间:2024-07-16