MCP脚本服务

提供Emacs Lisp评估和Splunk查询功能的本地MCP服务器脚本集合。

  • by ChetanKoneru
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 CsBigDataHub/my-mcps

使用说明

MCP脚本

此仓库包含两个本地MCP服务器:

  • elisp-eval-server.py:在正在运行的Emacs服务器中通过以下方式评估Emacs Lisp emacsclient
  • splunk-mcp.py:在macOS上借用Microsoft Edge会话Cookie查询Splunk

外露工具

elisp-eval-server.py

主要工具:

  • emacs-elisp-eval

兼容性别名仍被接受 tools/call:

  • elisp-eval

它的作用:

  • 在当前Emacs服务器中评估Emacs Lisp
  • 返回最后一个表达式结果
  • 包括任何新 *Messages* 评估过程中产生的输出

splunk-mcp.py

工具:

  • splunk-search
  • splunk-indexes
  • splunk-search-metadata
  • splunk-server-info

他们做什么:

  • splunk-search:运行SPL查询并返回格式化结果
  • splunk-indexes:列出具有事件计数和大小的索引
  • splunk-search-metadata:显示索引的顶级主机、源和源类型
  • splunk-server-info:返回活动的MCP服务器运行时配置,包括所选的Splunk主机

需求

共同

  • python 3.10+
  • 支持stdio服务器的MCP客户端

对于 elisp-eval-server.py

  • macOS
  • 已安装Emacs
  • 运行Emacs服务器
  • emacsclient 可用网址:
/Applications/Emacs.app/Contents/MacOS/bin/emacsclient

对于 splunk-mcp.py

  • macOS
  • 已安装Microsoft Edge
  • 在Edge中为目标Splunk主机激活Splunk web会话
  • security macOS提供的CLI
  • openssl 可用 PATH
  • 由环境变量或CLI参数提供的目标Splunk主机

环境变量示例:

export SPLUNK_HOST="myorg.splunkcloud.com"

CLI参数示例:

python3 /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py \
  --host myorg.splunkcloud.com \
  --server-name splunk

重要提示:

  • splunk-mcp.py 从您的本地个人资料中读取和解密Edge Cookie
  • 它被有意绑定到所选Splunk主机的登录边缘会话
  • 如果Edge已注销,或者该主机的Cookie不存在,服务器将无法进行身份验证
  • 如果您注册了多个使用相同脚本的MCP服务器,请首选 --host 通过仅env配置,每个实例都明确地固定到自己的主机上

直接运行

这两个脚本都是stdio MCP服务器。它们不会启动HTTP侦听器。

示例:

python3 /Users/ckoneru/GitRepos/myprojects/mybbscripts/elisp-eval-server.py

环境变量示例:

SPLUNK_HOST="myorg.splunkcloud.com" \
python3 /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py

参数示例:

python3 /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py \
  --host myorg.splunkcloud.com \
  --server-name splunk

配置克劳德代码

Claude Code支持项目范围 .mcp.json 文件和基于CLI的MCP注册。

方案1:项目 .mcp.json

创建 .mcp.json 在repo根目录中。

使用环境变量的示例:

{
  "mcpServers": {
    "emacs-elisp": {
      "type": "stdio",
      "command": "python3",
      "args": [
        "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/elisp-eval-server.py"
      ],
      "env": {}
    },
    "splunk": {
      "type": "stdio",
      "command": "python3",
      "args": [
        "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"
      ],
      "env": {
        "SPLUNK_HOST": "myorg.splunkcloud.com"
      }
    }
  }
}

使用显式参数的示例(建议在配置多个Splunk服务器时使用,如prod和nonpd):

{
  "mcpServers": {
    "mcpSplunk-prod": {
      "type": "stdio",
      "command": "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py",
      "args": [
        "--host",
        "est-sh.prod.cloud-splunk-company.com",
        "--server-name",
        "splunk-prod"
      ]
    },
    "mcpSplunk-nonprod": {
      "type": "stdio",
      "command": "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py",
      "args": [
        "--host",
        "est-sh.stage.aws-splunk-company.com",
        "--server-name",
        "splunk-nonprod"
      ]
    }
  }
}

推荐的服务器名称:

  • emacs-elisp
  • splunk

这些内容简短明了,有助于代理选择合适的服务器。

选项2:Claude CLI

添加服务器 claude mcp add-json.

环境变量示例:

claude mcp add-json emacs-elisp \
  '{"type":"stdio","command":"python3","args":["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/elisp-eval-server.py"],"env":{}}'
claude mcp add-json splunk \
  '{"type":"stdio","command":"python3","args":["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"],"env":{"SPLUNK_HOST":"myorg.splunkcloud.com"}}'

显式参数示例:

claude mcp add-json mcpSplunk-prod \
  '{"type":"stdio","command":"/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py","args":["--host","est-sh.prod.cloud-splunk-company.com","--server-name","splunk-prod"]}'
claude mcp add-json mcpSplunk-nonprod \
  '{"type":"stdio","command":"/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py","args":["--host","est-sh.stage.aws-splunk-company.com","--server-name","splunk-nonprod"]}'

如果你想将配置签入仓库供团队使用,请使用项目范围:

claude mcp add-json emacs-elisp --scope project \
  '{"type":"stdio","command":"python3","args":["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/elisp-eval-server.py"],"env":{}}'
claude mcp add-json splunk --scope project \
  '{"type":"stdio","command":"python3","args":["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"],"env":{"SPLUNK_HOST":"myorg.splunkcloud.com"}}'

验证:

claude mcp get emacs-elisp
claude mcp get splunk

在OpenAI Codex中配置

Codex通过CLI和 ~/.codex/config.toml.

选项1:Codex CLI

添加 elisp-eval-server.py:

codex mcp add emacs-elisp -- \
  python3 /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/elisp-eval-server.py

添加 splunk-mcp.py 使用环境变量:

codex mcp add splunk \
  --env SPLUNK_HOST=myorg.splunkcloud.com \
  -- python3 /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py

添加 splunk-mcp.py 带有明确的参数:

codex mcp add mcpSplunk-nonprod -- \
  /Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py \
  --host est-sh.stage.aws-splunk-company.com \
  --server-name splunk-nonprod

验证:

codex mcp list

选项2: ~/.codex/config.toml

环境变量示例:

[mcp_servers.emacs-elisp]
command = "python3"
args = ["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/elisp-eval-server.py"]

[mcp_servers.splunk]
command = "python3"
args = ["/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"]
env = { SPLUNK_HOST = "myorg.splunkcloud.com" }

显式参数示例:

[mcp_servers.mcpSplunkProd]
command = "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"
args = ["--host", "est-sh.prod.cloud-splunk-company.com", "--server-name", "splunk-prod"]

[mcp_servers.mcpSplunkNonprod]
command = "/Users/ckoneru/GitRepos/team-loki/ocdp-team-loki-mcp-scripts/splunk-mcp.py"
args = ["--host", "est-sh.stage.aws-splunk-company.com", "--server-name", "splunk-nonprod"]

推荐名称:

  • emacs-elisp
  • splunk

这些名称比原始脚本文件名更清晰,使代理更容易选择工具。

使用说明

Emacs Lisp服务器

  • 向代理公开的工具名称: emacs-elisp-eval
  • 从临时文件中评估表单以避免shell转义问题
  • 状态在调用之间的Emacs会话中持续存在

示例提示:

  • Use emacs-elisp-eval to evaluate (+ 1 2 3)
  • Use emacs-elisp-eval to read the *Messages* buffer

Splunk服务器

  • 向代理公开的工具名称:
    • splunk-search
    • splunk-indexes
    • splunk-search-metadata
    • splunk-server-info
  • 需要时从Edge Cookie刷新凭据
  • 长时间运行的搜索支持通过MCP通知取消
  • 使用 splunk-server-info 确认特定MCP服务器实例实际使用的主机

示例提示:

  • Use splunk-search to find error events for the last 4 hours
  • Use splunk-indexes to list indexes
  • Use splunk-search-metadata for index=main
  • Use splunk-server-info to show the active server host

故障排除

elisp-eval-server.py

如果失败:

  • 确保Emacs在启用服务器的情况下运行
  • 验证 emacsclient 路径存在
  • 跑 emacsclient --eval '(+ 1 1)' 手动确认连接

splunk-mcp.py

如果失败:

  • 确认所选Splunk主机与Edge中的Splunk cookie主机完全匹配
  • 如果您为服务器配置了 env,验证 SPLUNK_HOST
  • 如果使用args配置了服务器,请验证 --host
  • 使用 splunk-server-info 确认正在运行的MCP服务器实例实际使用的主机
  • 确认您已登录到Edge中的Splunk
  • 确认Edge配置文件路径存在:
~/Library/Application Support/Microsoft Edge/Default/Cookies
  • 确认macOS钥匙链访问有效:
security find-generic-password -s "Microsoft Edge Safe Storage" -a "Microsoft Edge" -w

避免钥匙链弹出(自动化)

这 splunk-mcp.py 该脚本支持多种凭据存储方法,以避免交互式密钥链提示。

使用辅助脚本快速设置(推荐)

运行交互式设置脚本提取并存储密码一次:

./setup-edge-password.sh

该脚本将提示您一次访问密钥链,然后让您选择:

  1. 环境变量(添加到 ~/.bashrc 或 ~/.zshrc)
  2. 带chmod 600的纯文本文件(建议大多数用户使用)
  3. GPG加密文件(最安全)

手动设置选项

方法1:环境变量(建议用于自动化)

# Extract password once (will prompt)
PASSWORD=$(security find-generic-password -s "Microsoft Edge Safe Storage" -a "Microsoft Edge" -w)

# Add to your shell profile (~/.bashrc or ~/.zshrc)
export EDGE_SAFE_STORAGE_PASSWORD='your-password-here'

方法2:纯文本文件(具有文件权限的安全)

# Extract and save password
mkdir -p ~/.splunk-mcp
security find-generic-password -s "Microsoft Edge Safe Storage" -a "Microsoft Edge" -w > ~/.splunk-mcp/edge-password
chmod 600 ~/.splunk-mcp/edge-password

方法3:GPG加密文件(最安全)

# Extract and encrypt password
mkdir -p ~/.splunk-mcp
security find-generic-password -s "Microsoft Edge Safe Storage" -a "Microsoft Edge" -w | \
  gpg --encrypt --recipient your-email@example.com > ~/.splunk-mcp/edge-password.gpg

方法4:允许钥匙链提示(不建议用于自动化)

export ALLOW_KEYCHAIN_PROMPT=1

凭证查找顺序

脚本按以下顺序尝试方法:

  1. EDGE_SAFE_STORAGE_PASSWORD 环境变量
  2. ~/.splunk-mcp/edge-password 文件(必须是chmod 600)
  3. ~/.splunk-mcp/edge-password.gpg 文件(用gpg解密)
  4. macOS钥匙串(仅当 ALLOW_KEYCHAIN_PROMPT=1 已设置)

开发人员说明

测试命令

首先运行快速语法检查:

python3 -m py_compile elisp-eval-server.py splunk-mcp.py

按如下方式运行协议套件:

python3 -m unittest test_elisp_eval_protocol -v
SPLUNK_HOST=example.com python3 -m unittest test_splunk_mcp_protocol -v

维护规则

  • 保持工具名称的明确性和稳定性,因为MCP客户端按名称选择工具
  • 保留stdio传输行为:stdout上每行一条JSON-RPC消息
  • 不要将日志或调试输出写入stdout
  • 更喜欢在结构化中返回MCP工具错误 content 响应而不是使服务器崩溃

elisp-eval-server.py

  • 主要工具名称为 emacs-elisp-eval
  • 遗留别名 elisp-eval 仍然接受兼容性
  • serverInfo.name 是 emacs-elisp
  • 脚本假定 emacsclient 住在 /Applications/Emacs.app/Contents/MacOS/bin/emacsclient

splunk-mcp.py

  • 工具名称为:
    • splunk-search
    • splunk-indexes
    • splunk-search-metadata
  • splunk-mcp.py 故意针对macOS,因为它读取Microsoft Edge Cookie和macOS钥匙链数据
  • stdout写入是同步的,工具调用通过有界执行器运行;如果更改并发性,请保留该行为
  • 使JSON模式与实际接受的参数类型保持一致

集成指导

更改行为时,除了单元测试外,还要手动验证这些情况:

  • tools/list 返回预期的工具名称
  • tools/call 与真正的MCP客户端配合使用
  • elisp-eval-server.py 可以访问正在运行的Emacs服务器
  • splunk-mcp.py 可以从Edge刷新凭据并执行真正的Splunk查询

参考文献

此README中的客户端配置示例与当前的官方CLI/docs模式保持一致:

  • 克劳德代码MCP配置
  • OpenAI Codex MCP配置