@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.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +844 -0
  3. package/dist/cli/auth.d.ts +15 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +200 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/config-store.d.ts +28 -0
  8. package/dist/cli/config-store.d.ts.map +1 -0
  9. package/dist/cli/config-store.js +66 -0
  10. package/dist/cli/config-store.js.map +1 -0
  11. package/dist/cli/detect-clients.d.ts +16 -0
  12. package/dist/cli/detect-clients.d.ts.map +1 -0
  13. package/dist/cli/detect-clients.js +151 -0
  14. package/dist/cli/detect-clients.js.map +1 -0
  15. package/dist/cli/index.d.ts +3 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +135 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/setup.d.ts +4 -0
  20. package/dist/cli/setup.d.ts.map +1 -0
  21. package/dist/cli/setup.js +564 -0
  22. package/dist/cli/setup.js.map +1 -0
  23. package/dist/cli/writers/index.d.ts +9 -0
  24. package/dist/cli/writers/index.d.ts.map +1 -0
  25. package/dist/cli/writers/index.js +135 -0
  26. package/dist/cli/writers/index.js.map +1 -0
  27. package/dist/prompts/index.d.ts +25 -0
  28. package/dist/prompts/index.d.ts.map +1 -0
  29. package/dist/prompts/index.js +38 -0
  30. package/dist/prompts/index.js.map +1 -0
  31. package/dist/prompts/itsm.d.ts +20 -0
  32. package/dist/prompts/itsm.d.ts.map +1 -0
  33. package/dist/prompts/itsm.js +110 -0
  34. package/dist/prompts/itsm.js.map +1 -0
  35. package/dist/prompts/user-prompts.d.ts +3 -0
  36. package/dist/prompts/user-prompts.d.ts.map +1 -0
  37. package/dist/prompts/user-prompts.js +35 -0
  38. package/dist/prompts/user-prompts.js.map +1 -0
  39. package/dist/resources/index.d.ts +26 -0
  40. package/dist/resources/index.d.ts.map +1 -0
  41. package/dist/resources/index.js +99 -0
  42. package/dist/resources/index.js.map +1 -0
  43. package/dist/server-http.d.ts +41 -0
  44. package/dist/server-http.d.ts.map +1 -0
  45. package/dist/server-http.js +187 -0
  46. package/dist/server-http.js.map +1 -0
  47. package/dist/server.d.ts +54 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +150 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/servicenow/client.d.ts +137 -0
  52. package/dist/servicenow/client.d.ts.map +1 -0
  53. package/dist/servicenow/client.js +855 -0
  54. package/dist/servicenow/client.js.map +1 -0
  55. package/dist/servicenow/instances.d.ts +28 -0
  56. package/dist/servicenow/instances.d.ts.map +1 -0
  57. package/dist/servicenow/instances.js +190 -0
  58. package/dist/servicenow/instances.js.map +1 -0
  59. package/dist/servicenow/types.d.ts +578 -0
  60. package/dist/servicenow/types.d.ts.map +1 -0
  61. package/dist/servicenow/types.js +3 -0
  62. package/dist/servicenow/types.js.map +1 -0
  63. package/dist/tools/agile.d.ts +225 -0
  64. package/dist/tools/agile.d.ts.map +1 -0
  65. package/dist/tools/agile.js +205 -0
  66. package/dist/tools/agile.js.map +1 -0
  67. package/dist/tools/app-studio.d.ts +139 -0
  68. package/dist/tools/app-studio.d.ts.map +1 -0
  69. package/dist/tools/app-studio.js +139 -0
  70. package/dist/tools/app-studio.js.map +1 -0
  71. package/dist/tools/atf.d.ts +144 -0
  72. package/dist/tools/atf.d.ts.map +1 -0
  73. package/dist/tools/atf.js +186 -0
  74. package/dist/tools/atf.js.map +1 -0
  75. package/dist/tools/catalog.d.ts +966 -0
  76. package/dist/tools/catalog.d.ts.map +1 -0
  77. package/dist/tools/catalog.js +640 -0
  78. package/dist/tools/catalog.js.map +1 -0
  79. package/dist/tools/change.d.ts +351 -0
  80. package/dist/tools/change.d.ts.map +1 -0
  81. package/dist/tools/change.js +214 -0
  82. package/dist/tools/change.js.map +1 -0
  83. package/dist/tools/core.d.ts +768 -0
  84. package/dist/tools/core.d.ts.map +1 -0
  85. package/dist/tools/core.js +695 -0
  86. package/dist/tools/core.js.map +1 -0
  87. package/dist/tools/csm.d.ts +403 -0
  88. package/dist/tools/csm.d.ts.map +1 -0
  89. package/dist/tools/csm.js +256 -0
  90. package/dist/tools/csm.js.map +1 -0
  91. package/dist/tools/deployment.d.ts +366 -0
  92. package/dist/tools/deployment.d.ts.map +1 -0
  93. package/dist/tools/deployment.js +181 -0
  94. package/dist/tools/deployment.js.map +1 -0
  95. package/dist/tools/devops.d.ts +236 -0
  96. package/dist/tools/devops.d.ts.map +1 -0
  97. package/dist/tools/devops.js +207 -0
  98. package/dist/tools/devops.js.map +1 -0
  99. package/dist/tools/discovery.d.ts +306 -0
  100. package/dist/tools/discovery.d.ts.map +1 -0
  101. package/dist/tools/discovery.js +357 -0
  102. package/dist/tools/discovery.js.map +1 -0
  103. package/dist/tools/flow.d.ts +496 -0
  104. package/dist/tools/flow.d.ts.map +1 -0
  105. package/dist/tools/flow.js +348 -0
  106. package/dist/tools/flow.js.map +1 -0
  107. package/dist/tools/hrsd.d.ts +790 -0
  108. package/dist/tools/hrsd.d.ts.map +1 -0
  109. package/dist/tools/hrsd.js +378 -0
  110. package/dist/tools/hrsd.js.map +1 -0
  111. package/dist/tools/incident.d.ts +259 -0
  112. package/dist/tools/incident.d.ts.map +1 -0
  113. package/dist/tools/incident.js +170 -0
  114. package/dist/tools/incident.js.map +1 -0
  115. package/dist/tools/index.d.ts +13 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/tools/index.js +385 -0
  118. package/dist/tools/index.js.map +1 -0
  119. package/dist/tools/integration.d.ts +940 -0
  120. package/dist/tools/integration.d.ts.map +1 -0
  121. package/dist/tools/integration.js +685 -0
  122. package/dist/tools/integration.js.map +1 -0
  123. package/dist/tools/itam.d.ts +462 -0
  124. package/dist/tools/itam.d.ts.map +1 -0
  125. package/dist/tools/itam.js +306 -0
  126. package/dist/tools/itam.js.map +1 -0
  127. package/dist/tools/knowledge.d.ts +187 -0
  128. package/dist/tools/knowledge.d.ts.map +1 -0
  129. package/dist/tools/knowledge.js +161 -0
  130. package/dist/tools/knowledge.js.map +1 -0
  131. package/dist/tools/ml.d.ts +263 -0
  132. package/dist/tools/ml.d.ts.map +1 -0
  133. package/dist/tools/ml.js +251 -0
  134. package/dist/tools/ml.js.map +1 -0
  135. package/dist/tools/mobile.d.ts +352 -0
  136. package/dist/tools/mobile.d.ts.map +1 -0
  137. package/dist/tools/mobile.js +122 -0
  138. package/dist/tools/mobile.js.map +1 -0
  139. package/dist/tools/notification.d.ts +590 -0
  140. package/dist/tools/notification.d.ts.map +1 -0
  141. package/dist/tools/notification.js +382 -0
  142. package/dist/tools/notification.js.map +1 -0
  143. package/dist/tools/now-assist.d.ts +300 -0
  144. package/dist/tools/now-assist.d.ts.map +1 -0
  145. package/dist/tools/now-assist.js +227 -0
  146. package/dist/tools/now-assist.js.map +1 -0
  147. package/dist/tools/performance.d.ts +447 -0
  148. package/dist/tools/performance.d.ts.map +1 -0
  149. package/dist/tools/performance.js +473 -0
  150. package/dist/tools/performance.js.map +1 -0
  151. package/dist/tools/portal.d.ts +530 -0
  152. package/dist/tools/portal.d.ts.map +1 -0
  153. package/dist/tools/portal.js +425 -0
  154. package/dist/tools/portal.js.map +1 -0
  155. package/dist/tools/problem.d.ts +111 -0
  156. package/dist/tools/problem.d.ts.map +1 -0
  157. package/dist/tools/problem.js +101 -0
  158. package/dist/tools/problem.js.map +1 -0
  159. package/dist/tools/reporting.d.ts +825 -0
  160. package/dist/tools/reporting.d.ts.map +1 -0
  161. package/dist/tools/reporting.js +453 -0
  162. package/dist/tools/reporting.js.map +1 -0
  163. package/dist/tools/sam.d.ts +312 -0
  164. package/dist/tools/sam.d.ts.map +1 -0
  165. package/dist/tools/sam.js +360 -0
  166. package/dist/tools/sam.js.map +1 -0
  167. package/dist/tools/schema-helpers.d.ts +119 -0
  168. package/dist/tools/schema-helpers.d.ts.map +1 -0
  169. package/dist/tools/schema-helpers.js +121 -0
  170. package/dist/tools/schema-helpers.js.map +1 -0
  171. package/dist/tools/script.d.ts +714 -0
  172. package/dist/tools/script.d.ts.map +1 -0
  173. package/dist/tools/script.js +629 -0
  174. package/dist/tools/script.js.map +1 -0
  175. package/dist/tools/security.d.ts +802 -0
  176. package/dist/tools/security.d.ts.map +1 -0
  177. package/dist/tools/security.js +426 -0
  178. package/dist/tools/security.js.map +1 -0
  179. package/dist/tools/smart-query.d.ts +84 -0
  180. package/dist/tools/smart-query.d.ts.map +1 -0
  181. package/dist/tools/smart-query.js +320 -0
  182. package/dist/tools/smart-query.js.map +1 -0
  183. package/dist/tools/sys-properties.d.ts +315 -0
  184. package/dist/tools/sys-properties.d.ts.map +1 -0
  185. package/dist/tools/sys-properties.js +416 -0
  186. package/dist/tools/sys-properties.js.map +1 -0
  187. package/dist/tools/task.d.ts +82 -0
  188. package/dist/tools/task.d.ts.map +1 -0
  189. package/dist/tools/task.js +96 -0
  190. package/dist/tools/task.js.map +1 -0
  191. package/dist/tools/updateset.d.ts +159 -0
  192. package/dist/tools/updateset.d.ts.map +1 -0
  193. package/dist/tools/updateset.js +266 -0
  194. package/dist/tools/updateset.js.map +1 -0
  195. package/dist/tools/usem-approval.d.ts +130 -0
  196. package/dist/tools/usem-approval.d.ts.map +1 -0
  197. package/dist/tools/usem-approval.js +194 -0
  198. package/dist/tools/usem-approval.js.map +1 -0
  199. package/dist/tools/usem-config.d.ts +171 -0
  200. package/dist/tools/usem-config.d.ts.map +1 -0
  201. package/dist/tools/usem-config.js +254 -0
  202. package/dist/tools/usem-config.js.map +1 -0
  203. package/dist/tools/usem-integration.d.ts +228 -0
  204. package/dist/tools/usem-integration.d.ts.map +1 -0
  205. package/dist/tools/usem-integration.js +223 -0
  206. package/dist/tools/usem-integration.js.map +1 -0
  207. package/dist/tools/usem-sla.d.ts +201 -0
  208. package/dist/tools/usem-sla.d.ts.map +1 -0
  209. package/dist/tools/usem-sla.js +322 -0
  210. package/dist/tools/usem-sla.js.map +1 -0
  211. package/dist/tools/usem.d.ts +489 -0
  212. package/dist/tools/usem.d.ts.map +1 -0
  213. package/dist/tools/usem.js +514 -0
  214. package/dist/tools/usem.js.map +1 -0
  215. package/dist/tools/user.d.ts +206 -0
  216. package/dist/tools/user.d.ts.map +1 -0
  217. package/dist/tools/user.js +163 -0
  218. package/dist/tools/user.js.map +1 -0
  219. package/dist/tools/va.d.ts +217 -0
  220. package/dist/tools/va.d.ts.map +1 -0
  221. package/dist/tools/va.js +178 -0
  222. package/dist/tools/va.js.map +1 -0
  223. package/dist/tools/workspace.d.ts +565 -0
  224. package/dist/tools/workspace.d.ts.map +1 -0
  225. package/dist/tools/workspace.js +201 -0
  226. package/dist/tools/workspace.js.map +1 -0
  227. package/dist/utils/errors.d.ts +6 -0
  228. package/dist/utils/errors.d.ts.map +1 -0
  229. package/dist/utils/errors.js +11 -0
  230. package/dist/utils/errors.js.map +1 -0
  231. package/dist/utils/logging.d.ts +7 -0
  232. package/dist/utils/logging.d.ts.map +1 -0
  233. package/dist/utils/logging.js +15 -0
  234. package/dist/utils/logging.js.map +1 -0
  235. package/dist/utils/permissions.d.ts +21 -0
  236. package/dist/utils/permissions.d.ts.map +1 -0
  237. package/dist/utils/permissions.js +54 -0
  238. package/dist/utils/permissions.js.map +1 -0
  239. package/instances.example.json +69 -0
  240. 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
+ [![AI-Powered](https://img.shields.io/badge/AI--Powered-Claude%20%7C%20ChatGPT%20%7C%20Gemini%20%7C%20Cursor%20%7C%20Copilot-00D4AA?style=flat-square)](https://github.com/tedorigawa001/ServiceNow-MCP)
15
+ [![Tools](https://img.shields.io/badge/400%2B%20Tools-31%20Modules-0F4C81?style=flat-square)](docs/TOOLS.md)
16
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
17
+ [![License: MIT](https://img.shields.io/badge/license-MIT-f59e0b?style=flat-square)](LICENSE)
18
+ [![Node.js](https://img.shields.io/badge/Node.js-20.19%2B-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)
19
+ [![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-0F4C81?style=flat-square)](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
+ ![Docker 構成図](docs/images/docker-architecture.svg)
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
+ [![GitHub Stars](https://img.shields.io/github/stars/tedorigawa001/ServiceNow-MCP?style=social)](https://github.com/tedorigawa001/ServiceNow-MCP/stargazers)
843
+
844
+ </div>