明鉴通过 MCP (Model Context Protocol) 2024-11-05 协议将自身能力暴露为工具,供外部 AI 客户端调用。
在 .env 中设置:
PLANAGENT_MCP_ENABLED=true或通过环境变量:
export PLANAGENT_MCP_ENABLED=true| 端点 | 方法 | 说明 |
|---|---|---|
/mcp/sse |
GET | SSE 传输 — 建立服务端事件流连接 |
/mcp/messages |
POST | SSE 传输 — 客户端发送消息(需 ?session_id=) |
/mcp |
POST | Streamable HTTP 传输 — 单端点请求/响应 |
# 1. 建立 SSE 连接
curl -N http://localhost:8000/mcp/sse
# 返回: event: endpoint\ndata: /mcp/messages?session_id=<uuid>\n\n
# 2. 发送 initialize 请求
curl -X POST "http://localhost:8000/mcp/messages?session_id=<uuid>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
# 3. 发送 notifications/initialized 通知
curl -X POST "http://localhost:8000/mcp/messages?session_id=<uuid>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}'
# 4. 列出工具
curl -X POST "http://localhost:8000/mcp/messages?session_id=<uuid>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'# 单端点调用
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'触发明鉴的数据采集、分析和辩论流程,返回任务 ID。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
query |
string | ✅ | — | 决策问题或分析主题 |
domain_id |
string | ❌ | "default" |
领域标识(如 default、military、corporate) |
source_types |
array | ❌ | [] |
指定数据源类型列表,为空则使用全部 |
返回:
{
"content": [
{
"type": "text",
"text": "{\"task_id\": \"uuid\", \"status\": \"submitted\", \"query\": \"...\", \"domain_id\": \"default\", \"message\": \"决策任务已提交...\"}"
}
]
}调用示例:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "submit_task",
"arguments": {
"query": "分析当前 AI 芯片供应链风险",
"domain_id": "default"
}
}
}根据辩论 ID 或关联的任务/模拟运行 ID 获取辩论进度。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
debate_id |
string | ❌* | 辩论会话 ID |
run_id |
string | ❌* | 关联的模拟运行 ID |
claim_id |
string | ❌* | 关联的声明 ID |
*至少提供一个参数
返回:
{
"content": [
{
"type": "text",
"text": "{\"found\": true, \"count\": 1, \"debates\": [{\"debate_id\": \"...\", \"topic\": \"...\", \"status\": \"COMPLETED\", \"verdict\": {...}}]}"
}
]
}调用示例:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "get_debate_status",
"arguments": {
"run_id": "your-run-id-here"
}
}
}返回辩论裁决、用户决策或模拟决策记录。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
run_id |
string | ❌* | — | 模拟运行 ID |
debate_id |
string | ❌* | — | 辩论会话 ID |
session_id |
string | ❌* | — | 战略会话 ID(用户决策) |
limit |
integer | ❌ | 20 |
返回条数上限 |
*至少提供一个参数
返回:
{
"content": [
{
"type": "text",
"text": "{\"decisions\": [...], \"verdicts\": [...], \"user_decisions\": [...], \"total\": 5}"
}
]
}返回包含三个列表:
decisions— 模拟运行中的决策记录(tick、actor、action、reasoning)verdicts— 辩论裁决(decision、confidence、reasoning)user_decisions— 用户手动决策(decision、notes、outcome)
返回所有已注册的数据源类型、状态、健康度和数据统计。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
include_health |
boolean | ❌ | true |
是否包含健康状态详情 |
source_type |
string | ❌ | — | 按数据源类型过滤 |
返回:
{
"content": [
{
"type": "text",
"text": "{\"total\": 8, \"sources\": [{\"key\": \"google_news\", \"label\": \"Google News\", \"available\": true, \"item_count\": 150, \"health\": {\"status\": \"OK\", \"consecutive_failures\": 0}}]}"
}
]
}每个数据源包含:
key— 数据源标识label— 显示名称agent_name— 对应 Agent 名称available— 是否可用item_count— 已采集条目数health— 健康状态(status、consecutive_failures、last_error、last_success_at)
内置数据源:
google_news— Google Newsreddit— Reddithacker_news— Hacker Newsgithub— GitHubrss— RSS 订阅源gdelt— GDELT 全球事件数据库weather— 天气数据aviation— 航空数据x_provider— X (Twitter)linux_do— Linux.doxiaohongshu— 小红书douyin— 抖音
按关键词搜索知识图谱节点和关系,返回结构化知识。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
query |
string | ✅ | — | 搜索关键词 |
node_type |
string | ❌ | — | 节点类型过滤(如 entity、event、concept) |
limit |
integer | ❌ | 20 |
返回结果数量上限 |
include_edges |
boolean | ❌ | true |
是否包含关联边 |
返回:
{
"content": [
{
"type": "text",
"text": "{\"query\": \"AI\", \"node_count\": 5, \"edge_count\": 8, \"nodes\": [...], \"edges\": [...]}"
}
]
}节点结构:
{
"node_key": "entity:openai",
"label": "OpenAI",
"node_type": "entity",
"source_table": "evidence_items",
"source_id": "uuid",
"metadata": {}
}边结构:
{
"source": "entity:openai",
"target": "concept:ai_safety",
"relation": "related_to",
"metadata": {}
}| 错误码 | 说明 |
|---|---|
-32700 |
解析错误 — 无效的 JSON |
-32600 |
无效请求 |
-32601 |
方法不存在 |
-32602 |
无效参数 / 未知工具 |
-32603 |
内部错误 |
| 环境变量 | 默认值 | 说明 |
|---|---|---|
PLANAGENT_MCP_ENABLED |
false |
是否启用 MCP Server |
PLANAGENT_MCP_SERVER_NAME |
MingJian MCP Server |
服务器名称 |
PLANAGENT_MCP_SERVER_VERSION |
0.1.0 |
服务器版本 |
PLANAGENT_MCP_PROTOCOL_VERSION |
2024-11-05 |
MCP 协议版本 |
PLANAGENT_MCP_TRANSPORT |
sse |
传输方式 |
PLANAGENT_MCP_ROUTE_PREFIX |
/mcp |
路由前缀 |
PLANAGENT_MCP_MAX_CONNECTIONS |
50 |
最大并发连接数 |
PLANAGENT_MCP_REQUEST_TIMEOUT |
60.0 |
请求超时(秒) |
PLANAGENT_MCP_LOG_TOOL_CALLS |
true |
是否记录工具调用日志 |
- AI Agent 集成 — 外部 AI Agent(如 Claude、GPT)通过 MCP 协议调用明鉴进行情报分析
- 自动化决策 — 定时任务通过
submit_task提交批量分析请求 - 知识检索 — 其他系统通过
query_knowledge查询明鉴的知识图谱 - 数据源管理 — 通过
list_sources监控数据采集状态 - 结果获取 — 通过
get_decision_result获取自动化决策结果并集成到下游系统