项目简介

这个MCP服务器示例展示了如何使用Model Context Protocol框架构建一个后端服务。它当前实现了一个简单的笔记管理系统,允许大型语言模型(LLM)客户端通过标准化的MCP协议来列出、读取笔记资源,请求笔记总结的提示,以及通过工具添加新的笔记。该服务是'awesome-development-cooperation-data'仓库中IATI相关数据上下文服务的一个组成部分或基础示例。

主要功能点

  • 资源管理: 托管和管理用户创建的文本笔记,每条笔记都可以作为资源被LLM客户端访问。
  • 工具调用: 提供一个名为 'add-note' 的工具,允许LLM客户端创建新的笔记条目,从而更新服务器状态。
  • 提示模板: 提供一个名为 'summarize-notes' 的提示模板,可根据需要(例如,选择 'brief' 或 'detailed' 样式)生成当前所有笔记的总结内容,供LLM客户端使用。
  • 协议通信: 通过JSON-RPC协议与LLM客户端进行通信,支持标准输入/输出流传输。

安装步骤

  1. 克隆仓库: 首先,你需要克隆整个'awesome-development-cooperation-data' GitHub仓库到本地:
    git clone https://github.com/datenlabor-bmz/awesome-development-cooperation-data.git
    cd awesome-development-cooperation-data
  2. 安装依赖: 进入MCP服务器的根目录(即包含 'mcp_server_iati' 文件夹的目录),并安装其Python依赖:
    cd interfaces/iati
    pip install "mcp-server[stdio]" pydantic
    • 'mcp-server[stdio]':安装MCP服务器框架及其标准输入/输出传输协议支持。
    • 'pydantic':这是一个Python数据验证和设置管理库,用于处理MCP协议中的数据模型,如 'AnyUrl'。
  3. 运行服务器: 在 'interfaces/iati' 目录下,你可以直接以模块方式运行服务器:
    python -m mcp_server_iati.server
    服务器将通过标准输入/输出流等待MCP客户端连接和通信。

服务器配置(供MCP客户端使用)

MCP客户端需要以下配置信息来连接并使用此MCP服务器。这些信息通常以JSON格式提供给MCP客户端:

{
  "server_name": "mcp-server-iati",
  "command": "python",
  "args": [
    "-m",
    "mcp_server_iati.server"
  ],
  "description": "一个简单的MCP笔记服务器,用于管理和交互文本笔记。",
  "root_path": "interfaces/iati"
}
  • 'server_name': 服务器的唯一标识符,本例中为 'mcp-server-iati'。
  • 'command': 启动服务器所需的命令,本例中为 'python'。
  • 'args': 传递给命令的参数列表,指定以模块方式运行 'mcp_server_iati.server'。
  • 'description': 对服务器功能的简要描述。
  • 'root_path': (可选)如果MCP客户端需要在特定目录下启动服务器,可以指定服务器代码的根路径。

基本使用方法

一旦MCP客户端连接到这个服务器,LLM就可以执行以下操作:

  1. 添加笔记: LLM可以调用名为 'add-note' 的工具,提供 'name'(笔记名称)和 'content'(笔记内容)作为参数来创建新笔记。
    • 示例请求: LLM可能会发送一个请求,调用 'add-note' 工具,参数为 '{"name": "Meeting Summary", "content": "Discussed project roadmap and next steps."}'。
  2. 列出笔记: LLM可以请求服务器列出所有可用的笔记资源。
  3. 读取笔记: LLM可以通过 'note://internal/笔记名称' 格式的URI来读取特定笔记的内容。
    • 示例请求: LLM可以请求读取资源 'note://internal/Meeting Summary'。
  4. 总结笔记: LLM可以请求 'summarize-notes' 提示,并可选地提供 'style' 参数('brief' 或 'detailed')来获取所有当前笔记的总结。
    • 示例请求: LLM可以请求 'summarize-notes' 提示,参数为 '{"style": "detailed"}'。

信息

分类

生产力应用