返回市场
服务现在-mcp

服务现在-mcp

作者:echelon-ai-labs162 星标更新:2025-10-04

项目介绍

MseeP.ai 安全评估徽章

ServiceNow MCP 服务器

这是一个用于 ServiceNow 的模型完成协议(MCP)服务器实现,允许 Claude 与 ServiceNow 实例进行交互。

<a href="https://glama.ai/mcp/servers/@osomai/servicenow-mcp"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@osomai/servicenow-mcp/badge" alt="ServiceNow Server MCP 服务器" /> </a>

概述

该项目实现了 MCP 服务器,使 Claude 能够连接到 ServiceNow 实例,检索数据并通过 ServiceNow API 执行操作。它充当 Claude 和 ServiceNow 之间的桥梁,实现无缝集成。

特性

  • 使用多种身份验证方法(基本、OAuth、API 密钥)连接到 ServiceNow 实例
  • 查询 ServiceNow 记录和表
  • 创建、更新和删除 ServiceNow 记录
  • 执行 ServiceNow 脚本和工作流
  • 访问并查询 ServiceNow 服务目录
  • 分析和优化 ServiceNow 服务目录
  • 调试模式以进行故障排除
  • 支持标准 I/O 和服务器发送事件(SSE)通信

安装

先决条件

  • Python 3.11 或更高版本
  • 带有适当访问凭据的 ServiceNow 实例

设置

  1. 克隆此仓库:

    git clone https://github.com/echelon-ai-labs/servicenow-mcp.git
    cd servicenow-mcp
    
  2. 创建虚拟环境并安装包:

    python -m venv .venv
    source .venv/bin/activate  # 在 Windows 上:.venv\Scripts\activate
    pip install -e .
    
  3. 创建一个包含您的 ServiceNow 凭据的 .env 文件:

    SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com
    SERVICENOW_USERNAME=your-username
    SERVICENOW_PASSWORD=your-password
    SERVICENOW_AUTH_TYPE=basic  # 或 oauth, api_key
    

使用

标准(标准 I/O)模式

启动 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

# 创建服务器配置
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,
)

# 创建 ServiceNow MCP 服务器
servicenow_mcp = ServiceNowMCP(config)

# 使用 SSE 传输创建 Starlette 应用
app = create_starlette_app(servicenow_mcp, debug=True)

# 启动 Web 服务器
uvicorn.run(app, host="0.0.0.0", port=8080)

工具包(可选)

为了管理暴露给语言模型的工具数量(特别是在有限制的环境中),ServiceNow MCP 服务器支持加载称为“工具包”的工具子集。这通过 MCP_TOOL_PACKAGE 环境变量控制。

配置

  1. 环境变量:将 MCP_TOOL_PACKAGE 环境变量设置为您所需的包名称。
    export MCP_TOOL_PACKAGE=catalog_builder
    
  2. 包定义:可用的包及其包含的工具在 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:用户/组管理和查看系统日志的工具。
  • agile_management:管理用户故事、史诗、Scrum 任务和项目的工具。
  • full:包含所有可用工具(默认)。
  • none:不包含任何工具(除了 list_tool_packages)。

内省工具

  • list_tool_packages:列出配置中定义的所有工具包名称,并显示当前加载的包。此工具在所有包中可用,除了 none

可用工具

注意:以下工具的可用性取决于加载的工具包(见上文的工具包部分)。默认情况下(full 包),所有工具都可用。

事件管理工具

  1. create_incident - 在 ServiceNow 中创建新的事件
  2. update_incident - 更新 ServiceNow 中的现有事件
  3. add_comment - 在 ServiceNow 中的事件中添加评论
  4. resolve_incident - 解决 ServiceNow 中的事件
  5. list_incidents - 列出 ServiceNow 中的事件

服务目录工具

  1. list_catalog_items - 列出 ServiceNow 中的服务目录项目
  2. get_catalog_item - 获取 ServiceNow 中的具体服务目录项目
  3. list_catalog_categories - 列出 ServiceNow 中的服务目录类别
  4. create_catalog_category - 在 ServiceNow 中创建新的服务目录类别
  5. update_catalog_category - 更新 ServiceNow 中的现有服务目录类别
  6. move_catalog_items - 在 ServiceNow 中将目录项移动到不同类别
  7. create_catalog_item_variable - 为目录项创建新的变量(表单字段)
  8. list_catalog_item_variables - 列出目录项的所有变量
  9. update_catalog_item_variable - 更新目录项的现有变量
  10. list_catalogs - 列出 ServiceNow 中的服务目录

目录优化工具

  1. get_optimization_recommendations - 获取优化服务目录的建议
  2. update_catalog_item - 更新服务目录项目

变更管理工具

  1. create_change_request - 在 ServiceNow 中创建新的变更请求
  2. update_change_request - 更新 ServiceNow 中的现有变更请求
  3. list_change_requests - 列出带有过滤选项的变更请求
  4. get_change_request_details - 获取特定变更请求的详细信息
  5. add_change_task - 向变更请求添加任务
  6. submit_change_for_approval - 提交变更请求以供审批
  7. approve_change - 批准变更请求
  8. reject_change - 拒绝变更请求

敏捷管理工具

故事管理
  1. create_story - 在 ServiceNow 中创建新的用户故事
  2. update_story - 更新 ServiceNow 中的现有用户故事
  3. list_stories - 列出带有过滤选项的用户故事
  4. create_story_dependency - 在两个故事之间创建依赖关系
  5. delete_story_dependency - 删除故事之间的依赖关系
史诗管理
  1. create_epic - 在 ServiceNow 中创建新的史诗
  2. update_epic - 更新 ServiceNow 中的现有史诗
  3. list_epics - 列出带有过滤选项的史诗
Scrum 任务管理
  1. create_scrum_task - 在 ServiceNow 中创建新的 Scrum 任务
  2. update_scrum_task - 更新 ServiceNow 中的现有 Scrum 任务
  3. list_scrum_tasks - 列出带有过滤选项的 Scrum 任务
项目管理
  1. create_project - 在 ServiceNow 中创建新的项目
  2. update_project - 更新 ServiceNow 中的现有项目
  3. list_projects - 列出带有过滤选项的项目

工作流管理工具

  1. list_workflows - 列出 ServiceNow 中的工作流
  2. get_workflow - 获取 ServiceNow 中的具体工作流
  3. create_workflow - 在 ServiceNow 中创建新的工作流
  4. update_workflow - 更新 ServiceNow 中的现有工作流
  5. delete_workflow - 删除 ServiceNow 中的工作流

脚本包含管理工具

  1. list_script_includes - 列出 ServiceNow 中的脚本包含
  2. get_script_include - 获取 ServiceNow 中的具体脚本包含
  3. create_script_include - 在 ServiceNow 中创建新的脚本包含
  4. update_script_include - 更新 ServiceNow 中的现有脚本包含
  5. delete_script_include - 删除 ServiceNow 中的脚本包含

更改集管理工具

  1. list_changesets - 列出带有过滤选项的更改集
  2. get_changeset_details - 获取特定更改集的详细信息
  3. create_changeset - 在 ServiceNow 中创建新的更改集
  4. update_changeset - 更新 ServiceNow 中的现有更改集
  5. commit_changeset - 提交更改集
  6. publish_changeset - 发布更改集
  7. add_file_to_changeset - 将文件添加到更改集中

知识库管理工具

  1. create_knowledge_base - 在 ServiceNow 中创建新的知识库
  2. list_knowledge_bases - 列出带有过滤选项的知识库
  3. create_category - 在知识库中创建新的类别
  4. create_article - 在 ServiceNow 中创建新的知识文章
  5. update_article - 更新 ServiceNow 中的现有知识文章
  6. publish_article - 在 ServiceNow 中发布知识文章
  7. list_articles - 列出带有过滤选项的知识文章
  8. get_article - 根据 ID 获取特定的知识文章

用户管理工具

  1. create_user - 在 ServiceNow 中创建新用户
  2. update_user - 更新 ServiceNow 中的现有用户
  3. get_user - 根据 ID、用户名或电子邮件获取特定用户
  4. list_users - 列出带有过滤选项的用户
  5. create_group - 在 ServiceNow 中创建新组
  6. update_group - 更新 ServiceNow 中的现有组
  7. add_group_members - 将成员添加到 ServiceNow 中的组
  8. remove_group_members - 从 ServiceNow 中的组移除成员
  9. list_groups - 列出带有过滤选项的组

UI 策略工具

  1. create_ui_policy - 创建 ServiceNow UI 策略,通常针对目录项。
  2. create_ui_policy_action - 创建与 UI 策略关联的动作,以控制变量状态(可见性、必填等)。

使用 MCP CLI

ServiceNow MCP 服务器可以使用 MCP CLI 安装,提供了一种方便的方法将服务器注册到 Claude。

# 使用 .env 文件中的环境变量安装 ServiceNow MCP 服务器
mcp install src/servicenow_mcp/server.py -f .env

此命令将 ServiceNow MCP 服务器注册到 Claude 并配置其使用 .env 文件中的环境变量。

与 Claude Desktop 集成

要在 Claude Desktop 中配置 ServiceNow MCP 服务器:

  1. 编辑 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"
      }
    }
  }
}
  1. 重启 Claude Desktop 以应用更改

使用 Claude 的示例

以下是您可以使用 Claude 与 ServiceNow 通过 MCP 服务器进行交互的一些自然语言查询示例:

事件管理示例

  • "为东部区域的网络中断创建一个新的事件"
  • "将事件 INC0010001 的优先级更新为高"
  • "向事件 INC0010001 添加一条评论说问题正在调查中"
  • "以重启服务器的备注解决事件 INC0010001"
  • "列出分配给网络团队的所有高优先级事件"
  • "列出分配给网络团队的所有活动 P1 事件。"

服务目录示例

  • "展示服务目录中的所有项目"
  • "列出所有服务目录类别"
  • "获取关于笔记本电脑请求目录项的详细信息"
  • "展示硬件类别中的所有目录项"
  • "在服务目录中搜索 '软件'"
  • "在服务目录中创建名为 '云服务' 的新类别"
  • "将 '硬件' 类别重命名为 'IT 设备'"
  • "将 '虚拟机' 目录项移动到 '云服务' 类别"
  • "在 'IT 设备' 类别下创建名为 '显示器' 的子类别"
  • "重新组织我们的目录,将所有软件项移动到 '软件' 类别"
  • "为笔记本电脑请求目录项创建描述字段"
  • "为选择笔记本电脑型号添加下拉字段到目录项"
  • "列出 VPN 访问请求目录项的所有表单字段"
  • "使部门字段在软件请求表单中成为必填项"
  • "更新成本中心字段的帮助文本"
  • "展示系统中的所有服务目录"
  • "列出所有硬件目录项。"
  • "找到 '新笔记本电脑请求' 目录项。"
  • "展示 '新笔记本电脑请求' 项的变量。"
  • "为 '新员工入职' 目录项创建名为 '部门代码' 的新变量。使其成为必填字符串字段。"

目录优化示例

  • "分析我们的服务目录并识别改进机会"
  • "找出需要改进的描述较差的目录项"
  • "识别使用率低可能要退役的目录项"
  • "找出放弃率高的目录项"
  • "优化我们的硬件类别以改善用户体验"

变更管理示例

  • "为明天晚上的服务器维护创建一个变更请求,以应用安全补丁"
  • "安排下周二凌晨 2 点至 4 点的数据库升级"
  • "为服务器维护变更添加预实施检查任务"
  • "提交服务器维护变更以供审批"
  • "以评论 '实施计划看起来很彻底' 批准数据库升级变更"
  • "列出本周内所有紧急变更"
  • "列出分配给网络团队的所有变更"
  • "创建一个正常变更请求以升级生产数据库服务器。"
  • "更新变更 CHG0012345,将其状态设置为 '实施'。"

敏捷管理示例

  • "创建一个新用户故事以实现新的报告仪表板"
  • "更新 '实现新的报告仪表板' 故事,将其设置为阻塞状态"
  • "列出分配给数据分析团队的所有用户故事"
  • "在 '实现新的报告仪表板' 故事和 '开发数据提取管道' 故事之间创建依赖关系"
  • "删除 '实现新的报告仪表板' 故事和 '开发数据提取管道' 故事之间的依赖关系"
  • "创建一个名为 '数据分析倡议' 的新史诗"
  • "更新 '数据分析倡议' 史诗,将其设置为已完成"