项目简介

本项目是 'langfuse-examples' 仓库中的一个子示例,展示了如何构建一个基于Model Context Protocol (MCP) 的服务器。这个MCP服务器的核心功能是提供一个名为 'search' 的工具,允许连接的LLM客户端通过该工具进行Web搜索。服务器使用 'fastmcp' 框架实现,并通过Stdio协议进行通信。此外,它还集成了Langfuse进行分布式追踪,帮助开发者监控LLM工具调用的性能和行为。

主要功能点

  • Web搜索工具 (Tool):通过封装Exa搜索引擎,提供一个名为 'search' 的工具,LLM可以通过调用此工具执行网络搜索并获取结果。
  • MCP协议支持:实现了MCP服务器端,能够理解并响应LLM客户端的JSON-RPC请求,执行注册的工具。
  • Stdio传输协议:支持通过标准输入输出流与LLM客户端进行通信。
  • Langfuse追踪集成:在工具调用过程中自动生成和发送追踪数据到Langfuse,方便进行可观测性分析。
  • OpenTelemetry上下文传播:通过内部工具方法参数 '_meta' 字段,透明地传播OpenTelemetry追踪上下文,实现完整的分布式追踪链条。

安装步骤

要运行此MCP服务器,您需要具备Python环境并安装相应的依赖:

  1. 克隆仓库
    git clone https://github.com/langfuse/langfuse-examples.git
    cd langfuse-examples/applications/mcp-tracing
  2. 安装依赖
    pip install -r requirements.txt
    # requirements.txt 应该包含 fastmcp, exa-py, langfuse, python-dotenv, opentelemetry-sdk 等
    (注: 'requirements.txt' 文件在提供的仓库内容中未列出,用户需要根据 'search_server.py' 和 'main.py' 的导入自行安装 'fastmcp', 'exa-py', 'langfuse', 'python-dotenv', 'opentelemetry-sdk', 'openinference-instrumentation-openai-agents', 'agents' 等库。)
  3. 配置API密钥: 您需要一个Exa API密钥来启用Web搜索功能。在项目根目录(即 'mcp-tracing' 目录)创建一个 '.env' 文件,并添加以下内容:
    EXA_API_KEY=YOUR_EXA_API_KEY
    如果您希望使用Langfuse进行追踪,还需要设置Langfuse相关的环境变量(通常是 'LANGFUSE_PUBLIC_KEY' 和 'LANGFUSE_SECRET_KEY')。

服务器配置

MCP客户端(例如一个LLM代理框架)需要配置一个JSON对象来连接到此服务器。该对象应包含以下信息,以启动并与之通信:

  • 'name': '"Search server"' (服务器的名称)
  • 'params': 一个包含启动命令和参数的对象
    • 'command': '"fastmcp"' (用于运行MCP服务器的可执行程序。请确保 'fastmcp' 已通过 'pip install fastmcp' 安装并可从您的系统PATH中访问。)
    • 'args': '["run", "--no-banner", "./src/search_server.py"]' (传递给 'fastmcp' 的参数列表。'./src/search_server.py' 指示要运行的MCP服务器实现文件路径,请确保路径相对于MCP客户端的执行上下文是正确的。)
    • 'client_session_timeout_seconds': (可选) 客户端会话超时秒数,例如 '30'。

基本使用方法

  1. 启动MCP服务器: 通常,MCP服务器不会直接单独启动,而是由MCP客户端(例如一个LLM代理框架)在需要时通过 'command' 和 'args' 参数进行管理和启动。 在提供的示例中,'main.py' 文件就是这样一个客户端,它会启动 'search_server.py' 作为MCP服务器。

  2. 通过LLM客户端调用工具: 当MCP客户端连接到此服务器后,LLM代理即可通过MCP协议调用服务器上注册的 'search' 工具。例如,一个LLM代理可能会生成一个包含以下工具调用指令的请求:

    {
      "method": "tool_code/search",
      "params": {
        "query": "最新的人工智能发展"
      },
      "jsonrpc": "2.0",
      "id": "some_request_id"
    }

    MCP服务器会接收这个请求,执行 'search' 函数,并返回Web搜索结果给LLM客户端。

信息

分类

网页与API