测试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自动管理)。
现代工作流(推荐)
- 将依赖项直接添加到项目中:
uv pip install
# Example:
uv pip install autogen-ext mcp[cli]此更新 pyproject.toml 和 uv.lock.
- 同步环境:
uv pip install # Installs all dependencies from pyproject.toml- 运行脚本:
uv run src/mcp_server.py
uv run src/mcp_client.py- 升级依赖关系:
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.txt2.运行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.txt2.运行MCP客户端
从项目根目录运行:
- 使用
venv:
cd src
python -m mcp_client- 使用
uv:
cd src
uv run mcp_client.py您应该看到日志输出,指示客户端正在运行并列出可用工具。
克劳德桌面
您可以将Claude Desktop连接到本地stdio MCP服务器以使用自定义工具。
- 编辑
~/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会话。- 重新启动克劳德桌面。
- 调试日志可以在中找到
~/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服务器状态的工具。
- 安装MCP检查器:
npm install -g @modelcontextprotocol/inspector@latest- 运行MCP检查器:
⚠️ 警告: 使用MCP检查器时,所有字符串值都必须用引号输入(例如“worker1”)。 如果您不使用引号,检查员可以发送null或向服务器发送无效值。 点击以下按钮可以验证该值Format JSON按钮。
- ** SSE 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 sse
- Using `uv`:
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`:
cd /Users/chip/dev/test-dh-mcp/src npx @modelcontextprotocol/inspector@latest \ uv run mcp_server.py --transport stdio
