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インスタンス
設定
- このリポジトリをクローンします:
- 仮想環境を作成し、パッケージをインストールします。
- ServiceNow の資格情報を使用して
.env
ファイルを作成します。
使用法
標準(stdio)モード
MCP サーバーを起動するには:
または環境変数を使用する場合:
サーバー送信イベント(SSE)モード
ServiceNow MCP サーバーは、通信に Server-Sent Events (SSE) を使用して Web サーバーとして実行することもできるため、より柔軟な統合オプションが可能になります。
SSEサーバーの起動
提供されている CLI を使用して SSE サーバーを起動できます。
デフォルトでは、サーバーは0.0.0.0:8080
でリッスンします。ホストとポートはカスタマイズできます。
SSEサーバーへの接続
SSE サーバーは、次の 2 つの主要なエンドポイントを公開します。
/sse
- SSE接続エンドポイント/messages/
- サーバーにメッセージを送信するためのエンドポイント
例
SSE サーバーの設定と実行の完全な例についてはexamples/sse_server_example.py
ファイルを参照してください。
ツールパッケージ(オプション)
言語モデルに公開されるツールの数を管理するため(特に制限のある環境の場合)、ServiceNow MCPサーバーは「パッケージ」と呼ばれるツールのサブセットの読み込みをサポートしています。これは、 MCP_TOOL_PACKAGE
環境変数によって制御されます。
構成
- 環境変数:
MCP_TOOL_PACKAGE
環境変数を目的のパッケージの名前に設定します。 - **パッケージ定義:**利用可能なパッケージとそれらに含まれるツールは
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
)では、すべてのツールが利用可能です。
インシデント管理ツール
- create_incident - ServiceNow で新しいインシデントを作成する
- update_incident - ServiceNow の既存のインシデントを更新する
- add_comment - ServiceNow のインシデントにコメントを追加する
- resolve_incident - ServiceNow でインシデントを解決する
- list_incidents - ServiceNow からのインシデントを一覧表示する
サービスカタログツール
- list_catalog_items - ServiceNow からサービス カタログ項目を一覧表示します
- get_catalog_item - ServiceNow から特定のサービス カタログ項目を取得します。
- list_catalog_categories - ServiceNow からサービスカタログのカテゴリを一覧表示します
- create_catalog_category - ServiceNow で新しいサービス カタログ カテゴリを作成します
- update_catalog_category - ServiceNow の既存のサービスカタログカテゴリを更新します
- move_catalog_items - ServiceNow のカテゴリ間でカタログアイテムを移動する
- create_catalog_item_variable - カタログアイテムの新しい変数(フォームフィールド)を作成します
- list_catalog_item_variables - カタログアイテムのすべての変数を一覧表示します
- update_catalog_item_variable - カタログアイテムの既存の変数を更新する
- list_catalogs - ServiceNow からサービスカタログを一覧表示します
カタログ最適化ツール
- get_optimization_recommendations - サービスカタログを最適化するための推奨事項を取得します
- update_catalog_item - サービスカタログ項目を更新する
変更管理ツール
- create_change_request - ServiceNow で新しい変更リクエストを作成する
- update_change_request - 既存の変更要求を更新する
- list_change_requests - フィルタリングオプション付きの変更要求を一覧表示する
- get_change_request_details - 特定の変更要求に関する詳細情報を取得する
- add_change_task - 変更要求にタスクを追加する
- submit_change_for_approval - 承認のために変更要求を送信する
- 承認_変更- 変更要求を承認する
- refuse_change - 変更要求を拒否する
ワークフロー管理ツール
- list_workflows - ServiceNow からワークフローを一覧表示する
- get_workflow - ServiceNow から特定のワークフローを取得する
- create_workflow - ServiceNow で新しいワークフローを作成する
- update_workflow - ServiceNow で既存のワークフローを更新する
- delete_workflow - ServiceNow からワークフローを削除する
スクリプトインクルード管理ツール
- list_script_includes - 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 - 変更セットをコミットする
- publish_changeset - 変更セットを公開する
- add_file_to_changeset - 変更セットにファイルを追加する
ナレッジベース管理ツール
- create_knowledge_base - ServiceNow で新しいナレッジベースを作成する
- list_knowledge_bases - フィルタリングオプション付きのナレッジベースを一覧表示する
- create_category - ナレッジベースに新しいカテゴリを作成する
- create_article - ServiceNow で新しいナレッジ記事を作成する
- update_article - ServiceNow の既存のナレッジ記事を更新する
- publish_article - ServiceNow でナレッジ記事を公開する
- list_articles - フィルタリングオプション付きのナレッジ記事を一覧表示する
- get_article - IDで特定のナレッジ記事を取得する
ユーザー管理ツール
- create_user - ServiceNow で新しいユーザーを作成する
- update_user - ServiceNow で既存のユーザーを更新する
- get_user - ID、ユーザー名、またはメールアドレスで特定のユーザーを取得します
- list_users - フィルタリングオプションを使用してユーザーを一覧表示する
- create_group - 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 に登録する便利な方法が提供されます。
このコマンドは、ServiceNow MCP サーバーを Claude に登録し、.env ファイルの環境変数を使用するように構成します。
Claude Desktopとの統合
Claude Desktop で ServiceNow MCP サーバーを構成するには:
~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) またはご使用の OS の適切なパスにある Claude Desktop 構成ファイルを編集します。
- 変更を適用するには、Claude Desktopを再起動してください。
クロードとの使用例
以下は、Claude を使用して MCP サーバー経由で ServiceNow と対話するために使用できる自然言語クエリの例です。
インシデント管理の例
- 「東部地域のネットワーク障害に関する新しいインシデントを作成する」
- 「インシデントINC0010001の優先度を高に更新する」
- 「インシデントINC0010001に、問題が調査中であることを示すコメントを追加する」
- 「サーバーが再起動されたことを記録して、インシデント INC0010001 を解決する」
- 「ネットワークチームに割り当てられたすべての高優先度インシデントを一覧表示する」
- 「ネットワーク チームに割り当てられているすべてのアクティブな P1 インシデントを一覧表示します。」
サービスカタログの例
- 「サービスカタログ内のすべての項目を表示」
- 「すべてのサービスカタログカテゴリを一覧表示する」
- 「ラップトップリクエストカタログアイテムの詳細を取得する」
- 「ハードウェアカテゴリのすべてのカタログアイテムを表示」
- 「サービスカタログで「ソフトウェア」を検索」
- 「サービスカタログに「クラウドサービス」という新しいカテゴリを作成します」
- 「「ハードウェア」カテゴリを更新して、「IT機器」に名前を変更します」
- 「「仮想マシン」カタログ項目を「クラウド サービス」カテゴリに移動する」
- 「「IT機器」カテゴリの下に「モニター」というサブカテゴリを作成します」
- 「すべてのソフトウェア項目を「ソフトウェア」カテゴリに移動してカタログを再編成します」
- 「ラップトップリクエストカタログアイテムの説明フィールドを作成する」
- 「カタログアイテムにラップトップモデルを選択するためのドロップダウンフィールドを追加する」
- 「VPNアクセス要求カタログ項目のすべてのフォームフィールドを一覧表示する」
- 「ソフトウェアリクエストフォームで部門フィールドを必須にする」
- 「コストセンターフィールドのヘルプテキストを更新する」
- 「システム内のすべてのサービスカタログを表示」
- 「すべてのハードウェア カタログ項目を一覧表示します。」
- 「「新しいラップトップのリクエスト」のカタログ項目を見つけます。」
- 「「新しいラップトップのリクエスト」項目の変数を表示してください。」
- 「「新入社員設定」カタログ項目に「department_code」という名前の新しい変数を作成します。必須の文字列フィールドにします。」
カタログ最適化の例
- 「サービスカタログを分析し、改善の機会を特定する」
- 「説明が不十分で改善が必要なカタログアイテムを見つける」
- 「使用頻度が低く、廃止する可能性のあるカタログアイテムを特定する」
- 「放棄率の高いカタログアイテムを見つける」
- 「ハードウェアカテゴリーを最適化してユーザーエクスペリエンスを向上」
変更管理の例
- 「明日の夜にセキュリティパッチを適用するためのサーバーメンテナンスの変更リクエストを作成します」
- 「来週火曜日の午前2時から午前4時までデータベースのアップグレードをスケジュールする」
- 「実装前のチェックのために、サーバーメンテナンスの変更にタスクを追加する」
- 「サーバーのメンテナンス変更を承認のために送信する」
- 「コメント付きでデータベース アップグレードの変更を承認: 実装計画は徹底しているようです」
- 「今週予定されている緊急変更をすべて表示」
- 「ネットワークチームに割り当てられたすべての変更を一覧表示する」
- 「本番データベース サーバーをアップグレードするための通常の変更要求を作成します。」
- 「変更 CHG0012345 を更新し、状態を「実装」に設定します。」
ワークフロー管理の例
- 「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サポートグループを一覧表示する」
UIポリシーの例
- 「「ソフトウェア リクエスト」項目 (sys_id: abc...) に対して、「software_cost」が 100 より大きい場合に適用される「正当化を表示」という名前の UI ポリシーを作成します。」
- UI ポリシー「正当化の表示」(sys_id: def...) に、「business_justification」変数を表示および必須にするアクションを追加します。
- 「「alternative_software」変数を非表示にするには、ポリシー「正当化の表示」に別のアクションを作成します。」
サンプルスクリプト
リポジトリには、ツールの使用方法を示すサンプル スクリプトが含まれています。
- examples/catalog_optimization_example.py : ServiceNow サービスカタログを分析し、改善する方法を示します。
- examples/change_management_demo.py : ServiceNow で変更リクエストを作成および管理する方法を示します。
認証方法
基本認証
OAuth認証
APIキー認証
発達
ドキュメント
追加のドキュメントはdocs
ディレクトリにあります。
- カタログ統合- サービスカタログ統合の詳細情報
- カタログ最適化- カタログ最適化機能の詳細な計画
- 変更管理- 変更管理ツールに関する詳細情報
- ワークフロー管理- ワークフロー管理ツールの詳細情報
- 変更セット管理- 変更セット管理ツールの詳細情報
トラブルシューティング
変更管理ツールのよくあるエラー
- エラー:
argument after ** must be a mapping, not CreateChangeRequestParams
- このエラーは、
create_change_request
関数に辞書ではなくCreateChangeRequestParams
オブジェクトを渡したときに発生します。 - 解決策: Pydantic モデル オブジェクトではなく、パラメーターを含む辞書を渡していることを確認します。
- 注: 変更管理ツールは、このエラーを自動的に処理するように更新されました。関数は、パラメータが誤ってラップされている場合、またはPydanticモデルオブジェクトとして渡されている場合、パラメータのアンラップを試みるようになりました。
- このエラーは、
- エラー:
Missing required parameter 'type'
- このエラーは、変更リクエストを作成するために必要なすべてのパラメータを指定していない場合に発生します。
- 解決策: 必須パラメータをすべて含めてください。create_change_request
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 ファイルを参照してください。
Related MCP Servers
- AsecurityAlicenseAqualityEnables Claude to interact with Webflow's APIs for managing sites, retrieving information, and executing tasks using natural language.Last updated -24TypeScriptMIT License
- AsecurityAlicenseAqualityEnables natural language interaction with Azure services through Claude Desktop, supporting resource management, subscription handling, and tenant selection with secure authentication.Last updated -31313TypeScriptMIT License
- -securityAlicense-qualityEnables Claude to interact with Webflow's APIs, allowing access to site information, collections, and other Webflow resources.Last updated -TypeScriptMIT License
- -securityAlicense-qualityEnables Claude to interact with Qlik Cloud applications and extract data from visualizations through the Qlik Cloud API.Last updated -2TypeScriptMIT License