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。MCP 是明文 HTTP,令牌和结果不加密;供其他机器使用时必须前置 TLS 反向代理,并在代理上做访问控制。绑定到非回环地址时进程会在日志中告警 |
| 端口 | 18100 | |
| 协议 | MCP Streamable HTTP | http://<bind>:<port>/mcp。探活 GET /health 不鉴权 |
搜索账号
2.0.4 起,索引类工具(run_spl、list_indexes、list_sourcetypes、get_fields)以一个低权限 Splunk 账号的身份执行,索引权限由 splunkd 强制。
| 步骤 | 说明 |
|---|---|
| 建账号 | 在 Splunk 中新建一个用户,只给 copilot_use 和需要开放给外部 agent 的索引读权限 |
| 建令牌 | 为该账号创建 Splunk 认证令牌(Splunk Web 的设置菜单,令牌页) |
| 填写 | 在本页搜索账号区填账号名与令牌并保存。令牌存入 storage/passwords,只写不回显 |
未配置搜索账号时,这四个工具返回 forbidden,不会退回 system 会话;知识库、资产和大模型类工具不受影响。
令牌与角色
每个请求携带 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 | 同 analyst,预留 |
无令牌、令牌错误或已吊销返回 401;档位不足时工具返回 {"error":"forbidden"}(MCP 没有按工具的 403)。限流复用 [limits] rate_per_min 与 burst,按令牌计。

工具
| 工具 | 说明 |
|---|---|
list_indexes() | 索引与事件数,只列白名单内的 |
list_sourcetypes(index) | 某索引的 sourcetype |
get_fields(index, sourcetype) | 近 24 小时的真实字段名与脱敏样例 |
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、影响、误报判定) |
triage_alerts(alerts[], max_clusters) | 批量分诊聚类评分 |
资源:copilot://kb/{id}、copilot://reports/latest。提示模板:investigate。
安全边界
| 项 | 说明 |
|---|---|
| 只读 | Splunk 侧全部经过只读闸门:首命令必须是只读生成命令,写入、通知、shell、map、宏、dbx*、fit、rest 等在任何管道段和子搜索里都拒绝;另有 [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 前缀 |
run_spl 等返回 forbidden:no MCP search account is configured | 在本页配置搜索账号 |
工具返回 forbidden | 令牌档位不足,改用 analyst 令牌 |
license_required | 产品未激活或许可过期 |
refused: index … not in the allowed set | [limits] agentic_index_whitelist 未包含该索引 |