ServiceNow MCP Server

by osomai
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports loading environment variables from .env files for configuring ServiceNow connection parameters and authentication credentials.

  • Uses Pydantic for parameter validation and data modeling in the ServiceNow MCP server, ensuring type safety when handling ServiceNow API requests and responses.

ServiceNow MCP サーバー

ServiceNow のモデル完了プロトコル (MCP) サーバー実装。これにより、Claude は ServiceNow インスタンスと対話できるようになります。

概要

このプロジェクトでは、Claude が ServiceNow インスタンスに接続し、データを取得し、ServiceNow API を介してアクションを実行できるようにする MCP サーバーを実装します。このサーバーは Claude と ServiceNow の間の橋渡しとして機能し、シームレスな統合を実現します。

特徴

  • さまざまな認証方法(Basic、OAuth、API キー)を使用して ServiceNow インスタンスに接続します。
  • ServiceNow のレコードとテーブルをクエリする
  • ServiceNow レコードの作成、更新、削除
  • ServiceNow スクリプトとワークフローを実行する
  • ServiceNow サービスカタログにアクセスしてクエリを実行する
  • ServiceNow サービスカタログを分析および最適化する
  • トラブルシューティングのためのデバッグモード
  • stdioとServer-Sent Events(SSE)通信の両方をサポート

インストール

前提条件

  • Python 3.11以上
  • 適切なアクセス資格情報を持つServiceNowインスタンス

設定

  1. このリポジトリをクローンします:
    git clone https://github.com/yourusername/servicenow-mcp.git cd servicenow-mcp
  2. 仮想環境を作成し、パッケージをインストールします。
    python -m venv .venv source .venv/bin/activate # On 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 # 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 サーバーは、通信に Server-Sent Events (SSE) を使用して Web サーバーとして実行することもできるため、より柔軟な統合オプションが可能になります。

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 サーバーは、次の 2 つの主要なエンドポイントを公開します。

  • /sse - SSE接続エンドポイント
  • /messages/ - サーバーにメッセージを送信するためのエンドポイント

SSE サーバーの設定と実行の完全な例についてはexamples/sse_server_example.pyファイルを参照してください。

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 サーバーは次のツールを提供します。

インシデント管理ツール

  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 - カタログアイテムの既存の変数を更新する

カタログ最適化ツール

  1. get_optimization_recommendations - サービスカタログを最適化するための推奨事項を取得します
  2. update_catalog_item - サービスカタログ項目を更新する

変更管理ツール

  1. create_change_request - ServiceNow で新しい変更リクエストを作成する
  2. update_change_request - 既存の変更要求を更新する
  3. list_change_requests - フィルタリングオプションを使用して変更要求を一覧表示する
  4. get_change_request_details - 特定の変更要求に関する詳細情報を取得する
  5. add_change_task - 変更要求にタスクを追加する
  6. submit_change_for_approval - 変更要求を承認のために送信する
  7. 承認_変更- 変更要求を承認する
  8. refuse_change - 変更要求を拒否する

ワークフロー管理ツール

  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 - フィルタリングオプションを使用して ServiceNow からの変更セットを一覧表示する
  2. get_changeset_details - 特定の変更セットに関する詳細情報を取得する
  3. create_changeset - ServiceNow で新しい変更セットを作成する
  4. update_changeset - 既存の変更セットを更新する
  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 - フィルタリングオプション付きのグループを一覧表示する

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 Desktopとの統合

Claude Desktop で ServiceNow MCP サーバーを構成するには:

  1. ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) またはご使用の OS の適切なパスにある Claude Desktop 構成ファイルを編集します。
{ "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を再起動してください。

クロードとの使用例

ServiceNow MCP サーバーが Claude Desktop で構成されたら、Claude に次のようなアクションを実行するように依頼できます。

インシデント管理の例

  • 「東部地域のネットワーク障害に関する新しいインシデントを作成する」
  • 「インシデントINC0010001の優先度を高に更新する」
  • 「インシデントINC0010001に、問題が調査中であることを示すコメントを追加する」
  • 「サーバーが再起動されたことを記録して、インシデント INC0010001 を解決する」
  • 「ネットワークチームに割り当てられたすべての高優先度インシデントを一覧表示する」

サービスカタログの例

  • 「サービスカタログ内のすべての項目を表示」
  • 「すべてのサービスカタログカテゴリを一覧表示する」
  • 「ラップトップリクエストカタログアイテムの詳細を取得する」
  • 「ハードウェアカテゴリのすべてのカタログアイテムを表示」
  • 「サービスカタログで「ソフトウェア」を検索」
  • 「サービスカタログに「クラウドサービス」という新しいカテゴリを作成します」
  • 「「ハードウェア」カテゴリを更新して、「IT機器」に名前を変更します」
  • 「「仮想マシン」カタログ項目を「クラウド サービス」カテゴリに移動する」
  • 「「IT機器」カテゴリの下に「モニター」というサブカテゴリを作成します」
  • 「すべてのソフトウェア項目を「ソフトウェア」カテゴリに移動してカタログを再編成します」
  • 「ラップトップリクエストカタログアイテムの説明フィールドを作成する」
  • 「カタログアイテムにラップトップモデルを選択するためのドロップダウンフィールドを追加する」
  • 「VPNアクセス要求カタログ項目のすべてのフォームフィールドを一覧表示する」
  • 「ソフトウェアリクエストフォームで部門フィールドを必須にする」
  • 「コストセンターフィールドのヘルプテキストを更新する」

カタログ最適化の例

  • 「サービスカタログを分析し、改善の機会を特定する」
  • 「説明が不十分で改善が必要なカタログアイテムを見つける」
  • 「使用頻度が低く、廃止する可能性のあるカタログアイテムを特定する」
  • 「放棄率の高いカタログアイテムを見つける」
  • 「ハードウェアカテゴリーを最適化してユーザーエクスペリエンスを向上」

変更管理の例

  • 「明日の夜にセキュリティパッチを適用するためのサーバーメンテナンスの変更リクエストを作成します」
  • 「来週火曜日の午前2時から午前4時までデータベースのアップグレードをスケジュールする」
  • 「実装前のチェックのために、サーバーメンテナンスの変更にタスクを追加する」
  • 「サーバーのメンテナンス変更を承認のために送信する」
  • 「コメント付きでデータベース アップグレードの変更を承認: 実装計画は徹底しているようです」
  • 「今週予定されている緊急変更をすべて表示」
  • 「ネットワークチームに割り当てられたすべての変更を一覧表示する」

ワークフロー管理の例

  • 「ServiceNow でアクティブなワークフローをすべて表示」
  • 「インシデント承認ワークフローの詳細を取得する」
  • 「変更要求ワークフローのすべてのバージョンを一覧表示する」
  • 「サービスカタログリクエストワークフロー内のすべてのアクティビティを表示する」
  • 「ソフトウェアライセンスリクエストを処理するための新しいワークフローを作成する」
  • 「インシデントエスカレーションワークフローの説明を更新する」
  • 「新入社員オンボーディングワークフローを有効化する」
  • 「古いパスワードリセットワークフローを無効にする」
  • 「ソフトウェア ライセンス要求ワークフローに承認アクティビティを追加する」
  • 「インシデントエスカレーションワークフローの通知アクティビティを更新する」
  • 「変更要求ワークフローから不要なアクティビティを削除する」
  • 「サービスカタログリクエストワークフロー内のアクティビティを並べ替える」

変更セット管理の例

  • 「ServiceNow のすべての変更セットを一覧表示する」
  • 「開発者 'john.doe' が作成したすべての変更セットを表示する」
  • 「変更セット 'sys_update_set_123' の詳細を取得する」
  • 「HRポータルアプリケーションの新しい変更セットを作成する」
  • 「変更セット '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 を作成します」
  • 「ボブのユーザーレコードを更新して、彼をアリスのマネージャーにする」
  • 「ボブにITILロールを割り当てて、変更要求を承認できるようにします」
  • 「放射線科のすべてのユーザーを一覧表示する」
  • 「医療機器を管理するための『バイオメディカルエンジニアリング』という新しいグループを作成する」
  • 「バイオメディカルエンジニアリンググループに管理者ユーザーをメンバーとして追加する」
  • 「バイオメディカルエンジニアリンググループを更新してマネージャーを変更する」
  • 「バイオメディカルエンジニアリンググループからユーザーを削除する」
  • 「システム内で、役職に「医師」が含まれるすべてのアクティブユーザーを検索する」
  • 「放射線科の承認者として機能するユーザーを作成する」
  • 「システム内のすべてのITサポートグループを一覧表示する」

サンプルスクリプト

リポジトリには、ツールの使用方法を示すサンプル スクリプトが含まれています。

  • examples/catalog_optimization_example.py : ServiceNow サービスカタログを分析し、改善する方法を示します。
  • examples/change_management_demo.py : ServiceNow で変更リクエストを作成および管理する方法を示します。

認証方法

基本認証

SERVICENOW_AUTH_TYPE=basic SERVICENOW_USERNAME=your-username SERVICENOW_PASSWORD=your-password

OAuth認証

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.do

APIキー認証

SERVICENOW_AUTH_TYPE=api_key SERVICENOW_API_KEY=your-api-key

発達

ドキュメント

追加のドキュメントはdocsディレクトリにあります。

トラブルシューティング

変更管理ツールのよくあるエラー

  1. エラー: argument after ** must be a mapping, not CreateChangeRequestParams
    • このエラーは、 create_change_request関数に辞書ではなくCreateChangeRequestParamsオブジェクトを渡したときに発生します。
    • 解決策: Pydantic モデル オブジェクトではなく、パラメーターを含む辞書を渡していることを確認します。
    • 注: 変更管理ツールは、このエラーを自動的に処理するように更新されました。関数は、パラメータが誤ってラップされている場合、またはPydanticモデルオブジェクトとして渡されている場合、パラメータのアンラップを試みるようになりました。
  2. エラー: Missing required parameter 'type'
    • このエラーは、変更リクエストを作成するために必要なすべてのパラメータを指定していない場合に発生します。
    • 解決策: 必須パラメータをすべて含めてください。create_change_request create_change_request場合、 short_descriptiontype両方が必須です。
  3. エラー: Invalid value for parameter 'type'
    • このエラーは、 typeパラメータに無効な値を指定した場合に発生します。
    • 解決策: 有効な値「normal」、「standard」、または「emergency」のいずれかを使用します。
  4. エラー: Cannot find get_headers method in either auth_manager or server_config
    • このエラーは、パラメータが間違った順序で渡された場合、または必要なメソッドを持たないオブジェクトを使用した場合に発生します。
    • 解決策: auth_managerserver_configパラメータが正しい順序で渡されていることを確認してください。関数はパラメータの入れ替えを自動的に処理するように更新されました。

貢献

貢献を歓迎します!お気軽にプルリクエストを送信してください。

  1. リポジトリをフォークする
  2. 機能ブランチを作成します( git checkout -b feature/amazing-feature
  3. 変更をコミットします ( git commit -m 'Add some amazing feature' )
  4. ブランチにプッシュする ( git push origin feature/amazing-feature )
  5. プルリクエストを開く

ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細については LICENSE ファイルを参照してください。

ID: wfdzusqbvb