](https://mseep.ai/app/osomai-servicenow-mcp)
ServiceNow MCP服务器
ServiceNow的模型完成协议(MCP)服务器实现,允许Claude与ServiceNow实例交互。
概述
该项目实现了一个MCP服务器,使Claude能够连接到ServiceNow实例,检索数据,并通过ServiceNow API执行操作。它充当了Claude和ServiceNow之间的桥梁,实现了无缝集成。
特性
- 使用各种身份验证方法(Basic、OAuth、API Key)连接到ServiceNow实例
- 查询ServiceNow记录和表
- 创建、更新和删除ServiceNow记录
- 执行ServiceNow脚本和工作流
- 访问并查询ServiceNow服务目录
- 分析和优化ServiceNow服务目录
- 故障排除的调试模式
- 支持stdio和服务器发送事件(SSE)通信
安装
先决条件
- Python 3.11或更高版本
- 具有适当访问凭据的ServiceNow实例
设置
- 克隆此存储库:
git clone https://github.com/yourusername/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服务器还可以作为web服务器运行,使用服务器发送事件(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:用于创建和管理服务目录项、类别、变量和相关脚本(UI策略、用户标准)的工具。change_coordinator:用于管理变更请求生命周期的工具,包括任务和审批。knowledge_author:用于创建和管理知识库、类别和文章的工具。platform_developer:用于服务器端脚本编写(脚本包括)、工作流开发和部署(变更集)的工具。system_administrator:用于用户/组管理和查看系统日志的工具。full:包括所有可用工具(默认)。none:不包括工具(除list_tool_packages).
内省工具
list_tool_packages:列出配置中定义的所有可用工具包名称,并显示当前加载的包。此工具在所有软件包中都可用,除了none.
可用工具
注: 以下工具的可用性取决于加载的工具包(请参阅上文的工具包部分)。默认情况下(full 软件包),所有工具都可用。
事件管理工具
- 创建事件 -在ServiceNow中创建新事件
- update_事件 -在ServiceNow中更新现有事件
- 添加注释 -在ServiceNow中为事件添加评论
- resolve_事件 -在ServiceNow中解决事件
- 事故列表 -列出ServiceNow中的事件
服务目录工具
- list_catalog_items -列出ServiceNow中的服务目录项
- get_catalog_item -从ServiceNow获取特定的服务目录项
- 列表_目录_类别 -从ServiceNow列出服务目录类别
- 创建目录类别 -在ServiceNow中创建新的服务目录类别
- 更新目录类别 -更新ServiceNow中的现有服务目录类别
- move_catalog_items -在ServiceNow中在类别之间移动目录项
- create_catalog_item_variable -为目录项创建新变量(表单字段)
- list_catalog_item_variables -列出目录项的所有变量
- update_catalog_item_variable -更新目录项的现有变量
- 列表目录 -列出ServiceNow中的服务目录
目录优化工具
- get_optimization_推荐 -获取优化服务目录的建议
- update_catalog_item -更新服务目录项
变更管理工具
- create_change_request -在ServiceNow中创建新的更改请求
- update_change_request -更新现有变更请求
- list_change_requests -列出带有筛选选项的更改请求
- get_change_request_details -获取特定变更请求的详细信息
- add_change_task -将任务添加到更改请求中
- 提交_更改_批准 -提交变更请求以供批准
- 批准_更改 -批准变更请求
- 拒绝_更改 -拒绝更改请求
工作流管理工具
- list_workflows -列出ServiceNow中的工作流
- get_workflow -从ServiceNow获取特定工作流
- 创建工作流 -在ServiceNow中创建新工作流
- update_workflow -在ServiceNow中更新现有工作流
- 删除工作流 -从ServiceNow中删除工作流
脚本包含管理工具
- list_script_包含 -列表脚本包括来自ServiceNow的
- get_script_include -从ServiceNow获取特定的脚本包含
- create_script_include -在ServiceNow中创建新脚本
- update_script_include -更新ServiceNow中包含的现有脚本
- delete_script_include -从ServiceNow中删除脚本包含
变更集管理工具
- list_changesets -列出来自ServiceNow的带有筛选选项的变更集
- get_changeset_details -获取特定变更集的详细信息
- create_changeset -在ServiceNow中创建新的变更集
- update_changeset -更新现有变更集
- commit_changeset -提交变更集
- 发布_变更集 - 发布变更集
- add_file_to_changeset -将文件添加到变更集中
知识库管理工具
- 创建知识库 -在ServiceNow中创建新的知识库
- list_知识库 -列出具有过滤选项的知识库
- 创建_类别 -在知识库中创建新类别
- 创建_文章 -在ServiceNow中创建新的知识文章
- 更新_文章 -更新ServiceNow中现有的知识文章
- 发布_文章 -在ServiceNow上发布知识文章
- list_文章 -列出具有筛选选项的知识文章
- 获取_文章 -按ID获取特定知识文章
用户管理工具
- create_user -在ServiceNow中创建新用户
- update_user -在ServiceNow中更新现有用户
- get_user -通过ID、用户名或电子邮件获取特定用户
- list_users -列出具有筛选选项的用户
- 创建组 -在ServiceNow中创建新组
- update_group -在ServiceNow中更新现有组
- add_group_members -在ServiceNow中将成员添加到组
- remove_group_members -从ServiceNow中的组中删除成员
- list_groups -列出具有筛选选项的组
UI策略工具
- create_ui_policy -创建ServiceNow UI策略,通常用于目录项。
- create_ui_policy_action -创建与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此命令将向Claude注册ServiceNow MCP服务器,并将其配置为使用.env文件中的环境变量。
与Claude Desktop集成
要在Claude Desktop中配置ServiceNow MCP服务器,请执行以下操作:
- 在以下位置编辑Claude Desktop配置文件
~/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 Desktop以应用更改
Claude使用示例
以下是一些自然语言查询示例,您可以使用Claude通过MCP服务器与ServiceNow交互:
事件管理示例
- “造成东部地区网络中断的新事件”
- “将事件INC0010001的优先级更新为高”
- “在INC0010001事件中添加一条评论,称该问题正在调查中”
- “解决事件INC0010001,并注明服务器已重新启动”
- “列出分配给网络团队的所有高优先级事件”
- “列出分配给网络团队的所有活动P1事件。”
服务目录示例
- “显示服务目录中的所有项目”
- “列出所有服务目录类别”
- “获取有关笔记本电脑请求目录项的详细信息”
- “显示硬件类别中的所有目录项”
- 在服务目录中搜索“软件”
- 在服务目录中创建一个名为“云服务”的新类别
- “更新‘硬件’类别,将其重命名为‘it设备’”
- 将“虚拟机”目录项移至“云服务”类别
- “在‘IT设备’类别下创建一个名为‘监视器’的子类别”
- “通过将所有软件项目移至“软件”类别来重新组织我们的目录”
- “为笔记本电脑请求目录项创建描述字段”
- “添加一个下拉字段,用于选择目录项中的笔记本电脑型号”
- “列出VPN访问请求目录项的所有表单字段”
- “在软件申请表中强制填写部门字段”
- “更新成本中心字段的帮助文本”
- “显示系统中的所有服务目录”
- “列出所有硬件目录项。”
- “查找‘新笔记本电脑请求’的目录项。”
- “显示‘新笔记本电脑请求’项的变量。”
- 为“新员工设置”目录项创建一个名为“department_code”的新变量。将其设置为必填字符串字段
目录优化示例
- “分析我们的服务目录并确定改进机会”
- “查找描述不佳、需要改进的目录项”
- “确定我们可能想要退役的低使用率目录项”
- “查找放弃率高的目录项”
- “优化我们的硬件类别以改善用户体验”
变更管理示例
- “为服务器维护创建更改请求,以便明天晚上应用安全补丁”
- “安排下周二凌晨2点至4点进行数据库升级”
- “将任务添加到服务器维护更改中,以进行实施前检查”
- “提交服务器维护更改以供审批”
- “批准数据库升级更改并添加注释:实施计划看起来很彻底”
- “显示本周计划的所有紧急更改”
- “列出分配给网络团队的所有更改”
- “创建正常的更改请求以升级生产数据库服务器。”
- 更新更改CHG0012345,将状态设置为“执行”
工作流管理示例
- “显示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知识库中查找包含“密码重置”的知识文章”
- “在网络故障排除类别下创建一个名为“无线网络”的子类别”
用户管理示例
- “在放射科创建新用户Dr.Alice Radiology”
- “更新Bob的用户记录,使他成为Alice的经理”
- “将ITIL角色分配给Bob,以便他可以批准更改请求”
- “列出放射科的所有用户”
- “创建一个名为‘生物医学工程’的新小组来管理医疗器械”
- “将管理员用户添加到生物医学工程组作为成员”
- “更新生物医学工程组以更换其经理”
- “从生物医学工程组中删除用户”
- “查找系统中标题中包含“医生”的所有活动用户”
- “创建一个将担任放射科审批人的用户”
- “列出系统中的所有IT支持组”
UI策略示例
- “为名为“显示理由”的“软件请求”项(sys_id:abc…)创建UI策略,该策略在“软件成本”大于100时适用。”
- 对于UI策略“Show Justification”(sys_id:def…),添加一个操作,使“business_Justification”变量可见且为必填项
- “为策略‘Show Justice’创建另一个操作,以隐藏‘alternative_software’变量。”
示例脚本
该存储库包括演示如何使用这些工具的示例脚本:
- examples/catalog_optimization.example.py:演示如何分析和改进ServiceNow服务目录
- examples/change_management_demo.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 参数。 - 解决方案:使用有效值之一:“正常”、“标准”或“紧急”。
- 错误:
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许可证获得许可-有关详细信息,请参阅许可证文件。
