MCP 接入
把只读工具与调查 / 分诊 / 解读 / 生成暴露给外部 agent(Claude Desktop、Cursor、自研):Streamable HTTP、按角色签发的令牌、与界面同一套闸与审计。1.9.0 起。
MCP server 是一个随 splunkd 启停的常驻进程(bin/copilot_mcp_server.py,scripted input,interval=-1)。默认关闭;系统设置 → MCP 接入的开关即刻生效。

开关与地址
| 项 | 默认 | 说明 |
|---|---|---|
| 启用 | 关 | 开启拉起进程,关闭结束它 |
| 绑定 | 127.0.0.1 | 只接受回环 / 0.0.0.0 / ::1。要给别的机器用,前置 TLS 反代并在反代上做访问控制;server 本身不做 TLS |
| 端口 | 18100 | |
| 协议 | MCP Streamable HTTP | http://<bind>:<port>/mcp;探活 GET /health 不鉴权 |
令牌与角色
每个请求带 Authorization: Bearer rsk_…。令牌在这一页签发,明文只显示一次,KV 只存 sha256;吊销即刻生效。令牌绑定角色档,签发者签不出高于自己的档:
| 档 | 能调的工具 |
|---|---|
| viewer | list_indexes list_sourcetypes get_fields run_spl search_kb lookup_asset threat_intel generate_spl explain_event |
| analyst | 以上 + investigate_alert triage_alerts |
| admin | 以上(预留) |
无令牌 / 错 / 已吊销 → 401;档位不够 → 工具返回 {"error":"forbidden"}(MCP 没有按工具的 403)。限流复用 [limits] rate_per_min / burst,按令牌计。

工具
| 工具 | 说明 |
|---|---|
list_indexes() | 索引 + 事件数,只列白名单内的 |
list_sourcetypes(index) | 某索引的 sourcetype |
get_fields(index, sourcetype) | 近 24h 真实字段名 + 脱敏样例 |
run_spl(spl) | 只读 SPL,最多 20 行,行已脱敏;delete / collect / outputlookup / sendemail / script / rest … 直接拒 |
search_kb(query, k) | 处置手册 / 知识库检索(含同步进来的 Splunk 对象) |
lookup_asset(entity, kind) | 资产 / 身份上下文 |
threat_intel(indicator, kind) | 威胁情报(只有配了 [threat_intel] 才出网) |
generate_spl(question, index, sourcetype) | 自然语言 → 只读 SPL,与首页同一引擎 |
explain_event(event, sourcetype) | 单条日志解读 |
investigate_alert(alert, context, sourcetype) | 告警调查(时间线 / MITRE / 影响 / FP 判定) |
triage_alerts(alerts[], max_clusters) | 批量分诊聚类打分 |
资源:copilot://kb/{id}、copilot://reports/latest;提示模板:investigate。
安全边界
- 只读:Splunk 侧全部走
bin/tools.py的闸:只读命令过滤、[limits] agentic_index_whitelist、[masking] mode。 - 许可与角色与界面同源:付费工具未激活返回
license_required。 - 每次调用一条审计(
via=mcp),在调用审计里筛。 - 进程以
splunk-system-user跑搜索(Splunk Free 许可没有这个用户,MCP 拿不到会话)。
接入示例
Claude Desktop / Cursor(mcpServers):
{
"mcpServers": {
"splunk-ai-copilot": {
"url": "http://127.0.0.1:18100/mcp",
"headers": { "Authorization": "Bearer <TOKEN>" }
}
}
}Claude Code:
claude mcp add --transport http splunk-ai-copilot http://127.0.0.1:18100/mcp \
--header "Authorization: Bearer <TOKEN>"排障
| 现象 | 看哪里 |
|---|---|
| 开关打开但「未响应」 | index=_internal sourcetype=copilot:mcp / splunkd.log 里 copilot_mcp_server;常见:端口被占、splunk-system-user 不存在 |
| 全部 401 | 令牌已吊销 / 少 Bearer 前缀 |
工具返回 forbidden | 令牌档位不够,换 analyst 令牌 |
license_required | 产品未激活或许可过期 |
refused: index … not in the allowed set | [limits] agentic_index_whitelist 没包含该索引 |