@tedorigawa001/servicenow-mcp 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +844 -0
- package/dist/cli/auth.d.ts +15 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +200 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/config-store.d.ts +28 -0
- package/dist/cli/config-store.d.ts.map +1 -0
- package/dist/cli/config-store.js +66 -0
- package/dist/cli/config-store.js.map +1 -0
- package/dist/cli/detect-clients.d.ts +16 -0
- package/dist/cli/detect-clients.d.ts.map +1 -0
- package/dist/cli/detect-clients.js +151 -0
- package/dist/cli/detect-clients.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +135 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +564 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/writers/index.d.ts +9 -0
- package/dist/cli/writers/index.d.ts.map +1 -0
- package/dist/cli/writers/index.js +135 -0
- package/dist/cli/writers/index.js.map +1 -0
- package/dist/prompts/index.d.ts +25 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +38 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/itsm.d.ts +20 -0
- package/dist/prompts/itsm.d.ts.map +1 -0
- package/dist/prompts/itsm.js +110 -0
- package/dist/prompts/itsm.js.map +1 -0
- package/dist/prompts/user-prompts.d.ts +3 -0
- package/dist/prompts/user-prompts.d.ts.map +1 -0
- package/dist/prompts/user-prompts.js +35 -0
- package/dist/prompts/user-prompts.js.map +1 -0
- package/dist/resources/index.d.ts +26 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +99 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server-http.d.ts +41 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +187 -0
- package/dist/server-http.js.map +1 -0
- package/dist/server.d.ts +54 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +150 -0
- package/dist/server.js.map +1 -0
- package/dist/servicenow/client.d.ts +137 -0
- package/dist/servicenow/client.d.ts.map +1 -0
- package/dist/servicenow/client.js +855 -0
- package/dist/servicenow/client.js.map +1 -0
- package/dist/servicenow/instances.d.ts +28 -0
- package/dist/servicenow/instances.d.ts.map +1 -0
- package/dist/servicenow/instances.js +190 -0
- package/dist/servicenow/instances.js.map +1 -0
- package/dist/servicenow/types.d.ts +578 -0
- package/dist/servicenow/types.d.ts.map +1 -0
- package/dist/servicenow/types.js +3 -0
- package/dist/servicenow/types.js.map +1 -0
- package/dist/tools/agile.d.ts +225 -0
- package/dist/tools/agile.d.ts.map +1 -0
- package/dist/tools/agile.js +205 -0
- package/dist/tools/agile.js.map +1 -0
- package/dist/tools/app-studio.d.ts +139 -0
- package/dist/tools/app-studio.d.ts.map +1 -0
- package/dist/tools/app-studio.js +139 -0
- package/dist/tools/app-studio.js.map +1 -0
- package/dist/tools/atf.d.ts +144 -0
- package/dist/tools/atf.d.ts.map +1 -0
- package/dist/tools/atf.js +186 -0
- package/dist/tools/atf.js.map +1 -0
- package/dist/tools/catalog.d.ts +966 -0
- package/dist/tools/catalog.d.ts.map +1 -0
- package/dist/tools/catalog.js +640 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/change.d.ts +351 -0
- package/dist/tools/change.d.ts.map +1 -0
- package/dist/tools/change.js +214 -0
- package/dist/tools/change.js.map +1 -0
- package/dist/tools/core.d.ts +768 -0
- package/dist/tools/core.d.ts.map +1 -0
- package/dist/tools/core.js +695 -0
- package/dist/tools/core.js.map +1 -0
- package/dist/tools/csm.d.ts +403 -0
- package/dist/tools/csm.d.ts.map +1 -0
- package/dist/tools/csm.js +256 -0
- package/dist/tools/csm.js.map +1 -0
- package/dist/tools/deployment.d.ts +366 -0
- package/dist/tools/deployment.d.ts.map +1 -0
- package/dist/tools/deployment.js +181 -0
- package/dist/tools/deployment.js.map +1 -0
- package/dist/tools/devops.d.ts +236 -0
- package/dist/tools/devops.d.ts.map +1 -0
- package/dist/tools/devops.js +207 -0
- package/dist/tools/devops.js.map +1 -0
- package/dist/tools/discovery.d.ts +306 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +357 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/flow.d.ts +496 -0
- package/dist/tools/flow.d.ts.map +1 -0
- package/dist/tools/flow.js +348 -0
- package/dist/tools/flow.js.map +1 -0
- package/dist/tools/hrsd.d.ts +790 -0
- package/dist/tools/hrsd.d.ts.map +1 -0
- package/dist/tools/hrsd.js +378 -0
- package/dist/tools/hrsd.js.map +1 -0
- package/dist/tools/incident.d.ts +259 -0
- package/dist/tools/incident.d.ts.map +1 -0
- package/dist/tools/incident.js +170 -0
- package/dist/tools/incident.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +385 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/integration.d.ts +940 -0
- package/dist/tools/integration.d.ts.map +1 -0
- package/dist/tools/integration.js +685 -0
- package/dist/tools/integration.js.map +1 -0
- package/dist/tools/itam.d.ts +462 -0
- package/dist/tools/itam.d.ts.map +1 -0
- package/dist/tools/itam.js +306 -0
- package/dist/tools/itam.js.map +1 -0
- package/dist/tools/knowledge.d.ts +187 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +161 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/ml.d.ts +263 -0
- package/dist/tools/ml.d.ts.map +1 -0
- package/dist/tools/ml.js +251 -0
- package/dist/tools/ml.js.map +1 -0
- package/dist/tools/mobile.d.ts +352 -0
- package/dist/tools/mobile.d.ts.map +1 -0
- package/dist/tools/mobile.js +122 -0
- package/dist/tools/mobile.js.map +1 -0
- package/dist/tools/notification.d.ts +590 -0
- package/dist/tools/notification.d.ts.map +1 -0
- package/dist/tools/notification.js +382 -0
- package/dist/tools/notification.js.map +1 -0
- package/dist/tools/now-assist.d.ts +300 -0
- package/dist/tools/now-assist.d.ts.map +1 -0
- package/dist/tools/now-assist.js +227 -0
- package/dist/tools/now-assist.js.map +1 -0
- package/dist/tools/performance.d.ts +447 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +473 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/portal.d.ts +530 -0
- package/dist/tools/portal.d.ts.map +1 -0
- package/dist/tools/portal.js +425 -0
- package/dist/tools/portal.js.map +1 -0
- package/dist/tools/problem.d.ts +111 -0
- package/dist/tools/problem.d.ts.map +1 -0
- package/dist/tools/problem.js +101 -0
- package/dist/tools/problem.js.map +1 -0
- package/dist/tools/reporting.d.ts +825 -0
- package/dist/tools/reporting.d.ts.map +1 -0
- package/dist/tools/reporting.js +453 -0
- package/dist/tools/reporting.js.map +1 -0
- package/dist/tools/sam.d.ts +312 -0
- package/dist/tools/sam.d.ts.map +1 -0
- package/dist/tools/sam.js +360 -0
- package/dist/tools/sam.js.map +1 -0
- package/dist/tools/schema-helpers.d.ts +119 -0
- package/dist/tools/schema-helpers.d.ts.map +1 -0
- package/dist/tools/schema-helpers.js +121 -0
- package/dist/tools/schema-helpers.js.map +1 -0
- package/dist/tools/script.d.ts +714 -0
- package/dist/tools/script.d.ts.map +1 -0
- package/dist/tools/script.js +629 -0
- package/dist/tools/script.js.map +1 -0
- package/dist/tools/security.d.ts +802 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +426 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/tools/smart-query.d.ts +84 -0
- package/dist/tools/smart-query.d.ts.map +1 -0
- package/dist/tools/smart-query.js +320 -0
- package/dist/tools/smart-query.js.map +1 -0
- package/dist/tools/sys-properties.d.ts +315 -0
- package/dist/tools/sys-properties.d.ts.map +1 -0
- package/dist/tools/sys-properties.js +416 -0
- package/dist/tools/sys-properties.js.map +1 -0
- package/dist/tools/task.d.ts +82 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +96 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/updateset.d.ts +159 -0
- package/dist/tools/updateset.d.ts.map +1 -0
- package/dist/tools/updateset.js +266 -0
- package/dist/tools/updateset.js.map +1 -0
- package/dist/tools/usem-approval.d.ts +130 -0
- package/dist/tools/usem-approval.d.ts.map +1 -0
- package/dist/tools/usem-approval.js +194 -0
- package/dist/tools/usem-approval.js.map +1 -0
- package/dist/tools/usem-config.d.ts +171 -0
- package/dist/tools/usem-config.d.ts.map +1 -0
- package/dist/tools/usem-config.js +254 -0
- package/dist/tools/usem-config.js.map +1 -0
- package/dist/tools/usem-integration.d.ts +228 -0
- package/dist/tools/usem-integration.d.ts.map +1 -0
- package/dist/tools/usem-integration.js +223 -0
- package/dist/tools/usem-integration.js.map +1 -0
- package/dist/tools/usem-sla.d.ts +201 -0
- package/dist/tools/usem-sla.d.ts.map +1 -0
- package/dist/tools/usem-sla.js +322 -0
- package/dist/tools/usem-sla.js.map +1 -0
- package/dist/tools/usem.d.ts +489 -0
- package/dist/tools/usem.d.ts.map +1 -0
- package/dist/tools/usem.js +514 -0
- package/dist/tools/usem.js.map +1 -0
- package/dist/tools/user.d.ts +206 -0
- package/dist/tools/user.d.ts.map +1 -0
- package/dist/tools/user.js +163 -0
- package/dist/tools/user.js.map +1 -0
- package/dist/tools/va.d.ts +217 -0
- package/dist/tools/va.d.ts.map +1 -0
- package/dist/tools/va.js +178 -0
- package/dist/tools/va.js.map +1 -0
- package/dist/tools/workspace.d.ts +565 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +201 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/utils/errors.d.ts +6 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +11 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logging.d.ts +7 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +15 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/permissions.d.ts +21 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +54 -0
- package/dist/utils/permissions.js.map +1 -0
- package/instances.example.json +69 -0
- package/package.json +110 -0
package/README.md
ADDED
|
@@ -0,0 +1,844 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
```text
|
|
4
|
+
/>_________________________________
|
|
5
|
+
[########[]_________________________________>
|
|
6
|
+
\>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# ⛩️ servicenow-mcp ⛩️
|
|
10
|
+
### ⚔️ 武士道 (BUSHIDO) エディション ⚔️
|
|
11
|
+
|
|
12
|
+
<br/>
|
|
13
|
+
|
|
14
|
+
[](https://github.com/tedorigawa001/ServiceNow-MCP)
|
|
15
|
+
[](docs/TOOLS.md)
|
|
16
|
+
[](https://www.typescriptlang.org/)
|
|
17
|
+
[](LICENSE)
|
|
18
|
+
[](https://nodejs.org)
|
|
19
|
+
[](https://modelcontextprotocol.io)
|
|
20
|
+
|
|
21
|
+
<br/>
|
|
22
|
+
|
|
23
|
+
## AI から ServiceNow を自然言語で操作する MCP サーバー
|
|
24
|
+
|
|
25
|
+
> **ローカル PC で動作 · 400+ ツール · 5 分セットアップ · MIT ライセンス**
|
|
26
|
+
|
|
27
|
+
Claude・Cursor・VS Code などの AI ツールから、ServiceNow のインシデント・変更・CMDB・スクリプトなどをすべて自然言語で操作できます。
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## このツールが何をするか(初心者向け)
|
|
34
|
+
|
|
35
|
+
```mermaid
|
|
36
|
+
flowchart TD
|
|
37
|
+
subgraph PC["💻 あなたの PC"]
|
|
38
|
+
direction TB
|
|
39
|
+
AI["🤖 AI クライアント<br/>(Claude Desktop / Cursor / VS Code)"]
|
|
40
|
+
MCP["⚙️ servicenow-mcp サーバー<br/>(ここがこのツール)"]
|
|
41
|
+
AI <-->|"MCP プロトコル (stdio)"| MCP
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
SN["☁️ ServiceNow インスタンス<br/>(開発 PDI または 社内環境)"]
|
|
45
|
+
|
|
46
|
+
MCP <-->|"HTTPS / REST API<br/>(インターネット経由)"| SN
|
|
47
|
+
|
|
48
|
+
style PC fill:#f0f7ff,stroke:#00509E,stroke-width:2px,color:#333,stroke-dasharray: 5 5
|
|
49
|
+
style AI fill:#ffffff,stroke:#333,stroke-width:2px,color:#000
|
|
50
|
+
style MCP fill:#e6ffe6,stroke:#008000,stroke-width:2px,color:#000
|
|
51
|
+
style SN fill:#fff0f0,stroke:#cc0000,stroke-width:2px,color:#000
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**ポイント:**
|
|
55
|
+
- サーバーは **あなたの PC 上で動く** Node.js プロセスです。ServiceNow 以外の第三者サービスには接触しません
|
|
56
|
+
- AI クライアントと stdio(標準入出力)で通信するため、ポート開放やネットワーク設定は不要
|
|
57
|
+
- ServiceNow へは HTTPS で接続します。既存のブラウザアクセスと同じ経路です
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 推奨環境
|
|
62
|
+
|
|
63
|
+
> **まずは開発インスタンス (PDI) でお試しください。**
|
|
64
|
+
> 本番環境への接続は技術的には可能ですが、AI の誤操作・意図しないレコード更新を防ぐため、
|
|
65
|
+
> **はじめは読み取り専用モード (`WRITE_ENABLED=false`) で動作を確認してから本番適用してください。**
|
|
66
|
+
|
|
67
|
+
| 環境 | 推奨度 | 注意 |
|
|
68
|
+
|------|--------|------|
|
|
69
|
+
| **PDI (無料開発インスタンス)** | ★★★ 推奨 | 無料。操作の影響なし。初めて使う方はここから |
|
|
70
|
+
| **社内開発・検証インスタンス** | ★★☆ 可 | チームと共有している場合は読み取り専用で開始 |
|
|
71
|
+
| **本番インスタンス** | ★☆☆ 要注意 | `WRITE_ENABLED=false` + 専用サービスアカウント必須 |
|
|
72
|
+
|
|
73
|
+
無料 PDI → [developer.servicenow.com](https://developer.servicenow.com)
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 動作の仕組み
|
|
78
|
+
|
|
79
|
+
```mermaid
|
|
80
|
+
sequenceDiagram
|
|
81
|
+
participant U as あなた
|
|
82
|
+
participant AI as AI クライアント<br/>(Claude / Cursor)
|
|
83
|
+
participant MCP as servicenow-mcp<br/>(ローカル PC)
|
|
84
|
+
participant SN as ServiceNow<br/>(クラウド)
|
|
85
|
+
|
|
86
|
+
U->>AI: 「P1 インシデントを一覧表示して」
|
|
87
|
+
AI->>MCP: list_incidents(priority=1) を呼び出す
|
|
88
|
+
MCP->>MCP: 権限チェック (読み取りは常に許可)
|
|
89
|
+
MCP->>SN: GET /api/now/table/incident?sysparm_query=priority=1
|
|
90
|
+
SN-->>MCP: JSON でインシデント一覧を返す
|
|
91
|
+
MCP-->>AI: ツール結果を返す
|
|
92
|
+
AI-->>U: 「現在 3 件の P1 インシデントがあります...」
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## はじめての方向け — 5 分セットアップ
|
|
98
|
+
|
|
99
|
+
```mermaid
|
|
100
|
+
flowchart TD
|
|
101
|
+
A([はじめる]) --> B{ServiceNow\nインスタンスはある?}
|
|
102
|
+
B -->|ない| C[developer.servicenow.com\nで無料 PDI を取得\n約 10 分]
|
|
103
|
+
B -->|ある| D
|
|
104
|
+
C --> D{Node.js 20.19+\nインストール済み?}
|
|
105
|
+
D -->|ない| E[nodejs.org から\nLTS 版をインストール]
|
|
106
|
+
E --> F
|
|
107
|
+
D -->|あり| F[ターミナルでコマンド実行]
|
|
108
|
+
|
|
109
|
+
F --> G["git clone https://github.com/tedorigawa001/ServiceNow-MCP.git\ncd servicenow-mcp\nnpm install\nnpm run build"]
|
|
110
|
+
G --> H["npm run setup"]
|
|
111
|
+
H --> I{セットアップ\nウィザード}
|
|
112
|
+
I --> J[インスタンス URL を入力\n例: https://dev12345.service-now.com]
|
|
113
|
+
J --> K[OAuth グラントタイプを選択\nclient_credentials または password]
|
|
114
|
+
K --> L[OAuth 認証情報を入力]
|
|
115
|
+
L --> M[接続テスト]
|
|
116
|
+
M -->|失敗| N[URL・認証情報を確認]
|
|
117
|
+
N --> L
|
|
118
|
+
M -->|成功| O[AI クライアントを自動検出]
|
|
119
|
+
O --> P[設定ファイルを自動書き込み]
|
|
120
|
+
P --> Q([完了!\nAI から ServiceNow に繋がります])
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### ステップ 1 — ソースからビルド
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Node.js のバージョン確認 (20.19 以上が必要)
|
|
127
|
+
node --version
|
|
128
|
+
|
|
129
|
+
# リポジトリをクローン
|
|
130
|
+
git clone https://github.com/tedorigawa001/ServiceNow-MCP.git
|
|
131
|
+
cd servicenow-mcp
|
|
132
|
+
|
|
133
|
+
# 依存パッケージのインストール
|
|
134
|
+
npm install
|
|
135
|
+
|
|
136
|
+
# TypeScript をコンパイル
|
|
137
|
+
npm run build
|
|
138
|
+
|
|
139
|
+
# セットアップウィザードを起動
|
|
140
|
+
npm run setup
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
ウィザードが Claude Desktop・Cursor・VS Code などを自動検出し、設定ファイルを書き込みます。
|
|
144
|
+
AI クライアントの設定には `dist/server.js` の絶対パスが必要です(例: `/Users/yourname/servicenow-mcp/dist/server.js`)。
|
|
145
|
+
|
|
146
|
+
### ステップ 2 — AI クライアントを再起動
|
|
147
|
+
|
|
148
|
+
設定ファイルを書き込んだあと、Claude Desktop や Cursor を **一度完全に終了して再起動** してください。
|
|
149
|
+
|
|
150
|
+
### ステップ 3 — 動作確認
|
|
151
|
+
|
|
152
|
+
AI に話しかけてみましょう:
|
|
153
|
+
```
|
|
154
|
+
「ServiceNow に接続して、直近のインシデントを 5 件表示してください」
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Docker での起動
|
|
160
|
+
|
|
161
|
+

|
|
162
|
+
|
|
163
|
+
### ソースビルド vs Docker — どちらを選ぶか
|
|
164
|
+
|
|
165
|
+
| 比較項目 | ソースビルド(`node dist/server.js`) | Docker(`docker run`) |
|
|
166
|
+
|---------|--------------------------------------|----------------------|
|
|
167
|
+
| **起動速度** | ✅ 即時 | ⚠️ コンテナ起動分のオーバーヘッドあり |
|
|
168
|
+
| **設定のシンプルさ** | ⚠️ 絶対パスが必要 | ✅ `docker` コマンドのみ |
|
|
169
|
+
| **環境依存** | Node.js 20.19+ が必要 | Docker が必要 |
|
|
170
|
+
| **環境の統一** | ⚠️ ホスト環境に依存 | ✅ どの PC でも同一環境 |
|
|
171
|
+
| **チーム配布・CI/CD** | ⚠️ 各自でビルドが必要 | ✅ イメージを共有するだけ |
|
|
172
|
+
| **推奨シーン** | 個人利用・開発 | チーム配布・本番運用 |
|
|
173
|
+
|
|
174
|
+
### イメージのビルドと起動
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# イメージをビルド
|
|
178
|
+
docker build -t servicenow-mcp .
|
|
179
|
+
|
|
180
|
+
# 起動
|
|
181
|
+
docker run --rm -i \
|
|
182
|
+
-e SERVICENOW_INSTANCE_URL=https://yourinstance.service-now.com \
|
|
183
|
+
-e SERVICENOW_OAUTH_CLIENT_ID=your_client_id \
|
|
184
|
+
-e SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret \
|
|
185
|
+
servicenow-mcp
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Password Grant を使う場合は、さらに以下を追加します:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
-e SERVICENOW_OAUTH_USERNAME=service_account_user \
|
|
192
|
+
-e SERVICENOW_OAUTH_PASSWORD=service_account_password \
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### AI クライアントから接続する(Claude Desktop)
|
|
196
|
+
|
|
197
|
+
`claude_desktop_config.json` の `command` / `args` を以下のように変更します。
|
|
198
|
+
Client Credentials を使う場合は `SERVICENOW_OAUTH_USERNAME` と `SERVICENOW_OAUTH_PASSWORD` の 2 行を省略してください。
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"mcpServers": {
|
|
203
|
+
"servicenow": {
|
|
204
|
+
"command": "docker",
|
|
205
|
+
"args": [
|
|
206
|
+
"run", "--rm", "-i",
|
|
207
|
+
"-e", "SERVICENOW_INSTANCE_URL=https://yourinstance.service-now.com",
|
|
208
|
+
"-e", "SERVICENOW_OAUTH_CLIENT_ID=your_client_id",
|
|
209
|
+
"-e", "SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret",
|
|
210
|
+
"-e", "SERVICENOW_OAUTH_USERNAME=service_account_user",
|
|
211
|
+
"-e", "SERVICENOW_OAUTH_PASSWORD=service_account_password",
|
|
212
|
+
"servicenow-mcp"
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
> **注意**: `-i` フラグは必須です。MCP は stdio(標準入出力)で通信するため、インタラクティブモードが必要です。
|
|
220
|
+
|
|
221
|
+
> **HTTP モードで起動する場合**: コンテナ内の既定バインドは `127.0.0.1` のため公開ポートからは到達できません。
|
|
222
|
+
> `-e MCP_TRANSPORT=http -e MCP_HTTP_HOST=0.0.0.0 -p 3000:3000` を付与してください。
|
|
223
|
+
> イメージは非 root(`node` ユーザー)で動作し、`EXPOSE 3000` 済みです。
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 認証方式(OAuth 2.0 のみ)
|
|
228
|
+
|
|
229
|
+
このサーバーは **OAuth 2.0 のみ** をサポートします。Basic Auth はセキュリティリスク(資格情報が平文で設定ファイルに残る)があるため廃止しました。
|
|
230
|
+
|
|
231
|
+
OAuth 2.0 には 2 種類のグラントタイプがあり、用途に応じて自動選択されます。
|
|
232
|
+
|
|
233
|
+
```mermaid
|
|
234
|
+
flowchart TD
|
|
235
|
+
START([OAuth 設定]) --> Q1{ユーザー名/パスワードを\n設定する?}
|
|
236
|
+
Q1 -->|しない| CC["Client Credentials Grant\ngrant_type=client_credentials\n\nclient_id + client_secret のみ\n推奨: サービス間連携・自動化"]
|
|
237
|
+
Q1 -->|する| PW["Password Grant\ngrant_type=password\n\nclient_id + client_secret\n+ username + password\n既存ユーザー権限を引き継ぎたい場合"]
|
|
238
|
+
CC --> CC_NOTE["ServiceNow が Application Registry 上の\nスコープで API を実行する"]
|
|
239
|
+
PW --> PW_NOTE["指定ユーザーの権限でAPIを実行する\n(ACL・ロールがそのまま適用)"]
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Client Credentials(推奨)
|
|
243
|
+
|
|
244
|
+
`client_id` と `client_secret` だけで動作します。ユーザー資格情報が不要なため、サービス間連携に最適です。
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
SERVICENOW_INSTANCE_URL=https://dev12345.service-now.com
|
|
248
|
+
SERVICENOW_OAUTH_CLIENT_ID=your_client_id
|
|
249
|
+
SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Password Grant(ユーザー権限を引き継ぐ場合)
|
|
253
|
+
|
|
254
|
+
特定ユーザーの ACL・ロールで API を実行したい場合に使います。
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
SERVICENOW_INSTANCE_URL=https://dev12345.service-now.com
|
|
258
|
+
SERVICENOW_OAUTH_CLIENT_ID=your_client_id
|
|
259
|
+
SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret
|
|
260
|
+
SERVICENOW_OAUTH_USERNAME=svc_mcp
|
|
261
|
+
SERVICENOW_OAUTH_PASSWORD=your_password
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## OAuth セットアップ手順
|
|
267
|
+
|
|
268
|
+
> OAuth は ServiceNow の管理者権限が必要です。PDI では自分で設定できます。
|
|
269
|
+
|
|
270
|
+
### ServiceNow 側の設定
|
|
271
|
+
|
|
272
|
+
**Step 1 — OAuth アプリケーションレジストリを作成**
|
|
273
|
+
|
|
274
|
+
1. ServiceNow にログイン
|
|
275
|
+
2. 左メニューで「Application Registry」を検索
|
|
276
|
+
3. 「New」→ **「New Inbound Integration Experience」** を選択
|
|
277
|
+
|
|
278
|
+
> ⚠️ 「[Deprecated UI] Create an OAuth API endpoint for external clients」は**旧 UI** です。
|
|
279
|
+
> 現行バージョンでは **New Inbound Integration Experience** を使用してください。
|
|
280
|
+
|
|
281
|
+
グラントタイプによって設定が異なります。
|
|
282
|
+
|
|
283
|
+
#### Client Credentials Grant(推奨)
|
|
284
|
+
|
|
285
|
+
> **重要**: Client Credentials Grant では ServiceNow 側でユーザーを指定する必要があります。
|
|
286
|
+
> これは標準 OAuth の仕様とは異なる ServiceNow 固有の要件です。
|
|
287
|
+
> アクセストークンは「どのユーザーとして API を実行するか」を ServiceNow が決定するために使用します。
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
Name: servicenow-mcp
|
|
291
|
+
Token Format: JWT ← 必須
|
|
292
|
+
Client ID: (自動生成)
|
|
293
|
+
Client Secret: (自動生成 → コピーして保存)
|
|
294
|
+
Redirect URL: http://localhost
|
|
295
|
+
Access Token Lifespan: 1800 (秒)
|
|
296
|
+
Default Grant user: svc_mcp ← 必須: API を実行するサービスアカウントを指定
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
`Default Grant user` に指定したユーザーの **ロール・ACL** が API 実行時に適用されます。
|
|
300
|
+
このユーザーには必要最小限の ServiceNow ロール(例: `itil`, `admin` 等)を付与してください。
|
|
301
|
+
|
|
302
|
+
#### Password Grant
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
Name: servicenow-mcp
|
|
306
|
+
Token Format: JWT ← 必須
|
|
307
|
+
Client ID: (自動生成)
|
|
308
|
+
Client Secret: (自動生成 → コピーして保存)
|
|
309
|
+
Redirect URL: http://localhost
|
|
310
|
+
Access Token Lifespan: 1800 (秒)
|
|
311
|
+
Default Grant user: (不要 — username/password で指定したユーザーが使われます)
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
「Submit」で保存。
|
|
315
|
+
|
|
316
|
+
**Step 2 — 生成された Client ID / Secret を確認**
|
|
317
|
+
|
|
318
|
+
作成したレジストリを開き、`Client ID` と `Client Secret` をメモします。
|
|
319
|
+
|
|
320
|
+
```mermaid
|
|
321
|
+
flowchart LR
|
|
322
|
+
A[Application Registry を開く] --> B[Client ID をコピー]
|
|
323
|
+
A --> C[Client Secret をコピー\nShow をクリック]
|
|
324
|
+
B & C --> D[環境変数に設定]
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### MCP サーバー側の設定
|
|
328
|
+
|
|
329
|
+
#### Client Credentials Grant
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
SERVICENOW_INSTANCE_URL=https://dev12345.service-now.com
|
|
333
|
+
SERVICENOW_OAUTH_CLIENT_ID=your_client_id
|
|
334
|
+
SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret
|
|
335
|
+
# SERVICENOW_OAUTH_USERNAME / PASSWORD は不要
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
#### Password Grant
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
SERVICENOW_INSTANCE_URL=https://dev12345.service-now.com
|
|
342
|
+
SERVICENOW_OAUTH_CLIENT_ID=your_client_id
|
|
343
|
+
SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret
|
|
344
|
+
SERVICENOW_OAUTH_USERNAME=svc_mcp
|
|
345
|
+
SERVICENOW_OAUTH_PASSWORD=your_password
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
接続確認:
|
|
349
|
+
```bash
|
|
350
|
+
node dist/cli/index.js auth test
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## AI クライアント別セットアップ
|
|
356
|
+
|
|
357
|
+
### Claude Desktop
|
|
358
|
+
|
|
359
|
+
設定ファイル: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"mcpServers": {
|
|
364
|
+
"servicenow": {
|
|
365
|
+
"command": "node",
|
|
366
|
+
"args": ["/path/to/servicenow-mcp/dist/server.js"],
|
|
367
|
+
"env": {
|
|
368
|
+
"SERVICENOW_INSTANCE_URL": "https://dev12345.service-now.com",
|
|
369
|
+
"SERVICENOW_OAUTH_CLIENT_ID": "your_client_id",
|
|
370
|
+
"SERVICENOW_OAUTH_CLIENT_SECRET": "your_client_secret",
|
|
371
|
+
"WRITE_ENABLED": "false"
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
> `WRITE_ENABLED: "false"` にしておくと読み取り専用になります。動作確認が終わったら `"true"` に変更できます。
|
|
379
|
+
> ユーザー権限を引き継ぐ場合は `SERVICENOW_OAUTH_USERNAME` と `SERVICENOW_OAUTH_PASSWORD` も追加してください。
|
|
380
|
+
|
|
381
|
+
### Claude Code CLI
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
claude mcp add servicenow node /path/to/servicenow-mcp/dist/server.js \
|
|
385
|
+
--env SERVICENOW_INSTANCE_URL=https://dev12345.service-now.com \
|
|
386
|
+
--env SERVICENOW_OAUTH_CLIENT_ID=your_client_id \
|
|
387
|
+
--env SERVICENOW_OAUTH_CLIENT_SECRET=your_client_secret \
|
|
388
|
+
--env WRITE_ENABLED=false
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Cursor
|
|
392
|
+
|
|
393
|
+
設定ファイル: `.cursor/mcp.json`
|
|
394
|
+
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"mcpServers": {
|
|
398
|
+
"servicenow": {
|
|
399
|
+
"command": "node",
|
|
400
|
+
"args": ["/path/to/servicenow-mcp/dist/server.js"],
|
|
401
|
+
"env": {
|
|
402
|
+
"SERVICENOW_INSTANCE_URL": "https://dev12345.service-now.com",
|
|
403
|
+
"SERVICENOW_OAUTH_CLIENT_ID": "your_client_id",
|
|
404
|
+
"SERVICENOW_OAUTH_CLIENT_SECRET": "your_client_secret",
|
|
405
|
+
"WRITE_ENABLED": "true",
|
|
406
|
+
"SCRIPTING_ENABLED": "true"
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### VS Code (1.99+)
|
|
414
|
+
|
|
415
|
+
設定ファイル: `.vscode/mcp.json`
|
|
416
|
+
|
|
417
|
+
```json
|
|
418
|
+
{
|
|
419
|
+
"servers": {
|
|
420
|
+
"servicenow": {
|
|
421
|
+
"type": "stdio",
|
|
422
|
+
"command": "node",
|
|
423
|
+
"args": ["/path/to/servicenow-mcp/dist/server.js"],
|
|
424
|
+
"env": {
|
|
425
|
+
"SERVICENOW_INSTANCE_URL": "https://dev12345.service-now.com",
|
|
426
|
+
"SERVICENOW_OAUTH_CLIENT_ID": "your_client_id",
|
|
427
|
+
"SERVICENOW_OAUTH_CLIENT_SECRET": "your_client_secret"
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### 対応クライアント一覧
|
|
435
|
+
|
|
436
|
+
| クライアント | 種別 | ガイド |
|
|
437
|
+
|------------|------|--------|
|
|
438
|
+
| Claude Desktop | デスクトップ | [Setup](clients/claude-desktop/SETUP.md) |
|
|
439
|
+
| Claude Code CLI | ターミナル | [Setup](clients/claude-code/SETUP.md) |
|
|
440
|
+
| Cursor | AI エディタ | [Setup](clients/cursor/SETUP.md) |
|
|
441
|
+
| Windsurf | AI エディタ | [Setup](docs/CLIENT_SETUP.md) |
|
|
442
|
+
| VS Code (Native MCP 1.99+) | IDE | [Setup](clients/vscode/SETUP.md) |
|
|
443
|
+
| VS Code + GitHub Copilot | IDE | [Setup](clients/vscode/SETUP.md) |
|
|
444
|
+
| VS Code + Continue.dev | IDE | [Setup](docs/CLIENT_SETUP.md) |
|
|
445
|
+
| VS Code + Cline | IDE | [Setup](docs/CLIENT_SETUP.md) |
|
|
446
|
+
| JetBrains AI | IDE | [Setup](docs/CLIENT_SETUP.md) |
|
|
447
|
+
| Amazon Q Developer | IDE / CLI | [Setup](docs/CLIENT_SETUP.md) |
|
|
448
|
+
| ChatGPT / OpenAI API | API | [Setup](clients/codex/SETUP.md) |
|
|
449
|
+
| Google Gemini API | API | [Setup](clients/gemini/SETUP.md) |
|
|
450
|
+
| Ollama (ローカル LLM) | ローカル | [Setup](docs/CLIENT_SETUP.md) |
|
|
451
|
+
|
|
452
|
+
全クライアントのセットアップ詳細 → [docs/CLIENT_SETUP.md](docs/CLIENT_SETUP.md)
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## トランスポート(stdio / HTTP)
|
|
457
|
+
|
|
458
|
+
デフォルトは **stdio**(標準入出力)で、ポート開放やネットワーク設定は不要です。
|
|
459
|
+
ブラウザ経由の接続(Claude.ai Web UI)、Docker コンテナ公開、複数クライアントでのサーバー共有、
|
|
460
|
+
CI/CD からの呼び出しが必要な場合は **Streamable HTTP** トランスポートに切り替えられます。
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
# HTTP トランスポートで起動
|
|
464
|
+
MCP_TRANSPORT=http node dist/server.js
|
|
465
|
+
# → http://127.0.0.1:3000/mcp で待ち受け、GET /health でヘルスチェック
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
| 環境変数 | デフォルト | 説明 |
|
|
469
|
+
|---|---|---|
|
|
470
|
+
| `MCP_TRANSPORT` | `stdio` | `http` で Streamable HTTP に切り替え |
|
|
471
|
+
| `MCP_HTTP_PORT` | `3000` | 待ち受けポート |
|
|
472
|
+
| `MCP_HTTP_HOST` | `127.0.0.1` | バインドアドレス(外部公開時は `0.0.0.0`)|
|
|
473
|
+
| `MCP_HTTP_PATH` | `/mcp` | MCP エンドポイントのパス |
|
|
474
|
+
| `MCP_HTTP_CORS_ORIGIN` | `*` | CORS 許可オリジン |
|
|
475
|
+
| `MCP_HTTP_ALLOWED_HOSTS` | (なし) | カンマ区切り。指定すると DNS リバインディング保護を有効化 |
|
|
476
|
+
| `MCP_HTTP_ALLOWED_ORIGINS` | (なし) | カンマ区切り。Origin ヘッダの許可リスト |
|
|
477
|
+
|
|
478
|
+
セッションは MCP 仕様に従い、`initialize` 応答の `Mcp-Session-Id` ヘッダで払い出され、
|
|
479
|
+
以降のリクエストで再利用します(`DELETE /mcp` でセッション終了)。HTTP 接続するクライアント設定例:
|
|
480
|
+
|
|
481
|
+
```json
|
|
482
|
+
{
|
|
483
|
+
"mcpServers": {
|
|
484
|
+
"servicenow": {
|
|
485
|
+
"url": "http://localhost:3000/mcp"
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
> **セキュリティ注意**: デフォルトは loopback(`127.0.0.1`)バインドです。`MCP_HTTP_HOST=0.0.0.0`
|
|
492
|
+
> で外部公開する場合は、リバースプロキシでの TLS 終端・認証、および `MCP_HTTP_ALLOWED_HOSTS` /
|
|
493
|
+
> `MCP_HTTP_ALLOWED_ORIGINS` による保護を推奨します。
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## 権限設定(何ができるかを制御する)
|
|
498
|
+
|
|
499
|
+
デフォルトは**読み取り専用**です。操作範囲を広げたい場合は環境変数で段階的に有効化します。
|
|
500
|
+
|
|
501
|
+
```mermaid
|
|
502
|
+
graph TD
|
|
503
|
+
T0["🛡️ Tier 0: 常時有効 (デフォルト)<br/>インシデント表示 / KB 検索 / レコード参照..."]
|
|
504
|
+
T1["✏️ Tier 1: WRITE_ENABLED=true<br/>インシデント作成・更新 / 変更リクエスト管理..."]
|
|
505
|
+
T2["🧩 Tier 2: CMDB_WRITE_ENABLED=true (Tier 1も必要)<br/>CI の作成・更新 / 関連付け管理..."]
|
|
506
|
+
T3["⚙️ Tier 3: SCRIPTING_ENABLED=true (Tier 1も必要)<br/>ビジネスルール / スクリプト / Update Set..."]
|
|
507
|
+
TAI["🤖 Tier AI: NOW_ASSIST_ENABLED=true<br/>NLQ / AI サマリー / Agentic Playbook..."]
|
|
508
|
+
|
|
509
|
+
T0 --> T1
|
|
510
|
+
T1 --> T2
|
|
511
|
+
T1 --> T3
|
|
512
|
+
T0 -.->|"独立オプション"| TAI
|
|
513
|
+
|
|
514
|
+
style T0 fill:#f5f5f5,stroke:#999,stroke-width:2px,color:#333
|
|
515
|
+
style T1 fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#000
|
|
516
|
+
style T2 fill:#fff3e0,stroke:#ff9800,stroke-width:2px,color:#000
|
|
517
|
+
style T3 fill:#ffebee,stroke:#f44336,stroke-width:2px,color:#000
|
|
518
|
+
style TAI fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px,color:#000
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
**本番環境で使う場合の推奨設定:**
|
|
522
|
+
```bash
|
|
523
|
+
WRITE_ENABLED=false # まずは読み取りのみで確認
|
|
524
|
+
CMDB_WRITE_ENABLED=false
|
|
525
|
+
SCRIPTING_ENABLED=false # 本番では原則 false のまま
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## ロールベース ツールパッケージ
|
|
531
|
+
|
|
532
|
+
`MCP_TOOL_PACKAGE` 環境変数でツールを絞り込めます。全部入りではなく、用途に応じたセットを使うと AI が迷わずに済みます。
|
|
533
|
+
|
|
534
|
+
```mermaid
|
|
535
|
+
mindmap
|
|
536
|
+
root((ツールパッケージ))
|
|
537
|
+
full
|
|
538
|
+
全400+ツール
|
|
539
|
+
service_desk
|
|
540
|
+
インシデント管理
|
|
541
|
+
タスク/承認
|
|
542
|
+
KB検索
|
|
543
|
+
SLA確認
|
|
544
|
+
change_coordinator
|
|
545
|
+
変更管理
|
|
546
|
+
CABスケジュール
|
|
547
|
+
CMDB参照
|
|
548
|
+
platform_developer
|
|
549
|
+
スクリプト管理
|
|
550
|
+
ACL/UI Policy
|
|
551
|
+
ATFテスト
|
|
552
|
+
Update Set
|
|
553
|
+
system_administrator
|
|
554
|
+
ユーザー/グループ管理
|
|
555
|
+
レポート/ログ
|
|
556
|
+
PA ダッシュボード
|
|
557
|
+
itom_engineer
|
|
558
|
+
CMDB
|
|
559
|
+
Discovery
|
|
560
|
+
MIDサーバー
|
|
561
|
+
ai_developer
|
|
562
|
+
Now Assist
|
|
563
|
+
NLQ
|
|
564
|
+
Agentic Playbooks
|
|
565
|
+
secops_analyst
|
|
566
|
+
脆弱性 VI/RT
|
|
567
|
+
USEM/統合ヘルス
|
|
568
|
+
SLA/例外承認
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
| パッケージ名 | 対象ロール | 主なツール |
|
|
572
|
+
|------------|----------|-----------|
|
|
573
|
+
| `full` | 管理者 | 全ツール (400+) |
|
|
574
|
+
| `service_desk` | L1/L2 エージェント | インシデント・タスク・KB・SLA |
|
|
575
|
+
| `change_coordinator` | 変更管理者 | 変更リクエスト・CAB・CMDB |
|
|
576
|
+
| `knowledge_author` | KB 著者 | KB 作成・公開 |
|
|
577
|
+
| `catalog_builder` | カタログ管理者 | カタログ・承認ルール |
|
|
578
|
+
| `system_administrator` | システム管理者 | ユーザー・グループ・レポート |
|
|
579
|
+
| `platform_developer` | 開発者 | スクリプト・ATF・Update Set |
|
|
580
|
+
| `portal_developer` | ポータル開発者 | ポータル・ウィジェット・UX |
|
|
581
|
+
| `integration_engineer` | 統合エンジニア | REST・Transform・イベント |
|
|
582
|
+
| `itom_engineer` | ITOM エンジニア | CMDB・Discovery(実行履歴/エラー調査)・MID ヘルス・ACC |
|
|
583
|
+
| `agile_manager` | スクラムマスター | ストーリー・エピック |
|
|
584
|
+
| `ai_developer` | AI 開発者 | Now Assist・NLQ・Playbook |
|
|
585
|
+
| `itam_analyst` | 資産管理者 | 資産・ライセンス・契約・SAM Pro(ソフトウェア資産管理) |
|
|
586
|
+
| `secops_analyst` | SecOps アナリスト | 脆弱性(VI/RT)・USEM・統合ヘルス・SLA・例外承認 |
|
|
587
|
+
| `devops_engineer` | DevOps | パイプライン・デプロイ |
|
|
588
|
+
|
|
589
|
+
詳細 → [docs/TOOL_PACKAGES.md](docs/TOOL_PACKAGES.md)
|
|
590
|
+
|
|
591
|
+
---
|
|
592
|
+
|
|
593
|
+
## 使用例
|
|
594
|
+
|
|
595
|
+
### 自然言語で操作する
|
|
596
|
+
|
|
597
|
+
```
|
|
598
|
+
「Network Operations グループの P1 インシデントをすべて表示して」
|
|
599
|
+
|
|
600
|
+
「INC0012345 に "調査中。30 分以内に更新します" とワークノートを追加して」
|
|
601
|
+
|
|
602
|
+
「SAP 本番システムの障害でインシデントを作成して。
|
|
603
|
+
優先度 Critical、Network Ops グループに割り当てて」
|
|
604
|
+
|
|
605
|
+
「先月の Priority 別インシデント件数をグラフ用データで出して」
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### 典型的なやりとりの流れ
|
|
609
|
+
|
|
610
|
+
```mermaid
|
|
611
|
+
sequenceDiagram
|
|
612
|
+
participant U as あなた
|
|
613
|
+
participant AI as AI アシスタント
|
|
614
|
+
participant MCP as servicenow-mcp
|
|
615
|
+
participant SN as ServiceNow
|
|
616
|
+
|
|
617
|
+
U->>AI: 「SAP の P1 インシデントを作って」
|
|
618
|
+
AI->>MCP: create_incident を呼び出す
|
|
619
|
+
MCP->>MCP: WRITE_ENABLED チェック ✅
|
|
620
|
+
MCP->>SN: POST /api/now/table/incident
|
|
621
|
+
SN-->>MCP: INC0099001 作成完了
|
|
622
|
+
MCP-->>AI: 作成結果を返す
|
|
623
|
+
AI-->>U: 「INC0099001 を作成しました」
|
|
624
|
+
|
|
625
|
+
U->>AI: 「SAP サーバーの CMDB 依存関係も確認して」
|
|
626
|
+
AI->>MCP: search_cmdb_ci + list_relationships
|
|
627
|
+
MCP->>SN: CMDB API を 2 回呼び出す
|
|
628
|
+
SN-->>MCP: 依存 CI 8 件
|
|
629
|
+
MCP-->>AI: 依存関係リスト
|
|
630
|
+
AI-->>U: 「SAP-PROD-DB01 は 8 つの CI に依存しています」
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### スラッシュコマンド & @メンション
|
|
634
|
+
|
|
635
|
+
```
|
|
636
|
+
/morning-standup → P1/P2 オープンインシデント・当日変更・SLA 違反のサマリー
|
|
637
|
+
/my-tickets → 自分に割り当てられたオープンタスク一覧
|
|
638
|
+
/p1-alerts → アクティブな P1 インシデント一覧
|
|
639
|
+
|
|
640
|
+
@my-incidents → 自分のインシデントをコンテキストに追加
|
|
641
|
+
@ci:web-prod-01 → CMDB CI レコードをコンテキストに追加
|
|
642
|
+
@kb:VPN-setup → KB 記事をコンテキストに追加
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
120+ の実例 → [EXAMPLES.md](EXAMPLES.md)
|
|
646
|
+
|
|
647
|
+
---
|
|
648
|
+
|
|
649
|
+
## マルチインスタンス対応
|
|
650
|
+
|
|
651
|
+
```mermaid
|
|
652
|
+
graph LR
|
|
653
|
+
User["あなたの PC\n(AI + MCP サーバー)"] -->|dev| DEV[(開発 PDI\ndev12345.service-now.com)]
|
|
654
|
+
User -->|staging| STG[(検証\nstg.company.com)]
|
|
655
|
+
User -->|prod| PRD[(本番\nacme.service-now.com)]
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
{
|
|
660
|
+
"default_instance": "dev",
|
|
661
|
+
"instances": {
|
|
662
|
+
"dev": {
|
|
663
|
+
"url": "https://dev12345.service-now.com",
|
|
664
|
+
"client_id": "dev-client-id",
|
|
665
|
+
"client_secret": "dev-client-secret"
|
|
666
|
+
},
|
|
667
|
+
"prod": {
|
|
668
|
+
"url": "https://acme.service-now.com",
|
|
669
|
+
"auth": "oauth",
|
|
670
|
+
"client_id": "xxx",
|
|
671
|
+
"client_secret": "yyy",
|
|
672
|
+
"username": "svc_account",
|
|
673
|
+
"password": "zzz"
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
SN_INSTANCES_CONFIG=/path/to/instances.json
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
詳細 → [docs/MULTI_INSTANCE.md](docs/MULTI_INSTANCE.md)
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
## モジュールカバレッジ
|
|
688
|
+
|
|
689
|
+
```mermaid
|
|
690
|
+
graph TB
|
|
691
|
+
subgraph ITSM["ITSM & サービス管理"]
|
|
692
|
+
I1[インシデント管理]
|
|
693
|
+
I2[問題管理]
|
|
694
|
+
I3[変更管理]
|
|
695
|
+
I4[タスク管理]
|
|
696
|
+
I5[ナレッジベース]
|
|
697
|
+
I6[サービスカタログ]
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
subgraph PLATFORM["プラットフォーム & 開発"]
|
|
701
|
+
P1[スクリプト/ビジネスルール]
|
|
702
|
+
P2[Flow Designer]
|
|
703
|
+
P3[Service Portal / UIB]
|
|
704
|
+
P4[ATF テスト]
|
|
705
|
+
P5[Update Set 管理]
|
|
706
|
+
P6[App Studio]
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
subgraph OPS["運用 & 分析"]
|
|
710
|
+
O1[CMDB / ITOM]
|
|
711
|
+
O2[Performance Analytics]
|
|
712
|
+
O3[レポート / 集計]
|
|
713
|
+
O4[通知 / 添付]
|
|
714
|
+
O5[システムプロパティ]
|
|
715
|
+
O6[DevOps パイプライン]
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
subgraph EXTENDED["拡張モジュール"]
|
|
719
|
+
E1[HRSD]
|
|
720
|
+
E2[CSM]
|
|
721
|
+
E3[SecOps / GRC]
|
|
722
|
+
E4[Agile / Scrum]
|
|
723
|
+
E5[IT 資産管理]
|
|
724
|
+
E6[Virtual Agent]
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
subgraph AI["AI & インテグレーション"]
|
|
728
|
+
A1[Now Assist / AI]
|
|
729
|
+
A2[Integration Hub]
|
|
730
|
+
A3[Machine Learning]
|
|
731
|
+
A4[モバイル]
|
|
732
|
+
A5[ワークスペース]
|
|
733
|
+
end
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## プロジェクト構造
|
|
739
|
+
|
|
740
|
+
```
|
|
741
|
+
servicenow-mcp/
|
|
742
|
+
├── src/
|
|
743
|
+
│ ├── server.ts # MCP サーバーエントリーポイント
|
|
744
|
+
│ ├── servicenow/
|
|
745
|
+
│ │ ├── client.ts # REST API クライアント (OAuth)
|
|
746
|
+
│ │ ├── instances.ts # マルチインスタンスマネージャー
|
|
747
|
+
│ │ └── types.ts # TypeScript 型定義
|
|
748
|
+
│ ├── tools/ # 39 ドメインモジュール (400+ ツール)
|
|
749
|
+
│ │ ├── index.ts # ツールルーター & パッケージ定義
|
|
750
|
+
│ │ ├── incident.ts
|
|
751
|
+
│ │ ├── change.ts
|
|
752
|
+
│ │ ├── knowledge.ts
|
|
753
|
+
│ │ └── ...
|
|
754
|
+
│ ├── prompts/ # スラッシュコマンド定義
|
|
755
|
+
│ ├── resources/ # @メンション定義
|
|
756
|
+
│ ├── cli/ # セットアップウィザード
|
|
757
|
+
│ └── utils/
|
|
758
|
+
│ ├── permissions.ts # 5 段階権限ゲート
|
|
759
|
+
│ └── errors.ts
|
|
760
|
+
├── tests/ # ユニットテスト (Vitest · 550 件)
|
|
761
|
+
├── docs/ # ドキュメント
|
|
762
|
+
└── instances.example.json
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
---
|
|
766
|
+
|
|
767
|
+
## 開発
|
|
768
|
+
|
|
769
|
+
```bash
|
|
770
|
+
npm install # 依存パッケージのインストール
|
|
771
|
+
npm run build # TypeScript → dist/ にコンパイル
|
|
772
|
+
npm test # ユニットテストを実行 (550 件)
|
|
773
|
+
npm run dev # ウォッチモード
|
|
774
|
+
npm run type-check # 型チェックのみ
|
|
775
|
+
npm run lint # ESLint
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
---
|
|
779
|
+
|
|
780
|
+
## よくある質問
|
|
781
|
+
|
|
782
|
+
**ServiceNow の API 知識は必要ですか?**
|
|
783
|
+
いいえ。「P1 インシデントを一覧表示して」のように日本語で話しかけるだけです。API 呼び出しはサーバーが自動で行います。
|
|
784
|
+
|
|
785
|
+
**本番環境に接続しても大丈夫ですか?**
|
|
786
|
+
`WRITE_ENABLED=false`(デフォルト)で接続する分には読み取りのみで安全です。書き込みを有効にする前に、必ず開発環境で動作を確認してください。
|
|
787
|
+
|
|
788
|
+
**無料で使えますか?**
|
|
789
|
+
このサーバー自体は MIT ライセンスで無料です。ServiceNow の無料 PDI(Personal Developer Instance)も [developer.servicenow.com](https://developer.servicenow.com) で取得できます。AI クライアント側(Claude Pro 等)の料金は各サービスに従います。
|
|
790
|
+
|
|
791
|
+
**MCP って何ですか?**
|
|
792
|
+
Model Context Protocol の略で、AI クライアントが外部ツールを呼び出すための標準規格です。Claude・Cursor などが対応しています。このサーバーは MCP に準拠しているため、対応 AI から自動的に発見・使用されます。
|
|
793
|
+
|
|
794
|
+
**複数インスタンスに接続できますか?**
|
|
795
|
+
はい。`instances.json` で dev / staging / prod を定義しておき、「本番インスタンスに切り替えて」と指示するだけで切り替わります。
|
|
796
|
+
|
|
797
|
+
---
|
|
798
|
+
|
|
799
|
+
## ドキュメント
|
|
800
|
+
|
|
801
|
+
| ガイド | 内容 |
|
|
802
|
+
|-------|------|
|
|
803
|
+
| [docs/INSTALLATION.md](docs/INSTALLATION.md) | 環境変数リファレンス |
|
|
804
|
+
| [docs/CLIENT_SETUP.md](docs/CLIENT_SETUP.md) | 全 AI クライアントのセットアップ |
|
|
805
|
+
| [docs/SERVICENOW_OAUTH_SETUP.md](docs/SERVICENOW_OAUTH_SETUP.md) | ServiceNow OAuth アプリ作成手順(詳細版) |
|
|
806
|
+
| [docs/TOOL_PACKAGES.md](docs/TOOL_PACKAGES.md) | ロールベースパッケージの詳細 |
|
|
807
|
+
| [docs/TOOLS.md](docs/TOOLS.md) | 全ツールのパラメータ・権限要件 |
|
|
808
|
+
| [docs/MULTI_INSTANCE.md](docs/MULTI_INSTANCE.md) | マルチインスタンス設定 |
|
|
809
|
+
| [docs/NOW_ASSIST.md](docs/NOW_ASSIST.md) | Now Assist / AI 統合 |
|
|
810
|
+
| [docs/ATF.md](docs/ATF.md) | ATF テストガイド |
|
|
811
|
+
| [EXAMPLES.md](EXAMPLES.md) | 120+ 実用例 |
|
|
812
|
+
| [SECURITY.md](SECURITY.md) | セキュリティポリシー・脆弱性報告 |
|
|
813
|
+
| [CHANGELOG.md](CHANGELOG.md) | 変更履歴 |
|
|
814
|
+
|
|
815
|
+
---
|
|
816
|
+
|
|
817
|
+
## コントリビュート
|
|
818
|
+
|
|
819
|
+
[CONTRIBUTING.md](CONTRIBUTING.md) をお読みの上、Pull Request をお送りください。
|
|
820
|
+
バグ報告・機能要望 → [Issue を開く](../../issues)
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## セキュリティ
|
|
825
|
+
|
|
826
|
+
脆弱性を発見した場合は **公開 Issue には投稿せず**、[SECURITY.md](SECURITY.md) の責任ある開示プロセスに従ってください。
|
|
827
|
+
|
|
828
|
+
---
|
|
829
|
+
|
|
830
|
+
## ライセンス
|
|
831
|
+
|
|
832
|
+
[MIT](LICENSE) — 個人・商用利用とも無料。
|
|
833
|
+
|
|
834
|
+
---
|
|
835
|
+
|
|
836
|
+
<div align="center">
|
|
837
|
+
|
|
838
|
+
**400+ ツール · 39 モジュール · ローカル PC で動作 · 永久オープンソース**
|
|
839
|
+
|
|
840
|
+
役に立ったら ⭐ スターをお願いします — 他の人が見つけやすくなります。
|
|
841
|
+
|
|
842
|
+
[](https://github.com/tedorigawa001/ServiceNow-MCP/stargazers)
|
|
843
|
+
|
|
844
|
+
</div>
|