模型上下文协议服务器

一个基于FastMCP构建的模型上下文协议服务器,展示中间件使用和上下文管理功能,适用于需要状态管理和自定义中间件的开发场景。

  • by tomkaith13
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 tomkaith13/sample-mcp-server-client

使用说明

带有上下文的MCP服务器

一个使用FastMCP构建的模型上下文协议(MCP)服务器,用于演示中间件的使用和上下文管理。

概述

这个项目展示了如何构建一个包含以下要素的MCP服务器:

  • 自定义中间件使用认证和请求日志记录 UserAuthMiddleware
  • 上下文管理中间件与工具之间有状态的信息传递
  • HTTP传输端口8888上的Streamable HTTP服务器

特点/特性

  • 自定义中间件 (UserAuthMiddleware):

    • 拦截工具调用、请求和工具列表
    • 记录请求头和元数据
    • 在上下文状态中存储用户认证数据(用户ID、权限)
  • 工具:

    • add带有上下文感知输出的简单加法,显示用户信息
    • calculate_health_savings_account_contributions计算HSA(健康储蓄账户)缴款

安装

# Install dependencies
uv sync

使用方法

运行服务器

uv run main.py

服务器将在 http://localhost:8888 使用可流式传输的HTTP传输。

使用MCP客户端进行测试

python mcp-client.py

建筑学

中间件流程

  1. **on_request(在请求时)**记录传入请求的头部信息和方法
  2. 在工具列表上拦截工具的列表请求
  3. on_call_tool 可以翻译为“呼叫工具”或“应答工具”,具体取决于上下文和该工具的具体功能。在这里,“on_call”可能指的是在呼叫或应答状态下的工具,所以“呼叫工具”或“应答工具”是比较贴切的翻译在工具执行前设置用户上下文(用户ID、权限)

上下文使用

工具可以通过(某种方式)访问中间件设置的状态 Context 对象:

user_id = ctx.get_state("user_id")
permissions = ctx.get_state("permissions")

要求

  • Python >= 3.13(Python版本大于等于3.13)
  • fastmcp >= 2.11.2
  • mcp[cli] >= 1.12.4

项目结构

.
├── main.py           # MCP server with middleware
├── mcp-client.py     # Test client
├── pyproject.toml    # Project configuration
└── README.md         # This file

许可证

请参阅项目文档以了解许可证详细信息。