多通道协议服务器

一个基于FastMCP实现的多通道协议服务器,支持工具注册、服务器/客户端使用以及与Claude Desktop和MCP Inspector的集成。

  • by chipkent
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 chipkent/test-dh-mcp

使用说明

测试dh mcp

本项目演示了如何使用FastMCP实现定义和运行MCP(多通道协议)服务器。它包括工具注册、服务器/客户端使用以及与Claude Desktop和MCP Inspector集成的示例。

项目结构

  • src/mcp_server.py --运行MCP服务器的主要入口点(可配置为SSE或stdio传输)。
  • src/dhmcp/__init__.py --所有工具都使用此处注册 @mcp_server.tool() 装饰师。
  • src/mcp_client.py --测试工具的异步客户端示例。
  • requirements.txt --Python依赖项(包括 mcp[cli] 和 autogen-ext).

使用 uv 用于依赖性管理

uv 是一个现代的、超快速的Python包管理器和运行器。它可以作为pip和venv的直接替代品,提供更快的安装和改进的依赖关系管理。

关键概念

  • pyproject.toml:指定项目依赖关系和元数据的现代推荐方法。uv将此作为真理的来源。
  • requirements.txt:支持与传统Python工具和工作流的兼容性。如果使用,则可选 pyproject.toml.
  • uv.lock:用于可复制安装的锁定文件(由uv自动管理)。

现代工作流(推荐)

  1. 将依赖项直接添加到项目中:
    uv pip install <package>
    # Example:
    uv pip install autogen-ext mcp[cli]
    
    此更新 pyproject.toml 和 uv.lock.
  2. 同步环境:
    uv pip install  # Installs all dependencies from pyproject.toml
    
  3. 运行脚本:
    uv run src/mcp_server.py
    uv run src/mcp_client.py
    
  4. 升级依赖关系:
    uv sync --upgrade
    

兼容性工作流程(requirements.txt)

  • 如果你有一个现有的 requirements.txt,您可以使用:
    uv pip install -r requirements.txt
    # or
    uv add --requirements requirements.txt
    
  • 这将同步依赖关系并更新您的锁文件。您可以保持两个文件同步,以实现最大兼容性。

备注

  • requirements.txt 是 可选的 紫外线。对于新项目,您可以完全依赖 pyproject.toml 和 uv.lock.
  • 对于遗留项目或与pip用户共享,请保留 requirements.txt 最新。
  • uv 在有或没有虚拟环境的情况下工作。使用 uv venv .venv 如果需要,可以创建一个。
  • 如果您有多个环境,请使用 --active 以当前激活的为目标。

快速入门:服务器

1.安装依赖项

建议使用虚拟环境:

  • 使用 venv:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  • 使用 uv:
uv pip install -r requirements.txt

2.运行MCP服务器

从项目根目录运行(选择适合您用例的传输):

  • SSE传输(默认,适用于浏览器/web客户端):

    python src/mcp_server.py
    # or, explicitly:
    python src/mcp_server.py --transport sse
    # or, using uv:
    uv run src/mcp_server.py
    

    服务器将监听http://localhost:8000/sse

  • 标准传输(建议用于克劳德桌面/检查器):

    python src/mcp_server.py --transport stdio
    # or, using uv:
    uv run src/mcp_server.py --transport stdio
    

    服务器将通过stdio进行通信(不需要HTTP端口)。

您应该看到日志输出,指示服务器正在使用所选传输运行。

快速入门:客户端

注: Python客户端(mcp_client.py)要求MCP服务器在中运行 SSE模式 (默认设置)。如果服务器在stdio模式下运行,它将无法工作。

1.安装依赖项

建议使用虚拟环境:

  • 使用 venv:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  • 使用 uv:
uv pip install -r requirements.txt

2.运行MCP客户端

从项目根目录运行:

  • 使用 venv:
cd src
python -m mcp_client
  • 使用 uv:
cd src
uv run mcp_client.py

您应该看到日志输出,指示客户端正在运行并列出可用工具。

克劳德桌面

您可以将Claude Desktop连接到本地stdio MCP服务器以使用自定义工具。

  1. 编辑 ~/Library/Application\ Support/Claude/claude_desktop_config.json 添加您的MCP服务器。Deephaven worker配置现在完全通过JSON配置文件处理,并且必须使用所需的指定路径 DH_MCP_CONFIG_FILE 环境变量。没有默认路径——必须始终设置此环境变量。

    克劳德桌面配置示例(使用venv):

    {
      "mcpServers": {
        "test-dh-mcp": {
          "command": "/Users/chip/dev/test-dh-mcp/.venv/bin/python3",
          "args": ["/Users/chip/dev/test-dh-mcp/src/mcp_server.py", "--transport", "stdio"],
          "env": {
            "DH_MCP_CONFIG_FILE": "/Users/chip/dev/test-dh-mcp/deephaven_workers.json"
          }
        }
      }
    }
    

    或与 uv:

    {
      "mcpServers": {
        "test-dh-mcp": {
          "command": "uv",
          "args": [
            "--directory",
            "/Users/chip/dev/test-dh-mcp/src",
            "run",
            "mcp_server.py",
            "--transport",
            "stdio"
          ],
          "env": {
            "DH_MCP_CONFIG_FILE": "/Users/chip/dev/test-dh-mcp/deephaven_workers.json"
          }
        }
      }
    }
    

    注意:始终设置 DH_MCP_CONFIG_FILE 在 env 如果您的配置未命名,请参阅部分 deephaven_workers.json 在项目根目录中,或者如果你想明确配置位置。

       "args": [
         "--directory",
         "/Users/chip/dev/test-dh-mcp/src",
         "run", 
         "mcp_server.py", 
         "--transport", 
         "stdio"
       ],
       "env": {
         "DH_MCP_SERVER_NAME": "test-dh-mcp",
         "DH_MCP_HOST": "localhost",
         "DH_MCP_PORT": "10000",
         "DH_MCP_AUTH_TYPE": "Anonymous"
       }
     }
    

    } }

    
    

注: 全部 DH_MCP_* Deephaven会话配置部分中列出的环境变量可以在此处设置。这些控制着每次工具调用的Deephaven会话。

  1. 重新启动克劳德桌面。
  2. 调试日志可以在中找到 ~/Library/Logs/Claude/

Deephaven Worker配置

所有Deephaven worker配置现在都通过JSON文件处理。必须使用指定此文件的路径 DH_MCP_CONFIG_FILE 环境变量。没有默认路径,此变量是必需的。

配置文件应该如下所示:

{
  "workers": {
    "worker1": {
      "host": "localhost",
      "port": 10000,
      "auth_type": "Anonymous",
      "auth_token": "",
      "never_timeout": true
    },
    "worker2": {
      "host": "otherhost",
      "port": 10001,
      "auth_type": "Bearer",
      "auth_token": "YOUR_TOKEN"
    }
  },
  "default_worker": "worker1"
}
  • 这 workers 对象将工作者名称映射到他们的连接设置。
  • 这 default_worker 是可选的,如果在工具调用中未指定worker名称,则使用它。如果设置,它必须与 workers 字典。

重要提示: 这 DH_MCP_CONFIG_FILE 环境变量必须始终设置为worker配置文件的路径。没有默认配置路径。

每个工人支持的字段:

字段 类型 描述
host str Deephaven服务器主机名或IP(可选)
port int Deephaven服务器端口(可选)
auth_type str 认证类型(例如。, Anonymous, Bearer)(可选)
auth_token str 身份验证令牌(可选)
never_timeout bool 会话是否永远不会超时(可选,默认值:True)
session_type str 会话类型。, python (可选,默认:“python”)
use_tls bool 是否使用TLS/SSL(可选,默认值:False)
tls_root_certs str 或 null TLS根证书的路径(可选)
client_cert_chain str 或 null 客户端证书链的路径(可选)
client_private_key str 或 null 客户端私钥路径(可选)

注意:根据您的用例和身份验证方法,您可以仅使用这些字段的一个子集来定义worker。没有严格要求的字段;将尽可能使用默认值。

工具使用

  • echo_tool(message: str) -> str:回显输入消息,前缀为“回显:”。
  • gnome_count_colorado() -> int:返回科罗拉多州当前的侏儒数量(演示工具)。
  • deephaven_worker_names() -> list[str]:从配置文件中返回所有已配置的Deephaven worker名称。
  • deephaven_default_worker() -> str:返回配置中设置的默认worker的名称(如果未设置,则返回None)。
  • deephaven_list_tables(worker_name: str = None) -> list:列出指定worker的表名。如果 worker_name 未提供,使用config中的default_worker。
  • deephaven_table_schemas(worker_name: str = None) -> list:返回指定worker中所有表的架构。如果 worker_name 未提供,使用config中的default_worker。

有关如何设置多个worker,请参阅上面的示例配置文件。

注册工具

在中定义新工具 dhmcp/__init__.py 使用 @mcp_server.tool() 装饰师。例子:

@mcp_server.tool()
def echo_tool(message: str) -> str:
    """
    Echo tool that returns the input message prefixed with 'Echo:'.
    """
    return f"Echo: {message}"

故障排除

  • 确保从正确的目录运行命令(src 用于直接脚本执行)。
  • 如果更改工具定义,请重新启动服务器。
  • 对于连接问题,请检查服务器是否正在预期的地址/端口上运行和侦听(对于SSE),或者是否通过stdio正确连接(对于Claude/Inspector)。

服务器正在运行吗?

  • SSE模式:
    curl http://localhost:8000/sse
    
  • 标准模式:
    • 检查您的Claude/Inspector日志,查看是否成功连接和工具列表。

MCP检查员

MCP检查器是一个允许您检查MCP服务器状态的工具。

  1. 安装MCP检查器:

    npm install -g @modelcontextprotocol/inspector@latest
    
  2. 运行MCP检查器:

⚠️ 警告: 使用MCP检查器时,所有字符串值都必须用引号输入(例如“worker1”)。 如果您不使用引号,检查员可以发送 null 或向服务器发送无效值。 点击以下按钮可以验证该值 Format JSON 按钮。

- ** SSE mode: **

    - Using `venv`:

    ```bash
    cd /Users/chip/dev/test-dh-mcp/src
    npx @modelcontextprotocol/inspector@latest \
    /Users/chip/dev/test-dh-mcp/venv/bin/python3 mcp_server.py --transport sse
    ```

    - Using `uv`:

    ```bash
    cd /Users/chip/dev/test-dh-mcp/src
    npx @modelcontextprotocol/inspector@latest \
    uv run mcp_server.py --transport sse
    ```

- ** Stdio mode: **

    - Using `venv`:

    ```
    cd /Users/chip/dev/test-dh-mcp/src
    npx @modelcontextprotocol/inspector@latest \
    /Users/chip/dev/test-dh-mcp/venv/bin/python3 mcp_server.py --transport stdio
    ```

    - Using `uv`:

    ```bash
    cd /Users/chip/dev/test-dh-mcp/src
    npx @modelcontextprotocol/inspector@latest \
    uv run mcp_server.py --transport stdio
    ```