领事MCP服务器
用于与HashiCorp Consul交互的模型上下文协议(MCP)服务器。该服务器使AI助手和其他MCP客户端能够通过标准化的协议接口管理Consul服务、键值存储和集群信息。
特性
- MCP协议支持:使用SSE(服务器发送事件)传输完全实现模型上下文协议
- 服务管理:注册、注销和查询Consul服务
- 键值存储:对Consul KV存储进行读取、写入、列出和删除操作
- 集群信息:查询节点和服务运行状况
- 服务元数据和标签:管理服务实例元数据和标签
- Docker支持:使用Docker Compose轻松部署
- 健康检查:用于监控的内置健康检查端点
需求
- Python 3.11+
- HashiCorp Consul(本地或远程实例)
- Docker和Docker Compose(可选,用于容器化部署)
安装
使用Docker Compose(推荐)
最简单的入门方法是使用Docker Compose,它将启动Consul和MCP服务器:
docker-compose up -d这将:
- 在端口8500上以开发模式启动Consul实例
- 在端口8080上启动Consul MCP服务器
- 配置容器之间的网络
手动安装
- 克隆存储库:
git clone
cd consul-mcp- 安装依赖项:
pip install -r requirements.txt- 设置环境变量(可选):
export CONSUL_HOST=localhost
export CONSUL_PORT=8500
export CONSUL_TOKEN=your-token # Optional
export CONSUL_DC=dc1 # Optional
export PORT=8080
export HOST=0.0.0.0
export LOG_LEVEL=INFO- 运行服务器:
python server.py配置
可以使用环境变量配置服务器:
Consul配置
CONSUL_HOST:领事主机地址(默认值:localhost)CONSUL_PORT:领事端口(默认值:8500)CONSUL_TOKEN:领事ACL令牌(可选)CONSUL_DC:领事数据中心(可选)
服务器配置
HOST:服务器绑定地址(默认值:0.0.0.0)PORT:服务器端口(默认值:8080)SSE_ENDPOINT:SSE端点路径(默认值:/sse)MESSAGES_ENDPOINT:消息端点路径(默认值:/messages)HEALTH_ENDPOINT:健康检查终结点路径(默认值:/health)
日志记录配置
LOG_LEVEL:日志记录级别(默认值:INFO)LOG_FILE_ENABLE:启用文件日志记录(默认值:false)LOG_FILE:日志文件路径(可选)
API终点
健康检查
GET /health返回服务器和Consul连接的运行状况。
答复:
{
"status": "healthy",
"consul": "connected"
}SSE端点
GET /sseMCP协议通信的服务器发送事件端点。
消息端点
POST /messages用于向MCP服务器发送消息的端点。
MCP工具
服务器为Consul操作提供以下MCP工具:
服务管理
list_services:列出在Consul中注册的所有服务get_service:获取特定服务的详细信息get_service_instance_count:仅获取一个服务的实例计数(轻量级,用于统计)get_monitoring_summary:获取监控统计信息:每个服务实例的计数和总计,不包括完整的实例数据。 使用它来计数监视条目(例如普罗米修斯发现),以避免上下文溢出。register_service:在Consul中注册新服务deregister_service:从领事处注销服务get_service_health:获取服务的健康状态
服务元数据和标签
get_service_meta:获取服务实例的所有元数据set_service_meta_key:为服务实例设置或更新一个元数据密钥set_service_meta_bulk:为服务实例设置或更新多个元数据键delete_service_meta_key:删除服务实例的一个元数据密钥list_service_meta_keys:列出服务实例的所有元数据键get_service_tags:获取服务实例的标签set_service_tags:覆盖服务实例的标签
键值存储
get_kv:从Consul KV存储中获取键值对put_kv:在Consul KV存储中存储键值对list_kv:列出Consul KV存储中的所有密钥(可选带前缀)delete_kv:从Consul KV存储中删除密钥
集群信息
get_nodes:获取Consul集群中的节点列表
MCP资源
服务器提供MCP资源用于访问Consul数据。看 mcp_resources.py 对于可用资源。
MCP提示
服务器为常见的Consul操作提供MCP提示:
service_discovery:发现并列出服务(可选数据中心)。service_health_check:检查服务的运行状况(service_name,可选数据中心)。monitoring_summary:获取监控统计数据(每个服务实例的计数和总数)。用于在不加载完整实例列表的情况下计数监视条目。monitoring_agent_instructions:获取监控AI代理的系统说明(如何使用摘要工具避免上下文溢出)。
有关配置监视AI代理的复制粘贴提示,请参阅 prompts/monitoring_agent_instructions.md.
使用示例
与MCP客户端一起使用
使用MCP兼容客户端连接到服务器:
# Example MCP client connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.sse import sse_client
# Connect via SSE
async with sse_client("http://localhost:8080/sse") as (read, write):
async with ClientSession(read, write) as session:
# List available tools
tools = await session.list_tools()
print(f"Available tools: {[t.name for t in tools.tools]}")
# Call a tool
result = await session.call_tool("list_services", {})
print(result)直接HTTP使用
您还可以通过HTTP直接与服务器交互:
# Health check
curl http://localhost:8080/health
# List services (via MCP protocol)
curl -X POST http://localhost:8080/messages \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'发展
项目结构
consul-mcp/
├── server.py # Main server application
├── config.py # Configuration management
├── consul_client.py # Consul client wrapper
├── mcp_tools.py # MCP tools definitions
├── mcp_resources.py # MCP resources definitions
├── mcp_prompts.py # MCP prompts definitions
├── sse_handler.py # SSE transport handler
├── logging_config.py # Logging configuration
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image definition
└── docker-compose.yml # Docker Compose configuration运行测试
# Run health check
curl http://localhost:8080/health构建Docker镜像
docker build -t consul-mcp-server .故障排除
连接问题
如果服务器无法连接到Consul:
- 验证Consul是否正在运行:
curl http://localhost:8500/v1/status/leader- 检查环境变量:
echo $CONSUL_HOST
echo $CONSUL_PORT- 检查服务器日志中的连接错误
苏格兰和南方能源公司运输问题
如果SSE传输不可用:
- 确保
mcp安装了软件包版本>=1.0.0 - 检查一下
sse-starlette已安装 - 检查服务器日志中的传输初始化错误
许可证
\[在此处添加您的许可证\]
贡献
\[在此处添加贡献指南\]
