](https://mseep.ai/app/osomai-servicenow-mcp)
ServiceNow MCP 服务器
一个针对ServiceNow的模型完成协议(MCP)服务器实现,使Claude能够与ServiceNow实例进行交互。
概述
这个项目实现了一个MCP服务器,使Claude能够连接到ServiceNow实例,检索数据,并通过ServiceNow API执行操作。它作为Claude和ServiceNow之间的桥梁,实现了无缝集成。
特点/特性
- 使用各种身份验证方法(基本、OAuth、API密钥)连接到ServiceNow实例
- 查询 ServiceNow 的记录和表
- 创建、更新和删除ServiceNow记录
- 执行ServiceNow脚本和工作流
- 访问并查询ServiceNow服务目录
- 分析并优化ServiceNow服务目录
- 用于故障排除的调试模式
- 支持stdio和服务器发送事件(SSE)通信
安装
先决条件
- Python 3.11 或更高版本
- 一个具有适当访问凭证的ServiceNow实例
设置
- 克隆此仓库:
git clone https://github.com/echelon-ai-labs/servicenow-mcp.git
cd servicenow-mcp- 创建一个虚拟环境并安装该包:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .- 创建一个
.env使用您的ServiceNow凭据进行文件操作:
SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com
SERVICENOW_USERNAME=your-username
SERVICENOW_PASSWORD=your-password
SERVICENOW_AUTH_TYPE=basic # or oauth, api_key使用方法
标准(stdio)模式
启动MCP服务器:
python -m servicenow_mcp.cli或者使用环境变量:
SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com SERVICENOW_USERNAME=your-username SERVICENOW_PASSWORD=your-password SERVICENOW_AUTH_TYPE=basic python -m servicenow_mcp.cli服务器发送事件(SSE)模式
ServiceNow MCP 服务器还可以作为网络服务器运行,使用服务器发送事件(SSE)进行通信,从而提供更灵活的集成选项。
启动SSE服务器
您可以使用提供的命令行界面(CLI)启动SSE服务器:
servicenow-mcp-sse --instance-url=https://your-instance.service-now.com --username=your-username --password=your-password默认情况下,服务器将监听在 0.0.0.0:8080您可以自定义主机和端口:
servicenow-mcp-sse --host=127.0.0.1 --port=8000连接到SSE服务器
SSE服务器公开了两个主要的终端点:
/sse- SSE连接端点/messages/- 向服务器发送消息的终端点
示例
查看 examples/sse_server_example.py 提供一个完整的设置和运行SSE服务器的示例文件。
from servicenow_mcp.server import ServiceNowMCP
from servicenow_mcp.server_sse import create_starlette_app
from servicenow_mcp.utils.config import ServerConfig, AuthConfig, AuthType, BasicAuthConfig
import uvicorn
# Create server configuration
config = ServerConfig(
instance_url="https://your-instance.service-now.com",
auth=AuthConfig(
type=AuthType.BASIC,
config=BasicAuthConfig(
username="your-username",
password="your-password"
)
),
debug=True,
)
# Create ServiceNow MCP server
servicenow_mcp = ServiceNowMCP(config)
# Create Starlette app with SSE transport
app = create_starlette_app(servicenow_mcp, debug=True)
# Start the web server
uvicorn.run(app, host="0.0.0.0", port=8080)工具包装(可选)
为了管理暴露给语言模型的工具数量(特别是在有限制的环境中),ServiceNow MCP服务器支持加载称为“包”的工具子集。这通过以下方式进行控制: MCP_TOOL_PACKAGE 环境变量。
配置
- 环境变量: 设定
MCP_TOOL_PACKAGE将环境变量设置为所需包的名称。
export MCP_TOOL_PACKAGE=catalog_builder- 包定义: 可用的软件包及其包含的工具在(某处)有定义
config/tool_packages.yaml你可以自定义这个文件来创建你自己的包。
行为
- 如果
MCP_TOOL_PACKAGE被设置为在(某处)定义的有效包名config/tool_packages.yaml仅会加载该包中列出的工具。 - 如果
MCP_TOOL_PACKAGE是 未设置 或者为空,该full默认情况下,已加载包含所有工具的包。 - 如果
MCP_TOOL_PACKAGE被设置为一个无效的包名,该none包已加载(除……外无其他工具)list_tool_packages),并且记录了一条警告。 - 设置
MCP_TOOL_PACKAGE=none明确不加载任何工具(除了list_tool_packages)。
可用软件包(默认)
默认设置 config/tool_packages.yaml 包含以下基于角色的软件包:
service_desk事件处理工具和基本用户/知识查询工具。catalog_builder用于创建和管理服务目录项、类别、变量及相关脚本(用户界面策略、用户条件)的工具。change_coordinator用于管理变更请求生命周期的工具,包括任务和审批功能。knowledge_author用于创建和管理知识库、分类及文章的工具。platform_developer服务器端脚本编写(脚本包含)、工作流开发和部署(更改集)的工具。system_administrator用于用户/组管理和查看系统日志的工具。agile_management用于管理用户故事、史诗、Scrum任务和项目的工具。full包含所有可用工具(默认)。none不包含任何工具(除list_tool_packages)。
内省工具
list_tool_packages列出配置中定义的所有可用工具包名称,并显示当前加载的包。此工具在所有包中均可使用,除了none。
可用工具
注: 以下工具的可用性取决于已加载的工具包(见上文“工具打包”部分)。默认情况下(full (打包后),所有工具均可使用。
事件管理工具
- 创建事件 - 在ServiceNow中创建一个新的事件
- 更新事件 - 在ServiceNow中更新现有事件
- 添加评论 - 在ServiceNow中添加对事件的评论
- 解决事件 - 在ServiceNow中解决事件
- 列出事件 - 从ServiceNow列出事件
服务目录工具
- 列出目录项 - 从ServiceNow列出服务目录项
- 获取目录项 - 从ServiceNow获取特定的服务目录项
- 列出目录类别 - 列出ServiceNow中的服务目录类别
- 创建目录类别 - 在ServiceNow中创建一个新的服务目录类别
- 更新目录类别 - 在ServiceNow中更新现有的服务目录类别
- 移动目录项 - 在ServiceNow中将目录项在类别之间移动
- 创建目录项变量 - 为目录项创建一个新的变量(表单字段)
- 列出目录项变量 - 列出目录项的所有变量
- 更新目录项变量 - 更新目录项的现有变量
- 列出目录 - 列出ServiceNow中的服务目录
目录优化工具
- 获取优化建议 - 获取优化服务目录的建议
- 更新目录项 - 更新服务目录项
变革管理工具
- 创建变更请求 - 在ServiceNow中创建一个新的变更请求
- 更新更改请求 - 更新现有的变更请求
- 列出更改请求 - 列出变更请求并提供筛选选项
- 获取变更请求详情 - 获取特定变更请求的详细信息
- 添加更改任务 - 向变更请求中添加任务
- 提交更改以待审批 - 提交变更请求以待批准
- 批准更改 - 批准变更请求
- 拒绝更改 - 拒绝变更请求
敏捷管理工具
故事管理
- 创作故事 - 在ServiceNow中创建一个新的用户故事
- 更新故事 - 在ServiceNow中更新现有的用户故事
- 故事列表 - 列出用户故事并提供过滤选项
- 创建故事依赖关系 - 在两个故事之间建立依赖关系
- 删除故事依赖关系 - 删除故事之间的依赖关系
史诗级管理(或译为“宏大管理”,但根据上下文,“史诗级”可能更贴近某些特定语境下的表达,如强调管理的规模、影响力等)
- 创建史诗级任务/故事 - 在ServiceNow中创建一个新的史诗任务
- 更新史诗(或重大更新) - 在ServiceNow中更新现有的史诗故事(或大型任务)
- 史诗列表 - 列出ServiceNow中的史诗级任务(或大型用户故事),并提供过滤选项
Scrum任务管理
- 创建Scrum任务 - 在ServiceNow中创建一个新的Scrum任务
- 更新Scrum任务 - 在ServiceNow中更新现有的Scrum任务
- 列出Scrum任务 - 从ServiceNow列出Scrum任务,并提供过滤选项
项目管理
- 创建项目 - 在ServiceNow中创建一个新项目
- 更新项目 - 在ServiceNow中更新现有项目
- 列出项目 - 列出ServiceNow中的项目,并提供过滤选项
工作流管理工具
- 列出工作流 - 列出ServiceNow中的工作流
- 获取工作流 - 从ServiceNow获取特定的工作流
- 创建工作流 - 在ServiceNow中创建一个新的工作流
- 更新工作流 - 在ServiceNow中更新现有工作流
- 删除工作流 - 从ServiceNow中删除一个工作流
脚本包含管理工具
- 列出脚本包含项 - 列表脚本包含来自ServiceNow的内容
- 获取脚本包含(或:获取脚本引用) - 从ServiceNow获取特定的脚本包含文件
- 创建脚本包含文件 - 在ServiceNow中创建一个新的脚本包含项
- 更新脚本包含 - 更新ServiceNow中现有的脚本包含项
- 删除脚本包含 - 从ServiceNow中删除脚本包含项
变更集管理工具
- 列出更改集 - 列出ServiceNow中的更改集,并提供过滤选项
- 获取更改集详情 - 获取特定更改集的详细信息
- 创建更改集 - 在ServiceNow中创建一个新的更改集
- 更新更改集 - 更新现有的更改集
- 提交更改集 - 提交更改集
- 发布更改集 - 发布更改集
- 将文件添加到更改集 - 将文件添加到更改集中
知识库管理工具
- 创建知识库 - 在ServiceNow中创建一个新的知识库
- 知识库列表 - 列出带有过滤选项的知识库
- 创建类别 - 在知识库中创建一个新的类别
- 创建文章 - 在ServiceNow中创建一篇新的知识文章
- 更新文章 - 在ServiceNow中更新现有的知识文章
- 发布文章 - 在ServiceNow中发布一篇知识文章
- 文章列表 - 列出知识文章,并提供筛选选项
- 获取文章 - 通过ID获取特定的知识文章
用户管理工具
- 创建用户 - 在ServiceNow中创建一个新用户
- 更新用户 - 在ServiceNow中更新现有用户
- 获取用户 - 通过ID、用户名或电子邮件获取特定用户
- 列出用户 - 列出用户并提供过滤选项
- 创建群组 - 在ServiceNow中创建一个新组
- 更新群组 - 在ServiceNow中更新现有群组
- 添加群组成员 - 在ServiceNow中向组添加成员
- 移除群组成员 - 在ServiceNow中从组中移除成员
- 列出群组 - 列出带有过滤选项的组
用户界面策略工具
- 创建用户界面策略 - 创建一个ServiceNow用户界面策略,通常用于目录项。
- 创建UI策略操作 - 创建一个与UI策略相关联的操作,以控制变量状态(可见性、必填性等)。
使用MCP CLI
ServiceNow MCP服务器可以通过MCP CLI进行安装,这为将服务器注册到Claude提供了一种便捷的方式。
# Install the ServiceNow MCP server with environment variables from .env file
mcp install src/servicenow_mcp/server.py -f .env此命令将注册ServiceNow MCP服务器到Claude,并配置它以使用来自.env文件的环境变量。
与Claude桌面版的集成
在Claude Desktop中配置ServiceNow MCP服务器:
- 编辑位于(路径)的 Claude 桌面配置文件
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 或您操作系统的相应路径:
{
"mcpServers": {
"ServiceNow": {
"command": "/Users/yourusername/dev/servicenow-mcp/.venv/bin/python",
"args": [
"-m",
"servicenow_mcp.cli"
],
"env": {
"SERVICENOW_INSTANCE_URL": "https://your-instance.service-now.com",
"SERVICENOW_USERNAME": "your-username",
"SERVICENOW_PASSWORD": "your-password",
"SERVICENOW_AUTH_TYPE": "basic"
}
}
}
}- 重启 Claude 桌面应用以应用更改
与Claude一起使用的示例
以下是您可以在MCP服务器上使用,通过Claude与ServiceNow进行交互的一些自然语言查询示例:
事件管理示例
- “为东部区域的网络故障创建一个新的事件”
- “将事件INC0010001的优先级更新为高”
- “在事件INC0010001下添加评论,说明该问题正在调查中”
- “解决事件INC0010001,并备注服务器已重启”
- “列出分配给网络团队的所有高优先级事件”
- “列出分配给网络团队的所有活跃P1事件。”
服务目录示例
- “向我展示服务目录中的所有项目”
- “列出所有服务目录类别”
- “获取笔记本电脑请求目录项的详细信息”
- “显示硬件类别下的所有目录项目”
- “在服务目录中搜索‘软件’”
- “在服务目录中创建一个名为‘云服务’的新类别”
- “将‘硬件’类别更新为‘IT设备’以重命名”
- 将“虚拟机”目录项移动到“云服务”类别下
- “在‘IT设备’类别下创建一个名为‘显示器’的子类别”
- “将我们的目录重新组织,把所有软件项目移到‘软件’类别下”
- “为笔记本电脑请求目录项创建一个描述字段”
- “为目录项添加一个下拉字段,用于选择笔记本电脑型号”
- “列出VPN访问请求目录项的所有表单字段”
- “在软件申请表中将部门字段设为必填项”
- “更新成本中心字段的帮助文本”
- “显示系统中所有的服务目录”
- “列出所有硬件目录项。”
- “查找‘申请新笔记本电脑’的目录项。”
- “给我展示一下‘新笔记本电脑申请’项目的变量。”
- “为‘新员工入职设置’目录项创建一个名为‘department_code’的新变量。将其设置为必填的字符串字段。”
目录优化示例
- “分析我们的服务目录,并找出改进的机会”
- “查找描述不佳、需要改进的目录项”
- “识别出我们可能希望淘汰的低使用率目录项”
- “查找放弃率高的目录项目”
- “优化我们的硬件类别以提升用户体验”
变革管理示例
- “创建一个服务器维护变更请求,以便明天晚上应用安全补丁”
- “安排在下周二凌晨2点至4点进行数据库升级”
- “为服务器维护变更添加一项预实施检查任务”
- “提交服务器维护变更以待审批”
- “批准数据库升级变更,并附注:实施计划看起来很周全”
- “给我显示本周计划的所有紧急变更”
- “列出分配给网络团队的所有更改”
- “创建一个常规变更请求以升级生产数据库服务器。”
- “更新变更CHG0012345,将状态设置为‘实施中’。”
敏捷管理实例
- “创建一个新的用户故事,用于实现一个新的报告仪表板”
- “更新‘实施新的报告仪表板’故事,将其设置为阻塞状态”
- “列出分配给数据分析团队的所有用户故事”
- “在‘实现新的报告仪表板’故事和‘开发数据提取管道’故事之间建立依赖关系”
- “删除‘实现新的报告仪表板’故事与‘开发数据提取管道’故事之间的依赖关系”
- “创建一个新的史诗级项目,名为‘数据分析倡议’”
- “将‘数据分析计划’史诗更新为已完成状态”
- “列出‘数据分析’项目中的所有史诗级任务(或大型任务)”
- “为‘实现新的报告仪表板’故事创建一个新的Scrum任务”
- “将‘开发数据提取管道’的敏捷任务更新为已完成状态”
- “列出‘实现新的报告仪表板’故事中的所有敏捷任务”
- “创建一个名为‘数据分析倡议’的新项目”
- “将‘数据分析倡议’项目更新为已完成状态”
- “列出‘数据分析’史诗中的所有项目”
工作流管理示例
- “在ServiceNow中显示所有活动的工作流”
- “获取事件审批工作流程的详细信息”
- “列出变更请求工作流的所有版本”
- “向我展示服务目录请求工作流中的所有活动”
- “创建一个新的工作流程来处理软件许可请求”
- “更新事件升级工作流程的描述”
- “启动新员工入职工作流程”
- “停用旧的密码重置工作流程”
- “在软件许可请求工作流程中添加一个审批活动”
- “在事件升级工作流中更新通知活动”
- “从变更请求工作流中删除不必要的活动”
- “重新排序服务目录请求工作流中的活动”
变更集管理示例
- “列出ServiceNow中的所有更改集”
- “显示由开发者‘john.doe’创建的所有更改集”
- “获取关于更改集 'sys_update_set_123' 的详细信息”
- “为‘人力资源门户’应用程序创建一个新的更改集”
- “更新更改集 'sys_update_set_123' 的描述”
- 提交更改集“sys_update_set_123”,附注信息为“修复了登录问题”
- “将更改集 'sys_update_set_123' 发布到生产环境”
- “将文件添加到更改集 'sys_update_set_123'”
- “显示更改集中 'sys_update_set_123' 的所有更改”
知识库示例
- “为IT部门创建一个新的知识库”
- “列出组织内的所有知识库”
- “在IT知识库中创建一个名为‘网络故障排除’的类别”
- “撰写一篇关于网络故障排除类别中VPN设置的文章”
- “更新VPN设置文章,加入移动设备操作指南”
- “发布VPN设置文章,以便所有用户都能看到”
- “列出网络故障排除类别中的所有文章”
- “给我看看VPN设置文章的详细内容”
- “在IT知识库中查找包含‘密码重置’的知识文章”
- “在网络故障排除类别下创建一个名为‘无线网络’的子类别”
用户管理示例
- “在放射科创建一个新用户,用户名为Alice Radiology博士”
- “更新鲍勃的用户记录,使其成为爱丽丝的经理”
- “将ITIL角色分配给鲍勃,以便他可以批准变更请求”
- “列出放射科的所有用户”
- “创建一个名为‘生物医学工程’的新群组,用于管理医疗器械”
- “将管理员用户添加为生物医学工程组的成员”
- “通知生物医学工程团队更换其负责人”
- “从生物医学工程小组中移除一名用户”
- “查找系统中所有职称含‘医生’的活跃用户”
- “创建一个用户,该用户将作为放射科的审批者”
- “列出系统中所有的IT支持团队”
UI策略示例
- “为‘软件请求’项目(sys_id: abc...)创建一个名为‘显示理由’的用户界面策略,当‘软件成本’(software_cost)大于100时应用该策略。”
- “对于用户界面策略‘显示理由’(sys_id: def...),添加一个操作以使‘business_justification’变量可见且为必填项。”
- “为‘显示理由’策略创建另一个操作,以隐藏‘alternative_software’变量。”
示例脚本
该存储库包含示例脚本,展示了如何使用这些工具:
- 示例/目录优化示例.py展示如何分析并优化ServiceNow服务目录
- 示例/变更管理演示.py展示如何在ServiceNow中创建和管理变更请求
认证方法
基本认证
SERVICENOW_AUTH_TYPE=basic
SERVICENOW_USERNAME=your-username
SERVICENOW_PASSWORD=your-passwordOAuth 认证
SERVICENOW_AUTH_TYPE=oauth
SERVICENOW_CLIENT_ID=your-client-id
SERVICENOW_CLIENT_SECRET=your-client-secret
SERVICENOW_TOKEN_URL=https://your-instance.service-now.com/oauth_token.doAPI密钥认证
SERVICENOW_AUTH_TYPE=api_key
SERVICENOW_API_KEY=your-api-key发展
文档
在(此处)可获取更多相关文档 docs 目录:
- 目录集成 - 关于服务目录集成的详细信息
- 目录优化 - 目录优化功能的详细计划
- 变革管理 - 关于变更管理工具的详细信息
- 工作流管理 - 关于工作流管理工具的详细信息
- 更改集管理 - 关于变更集管理工具的详细信息
故障排除
变更管理工具中的常见错误
- 错误: `argument after must be a mapping, not CreateChangeRequestParams`**
- 当你传递一个……时,会出现这个错误 CreateChangeRequestParams 将(参数/值)作为对象而非字典传递给 create_change_request 功能。 - 解决方案:确保你传递的是包含参数的字典,而不是 Pydantic 模型对象。 - 注:变更管理工具已更新,现在可以自动处理此错误。如果参数被错误地包装或作为 Pydantic 模型对象传递,函数将尝试对其进行解包。
- 错误:
Missing required parameter 'type'
- 当您未提供创建变更请求所需的所有参数时,会出现此错误。 - 解决方案:确保包含所有必需的参数。对于 create_change_request,两者都 short_description 并且 type 是必需的。
- 错误:
Invalid value for parameter 'type'
- 当您为(某个参数或字段)提供了一个无效值时,会出现此错误 type 参数。 - 解决方案:使用以下有效值之一:“normal”(正常)、“standard”(标准)或“emergency”(紧急)。
- 错误:
Cannot find get_headers method in either auth_manager or server_config
- 当参数传递顺序错误或使用了没有所需方法的对象时,会出现此错误。 - 解决方案:确保你正在传递(或“确保你正确地进行”) auth_manager 并且 server_config 按正确顺序提供参数。函数已更新,可自动处理参数交换。
做出贡献
欢迎贡献!请随时提交拉取请求。
- 克隆该仓库
- 创建你的特性分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 提交一个拉取请求
许可证
此项目遵循MIT许可证授权——详见LICENSE文件。
