Delphix DCT MCP服务器(Docker化)
该项目提供了一个Docker容器,它封装了Delphix DCT模型上下文协议(MCP)服务器,公开了一个HTTP接口,以促进与n8n等编排工具的集成,这些工具本机不支持 stdio 沟通。
建筑
该项目在同一容器中使用“Sidecar Wrapper”模式:
- HTTP包装器(FastAPI):侦听端口8000上的POST请求。
- 主管:管理进程以确保(包装器和MCP服务器)始终运行。
- FIFO管道:HTTP包装器和MCP服务器(Python)之间的通信是通过命名管道处理的(
mkfifo)at/tmp/mcp_in和/tmp/mcp_out. - 持久性:包装器保持与MCP服务器的持久连接
stdin,允许长期、经过身份验证的会话。
先决条件
- 您的系统上安装了Docker或Podman。
塑造形象
要在本地构建映像,请运行:
sudo podman build -t dxi-mcpsrv-docker .(您可以替换 podman 和 docker 如果这是您的首选运行时)。
运行容器
容器需要某些环境变量才能正确连接到Delphix DCT API。
sudo podman run -d \
-p 8099:8000 \
--name dxi-mcpsrv-docker \
-e DCT_API_KEY="your-api-key-here" \
-e DCT_BASE_URL="https://your-dct-server.com" \
-e DCT_VERIFY_SSL="false" \
-e DCT_LOG_LEVEL="INFO" \
localhost/dxi-mcpsrv-docker环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
DCT_API_KEY | 必需.在Delphix DCT中生成的API密钥。 | - |
DCT_BASE_URL | 必需DCT实例的基本URL。 | - |
DCT_VERIFY_SSL | 验证DCT服务器的SSL证书。 | false |
DCT_LOG_LEVEL | 日志详细级别(调试、信息、错误)。 | INFO |
API使用
服务器公开了一个主端点: POST /mcp.
1.初始化
重要提示: 在执行任何工具之前,您必须发送初始化消息以建立会话。
curl -s -X POST http://localhost:8099/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":"init-1",
"method":"initialize",
"params":{
"protocolVersion":"2024-11-05",
"capabilities":{"tools":{"call":true,"list":true}},
"clientInfo":{"name":"cli","version":"0.1"}
}
}'2.调用工具
初始化后,您可以调用可用的工具。例如,使用 search_engines:
curl -s -X POST http://localhost:8099/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":"query-1",
"method":"tools/call",
"params":{
"name":"search_engines",
"arguments":{"limit":5}
}
}' | jq .3.筛选搜索(示例)
您可以使用 filter_expression 优化你的搜索的论点。例如,要查找“虚拟化”类型的引擎:
curl -s -X POST http://localhost:8099/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "search-filter",
"method": "tools/call",
"params": {
"name": "search_engines",
"arguments": {
"filter_expression": "type EQ '\''VIRTUALIZATION'\''"
}
}
}' | jq .4.搜索数据源(Oracle示例)
要搜索特定的数据源,如Oracle数据库,请执行以下操作:
curl -s -X POST http://localhost:8099/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "search-dsource",
"method": "tools/call",
"params": {
"name": "search_dsources",
"arguments": {
"filter_expression": "database_type EQ '\''Oracle'\''"
}
}
}' | jq .5.搜索虚拟数据库(Oracle示例)
要搜索虚拟数据库(VDB),例如Oracle数据库,请执行以下操作:
curl -s -X POST http://localhost:8099/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "search-dsource",
"method": "tools/call",
"params": {
"name": "search_vdbs",
"arguments": {
"filter_expression": "database_type EQ '\''Oracle'\''"
}
}
}' | jq .n8n集成
我们在此存储库中提供了一个即用型n8n工作流文件: Delphix DCT MCP Integration.json.
1.导入工作流
- 打开n8n编辑器。
- 首选 工作流菜单 > 从导入。.. > 文件.
- 选择
Delphix DCT MCP Integration.json此存储库中的文件。 - 工作流包括以下节点:
- 初始化:设立会议。 - 工具调用:示例查询(搜索引擎)。 - 解析响应:将MCP字符串输出转换为可用JSON对象的关键步骤。
2.工作流程逻辑
因为MCP协议返回的结果是字符串化的 text 字段,我们使用Code节点来解析它:
const mcpResponse = $input.first().json;
const rawText = mcpResponse.result.content[0].text;
return JSON.parse(rawText);3.结果
最终输出是一个干净的JSON对象,可供后续n8n节点使用。
故障排除
容器日志
如果遇到问题,请检查容器日志,查看包装器和内部MCP服务器的输出:
sudo podman logs -f dxi-mcpsrv-docker连接重置
如果内部MCP服务器发生故障或断开连接,包装器将返回500错误,指示“管道破裂”。在这种情况下,重新启动容器将使其重置为干净状态。
