开发背景 没有哪个 MCP 为 ServiceNow 管理员做浏览器登录认证,于是我自己写了一个。
这一切始于开发 ServiceNow Portal——组件、页面、脚本包含,整张依赖关系图。
真正难的从来不是改代码,而是在动手之前,准确判断到底哪里坏了、为什么坏。
当 AI 代理能够可靠地完成这种诊断之后,下一个问题自然就是:它能不能更进一步,安全地参与测试和部署。
光靠 Table API 不足以完成那种诊断。
Flow Designer 的真实结构——触发器、动作,一个流程到底为什么触发或没触发——藏在普通 REST
认证够不到的、仅限会话(session-only)的接口后面。
所以这个工具不得不扩展到真正的浏览器认证,而不是一把写在配置文件里的 API 密钥。
管理员真正需要的,其实就是一个真实管理员本来就有的东西——一个受 MFA/SSO/SAML 保护的真实会话。
当时整个 MCP 生态里没有任何东西为 ServiceNow 做这件事,于是这就成了这个项目的核心结构:代理
继承一个实时浏览器会话,而不是握着一把密钥。
从那时起,这就不再只是一个 API 封装。
每一次写入都遵循一位细心工程师手动操作时会用的纪律——本地优先,推送前先与实时服务器做 diff,
锚定后一旦出现冲突的修改就会被拦下而不是被静默覆盖,而且可验证——部署用的 XML 会带一份证书,
证明它确实来自实时实例。
Token 成本也得到同样的对待——每个 schema 都做了压缩,每个 package 都只暴露代理实际能用到的
部分。
这里的每一个设计取舍,都是在真实的 ServiceNow Portal 工作中反复实战验证出来的,而不是来自
某份规格文档。
🔎 精准诊断 追踪真实的依赖链——是哪个组件、哪个脚本包含、哪个流程——而不是靠堆栈跟踪去猜。
🔑 是会话,不是密钥 Flow Designer 的真实结构藏在 Table API 够不到的仅限会话接口后面。代理继承一个实时管理员会话——MFA、SSO、SAML——而不是握着一把 API 密钥。
🧭 锚定同步 每次推送都会先与实时记录做 diff 并锚定——冲突的修改会被拦下,绝不会被静默覆盖。
🪶 从设计上就注重 Token 压缩过的 schema、按 package 划分范围的工具、按需投影的读取——成本是设计约束,不是事后才考虑的事。
快速开始 只需粘贴这一行。就这么简单。
把下面这行复制到任意 AI 编码助手中。
它会自动安装一切 —— uv、Playwright、MCP 配置和技能。
粘贴到你的 AI 中
Install and configure mfa-servicenow-mcp by following the instructions here:
curl -s https://raw.githubusercontent.com/jshsakura/mfa-servicenow-mcp/main/docs/llm-setup.md
适用于 Claude Code、Cursor、Codex、OpenCode、Windsurf、VS Code Copilot、Antigravity、Zed 等等。
你的 AI 会检测客户端和操作系统,然后以交互方式引导你完成安装。
安装后,重启你的 AI 客户端 以加载 MCP 服务器。
如果 uvx 被企业安全工具阻止,请跳到下方的
当 uvx 被阻止时(pip) 一节。
手动 — 安装 + 配置 先安装,再添加到客户端配置
更喜欢用终端?安装 uv + Chromium,然后将服务器添加到你的 MCP 客户端配置文件(片段见下)。无需安装命令,无需各客户端专属标志。
macOS / Linux Windows
# 1. 安装 uv(如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. 提前获取服务器 + Chromium(避免首次浏览器认证调用时
# 下载 ~150 MB 导致超时)
uvx --refresh --with playwright --from mfa-servicenow-mcp servicenow-mcp --version
uvx --with playwright playwright install chromium
# 3. 将服务器添加到你的 MCP 客户端配置 — 复制下方片段 # 1. 安装 uv(如果尚未安装)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 2. 提前获取服务器 + Chromium(避免首次浏览器认证调用时
# 下载 ~150 MB 导致超时)
uvx --refresh --with playwright --from mfa-servicenow-mcp servicenow-mcp --version
uvx --with playwright playwright install chromium
# 3. 将服务器添加到你的 MCP 客户端配置 — 复制下方片段 当 uvx 被阻止时 改用 pip 安装
Windows 的 Smart App Control 会阻止 uvx,因为 uvx 每次运行都要解压一个未签名的临时可执行文件。如果 uvx 一直用得好好的,却在某次 Windows 更新之后突然失效,原因就在这里。改用 pip 安装,并以模块方式启动服务器 —— servicenow-mcp 控制台脚本是 pip 生成的未签名 .exe 包装器,会因为同样的原因被阻止。
macOS / Linux Windows
# Homebrew 和发行版自带的 Python 会拒绝全局 pip 安装(PEP 668)。
# 请改用 python.org 的 Python,或者干脆继续用上面的 uvx。
pip install mfa-servicenow-mcp playwright
python -m playwright install chromium
# 验证:
python -m servicenow_mcp --version
# 以后升级:
pip install --upgrade mfa-servicenow-mcp playwright
python -m playwright install chromium# python.org 的 Python 3.10+ 已签名,可以通过 Smart App Control。
pip install mfa-servicenow-mcp playwright
python -m playwright install chromium
# 验证:
python -m servicenow_mcp --version
# 以后升级:
pip install --upgrade mfa-servicenow-mcp playwright
python -m playwright install chromium
无论用哪种方式,env 块都完全相同 —— 只有 command 和 args 不同。粘贴下方手动回退 一节中的片段,然后把 command 设为 python,args 设为 [“-m”, “servicenow_mcp”]。
手动回退 手动修复或检查客户端配置
安装程序是推荐路径。仅当你需要手动检查或修复客户端配置时,才使用下面的原始配置示例。
四种不同的形态涵盖了所有受支持的客户端。env 块在各处完全相同 —— 只有外层包装不同。
Claude Desktop / Claude Code / AntiGravity / Cursor Zed Codex (TOML) OpenCode
{
"mcpServers": {
"servicenow": {
"command": "uvx",
"args": ["--with", "playwright", "--from", "mfa-servicenow-mcp", "servicenow-mcp"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_AUTH_TYPE": "browser",
"SERVICENOW_BROWSER_HEADLESS": "false",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}{
"servicenow": {
"command": "uvx",
"args": ["--with", "playwright", "--from", "mfa-servicenow-mcp", "servicenow-mcp"],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_AUTH_TYPE": "browser",
"SERVICENOW_BROWSER_HEADLESS": "false",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password"
}
}
}[mcp_servers.servicenow]
command = "uvx"
args = ["--with", "playwright", "--from", "mfa-servicenow-mcp", "servicenow-mcp"]
enabled = true
[mcp_servers.servicenow.env]
SERVICENOW_INSTANCE_URL = "https://your-instance.service-now.com"
SERVICENOW_AUTH_TYPE = "browser"
SERVICENOW_BROWSER_HEADLESS = "false"
SERVICENOW_USERNAME = "your-username"
SERVICENOW_PASSWORD = "your-password"{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servicenow": {
"type": "local",
"command": [
"uvx", "--with", "playwright",
"--from", "mfa-servicenow-mcp", "servicenow-mcp"
],
"enabled": true,
"environment": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_AUTH_TYPE": "browser",
"SERVICENOW_BROWSER_HEADLESS": "false",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password"
}
}
}
}
只读的 standard 包默认加载 —— 无需 MCP_TOOL_PACKAGE。
若需写入权限,请将其设为高级包(service_desk、portal_developer、
platform_developer 或 full)—— 见
工具包(高级)指南 。
手动 — 第 3 步 添加为 LLM 优化的技能
仅有工具只是原始的 API 调用。技能才是让你的 LLM 真正有用的东西 ——
带安全门控、回滚和上下文感知委派的经验证流水线。
如今有 4 个技能,每次发布都会有更多。
Claude Code Codex OpenCode Antigravity
uvx --from mfa-servicenow-mcp servicenow-mcp-skills claudeuvx --from mfa-servicenow-mcp servicenow-mcp-skills codexuvx --from mfa-servicenow-mcp servicenow-mcp-skills opencodeuvx --from mfa-servicenow-mcp servicenow-mcp-skills antigravity🔍 analyze/ 1 个技能 —— 本地源码审计:交叉引用、死代码、执行顺序、HTML 报告
🧭 explore/ 1 个技能 —— flow 触发器追踪:当某个表发生更改时哪些 workflow/flow 会触发
📦 manage/ 2 个技能 —— 应用源码下载、本地同步(diff → 推送,带冲突检测)