@aartiq/servicenow-mcp 1.0.0

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 (201) hide show
  1. package/.env.example +84 -0
  2. package/LICENSE +21 -0
  3. package/README.md +910 -0
  4. package/dist/cli/auth.d.ts +14 -0
  5. package/dist/cli/auth.d.ts.map +1 -0
  6. package/dist/cli/auth.js +179 -0
  7. package/dist/cli/auth.js.map +1 -0
  8. package/dist/cli/config-store.d.ts +28 -0
  9. package/dist/cli/config-store.d.ts.map +1 -0
  10. package/dist/cli/config-store.js +64 -0
  11. package/dist/cli/config-store.js.map +1 -0
  12. package/dist/cli/detect-clients.d.ts +16 -0
  13. package/dist/cli/detect-clients.d.ts.map +1 -0
  14. package/dist/cli/detect-clients.js +151 -0
  15. package/dist/cli/detect-clients.js.map +1 -0
  16. package/dist/cli/index.d.ts +3 -0
  17. package/dist/cli/index.d.ts.map +1 -0
  18. package/dist/cli/index.js +129 -0
  19. package/dist/cli/index.js.map +1 -0
  20. package/dist/cli/setup.d.ts +4 -0
  21. package/dist/cli/setup.d.ts.map +1 -0
  22. package/dist/cli/setup.js +574 -0
  23. package/dist/cli/setup.js.map +1 -0
  24. package/dist/cli/writers/index.d.ts +9 -0
  25. package/dist/cli/writers/index.d.ts.map +1 -0
  26. package/dist/cli/writers/index.js +140 -0
  27. package/dist/cli/writers/index.js.map +1 -0
  28. package/dist/prompts/index.d.ts +25 -0
  29. package/dist/prompts/index.d.ts.map +1 -0
  30. package/dist/prompts/index.js +38 -0
  31. package/dist/prompts/index.js.map +1 -0
  32. package/dist/prompts/itsm.d.ts +20 -0
  33. package/dist/prompts/itsm.d.ts.map +1 -0
  34. package/dist/prompts/itsm.js +110 -0
  35. package/dist/prompts/itsm.js.map +1 -0
  36. package/dist/prompts/user-prompts.d.ts +3 -0
  37. package/dist/prompts/user-prompts.d.ts.map +1 -0
  38. package/dist/prompts/user-prompts.js +35 -0
  39. package/dist/prompts/user-prompts.js.map +1 -0
  40. package/dist/resources/index.d.ts +26 -0
  41. package/dist/resources/index.d.ts.map +1 -0
  42. package/dist/resources/index.js +99 -0
  43. package/dist/resources/index.js.map +1 -0
  44. package/dist/server.d.ts +3 -0
  45. package/dist/server.d.ts.map +1 -0
  46. package/dist/server.js +129 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/servicenow/client.d.ts +135 -0
  49. package/dist/servicenow/client.d.ts.map +1 -0
  50. package/dist/servicenow/client.js +803 -0
  51. package/dist/servicenow/client.js.map +1 -0
  52. package/dist/servicenow/instances.d.ts +28 -0
  53. package/dist/servicenow/instances.d.ts.map +1 -0
  54. package/dist/servicenow/instances.js +204 -0
  55. package/dist/servicenow/instances.js.map +1 -0
  56. package/dist/servicenow/types.d.ts +574 -0
  57. package/dist/servicenow/types.d.ts.map +1 -0
  58. package/dist/servicenow/types.js +3 -0
  59. package/dist/servicenow/types.js.map +1 -0
  60. package/dist/tools/agile.d.ts +225 -0
  61. package/dist/tools/agile.d.ts.map +1 -0
  62. package/dist/tools/agile.js +205 -0
  63. package/dist/tools/agile.js.map +1 -0
  64. package/dist/tools/app-studio.d.ts +139 -0
  65. package/dist/tools/app-studio.d.ts.map +1 -0
  66. package/dist/tools/app-studio.js +139 -0
  67. package/dist/tools/app-studio.js.map +1 -0
  68. package/dist/tools/atf.d.ts +144 -0
  69. package/dist/tools/atf.d.ts.map +1 -0
  70. package/dist/tools/atf.js +186 -0
  71. package/dist/tools/atf.js.map +1 -0
  72. package/dist/tools/catalog.d.ts +628 -0
  73. package/dist/tools/catalog.d.ts.map +1 -0
  74. package/dist/tools/catalog.js +397 -0
  75. package/dist/tools/catalog.js.map +1 -0
  76. package/dist/tools/change.d.ts +347 -0
  77. package/dist/tools/change.d.ts.map +1 -0
  78. package/dist/tools/change.js +213 -0
  79. package/dist/tools/change.js.map +1 -0
  80. package/dist/tools/core.d.ts +540 -0
  81. package/dist/tools/core.d.ts.map +1 -0
  82. package/dist/tools/core.js +373 -0
  83. package/dist/tools/core.js.map +1 -0
  84. package/dist/tools/csm.d.ts +401 -0
  85. package/dist/tools/csm.d.ts.map +1 -0
  86. package/dist/tools/csm.js +255 -0
  87. package/dist/tools/csm.js.map +1 -0
  88. package/dist/tools/deployment.d.ts +366 -0
  89. package/dist/tools/deployment.d.ts.map +1 -0
  90. package/dist/tools/deployment.js +181 -0
  91. package/dist/tools/deployment.js.map +1 -0
  92. package/dist/tools/devops.d.ts +236 -0
  93. package/dist/tools/devops.d.ts.map +1 -0
  94. package/dist/tools/devops.js +207 -0
  95. package/dist/tools/devops.js.map +1 -0
  96. package/dist/tools/flow.d.ts +496 -0
  97. package/dist/tools/flow.d.ts.map +1 -0
  98. package/dist/tools/flow.js +348 -0
  99. package/dist/tools/flow.js.map +1 -0
  100. package/dist/tools/hrsd.d.ts +789 -0
  101. package/dist/tools/hrsd.d.ts.map +1 -0
  102. package/dist/tools/hrsd.js +377 -0
  103. package/dist/tools/hrsd.js.map +1 -0
  104. package/dist/tools/incident.d.ts +256 -0
  105. package/dist/tools/incident.d.ts.map +1 -0
  106. package/dist/tools/incident.js +163 -0
  107. package/dist/tools/incident.js.map +1 -0
  108. package/dist/tools/index.d.ts +11514 -0
  109. package/dist/tools/index.d.ts.map +1 -0
  110. package/dist/tools/index.js +276 -0
  111. package/dist/tools/index.js.map +1 -0
  112. package/dist/tools/integration.d.ts +603 -0
  113. package/dist/tools/integration.d.ts.map +1 -0
  114. package/dist/tools/integration.js +510 -0
  115. package/dist/tools/integration.js.map +1 -0
  116. package/dist/tools/itam.d.ts +462 -0
  117. package/dist/tools/itam.d.ts.map +1 -0
  118. package/dist/tools/itam.js +306 -0
  119. package/dist/tools/itam.js.map +1 -0
  120. package/dist/tools/knowledge.d.ts +187 -0
  121. package/dist/tools/knowledge.d.ts.map +1 -0
  122. package/dist/tools/knowledge.js +161 -0
  123. package/dist/tools/knowledge.js.map +1 -0
  124. package/dist/tools/ml.d.ts +263 -0
  125. package/dist/tools/ml.d.ts.map +1 -0
  126. package/dist/tools/ml.js +251 -0
  127. package/dist/tools/ml.js.map +1 -0
  128. package/dist/tools/mobile.d.ts +352 -0
  129. package/dist/tools/mobile.d.ts.map +1 -0
  130. package/dist/tools/mobile.js +122 -0
  131. package/dist/tools/mobile.js.map +1 -0
  132. package/dist/tools/notification.d.ts +590 -0
  133. package/dist/tools/notification.d.ts.map +1 -0
  134. package/dist/tools/notification.js +382 -0
  135. package/dist/tools/notification.js.map +1 -0
  136. package/dist/tools/now-assist.d.ts +300 -0
  137. package/dist/tools/now-assist.d.ts.map +1 -0
  138. package/dist/tools/now-assist.js +227 -0
  139. package/dist/tools/now-assist.js.map +1 -0
  140. package/dist/tools/performance.d.ts +447 -0
  141. package/dist/tools/performance.d.ts.map +1 -0
  142. package/dist/tools/performance.js +473 -0
  143. package/dist/tools/performance.js.map +1 -0
  144. package/dist/tools/portal.d.ts +530 -0
  145. package/dist/tools/portal.d.ts.map +1 -0
  146. package/dist/tools/portal.js +425 -0
  147. package/dist/tools/portal.js.map +1 -0
  148. package/dist/tools/problem.d.ts +110 -0
  149. package/dist/tools/problem.d.ts.map +1 -0
  150. package/dist/tools/problem.js +100 -0
  151. package/dist/tools/problem.js.map +1 -0
  152. package/dist/tools/reporting.d.ts +825 -0
  153. package/dist/tools/reporting.d.ts.map +1 -0
  154. package/dist/tools/reporting.js +460 -0
  155. package/dist/tools/reporting.js.map +1 -0
  156. package/dist/tools/script.d.ts +714 -0
  157. package/dist/tools/script.d.ts.map +1 -0
  158. package/dist/tools/script.js +629 -0
  159. package/dist/tools/script.js.map +1 -0
  160. package/dist/tools/security.d.ts +794 -0
  161. package/dist/tools/security.d.ts.map +1 -0
  162. package/dist/tools/security.js +425 -0
  163. package/dist/tools/security.js.map +1 -0
  164. package/dist/tools/sys-properties.d.ts +315 -0
  165. package/dist/tools/sys-properties.d.ts.map +1 -0
  166. package/dist/tools/sys-properties.js +372 -0
  167. package/dist/tools/sys-properties.js.map +1 -0
  168. package/dist/tools/task.d.ts +82 -0
  169. package/dist/tools/task.d.ts.map +1 -0
  170. package/dist/tools/task.js +96 -0
  171. package/dist/tools/task.js.map +1 -0
  172. package/dist/tools/updateset.d.ts +159 -0
  173. package/dist/tools/updateset.d.ts.map +1 -0
  174. package/dist/tools/updateset.js +212 -0
  175. package/dist/tools/updateset.js.map +1 -0
  176. package/dist/tools/user.d.ts +206 -0
  177. package/dist/tools/user.d.ts.map +1 -0
  178. package/dist/tools/user.js +163 -0
  179. package/dist/tools/user.js.map +1 -0
  180. package/dist/tools/va.d.ts +217 -0
  181. package/dist/tools/va.d.ts.map +1 -0
  182. package/dist/tools/va.js +178 -0
  183. package/dist/tools/va.js.map +1 -0
  184. package/dist/tools/workspace.d.ts +565 -0
  185. package/dist/tools/workspace.d.ts.map +1 -0
  186. package/dist/tools/workspace.js +201 -0
  187. package/dist/tools/workspace.js.map +1 -0
  188. package/dist/utils/errors.d.ts +6 -0
  189. package/dist/utils/errors.d.ts.map +1 -0
  190. package/dist/utils/errors.js +11 -0
  191. package/dist/utils/errors.js.map +1 -0
  192. package/dist/utils/logging.d.ts +7 -0
  193. package/dist/utils/logging.d.ts.map +1 -0
  194. package/dist/utils/logging.js +15 -0
  195. package/dist/utils/logging.js.map +1 -0
  196. package/dist/utils/permissions.d.ts +21 -0
  197. package/dist/utils/permissions.d.ts.map +1 -0
  198. package/dist/utils/permissions.js +54 -0
  199. package/dist/utils/permissions.js.map +1 -0
  200. package/instances.example.json +71 -0
  201. package/package.json +107 -0
@@ -0,0 +1,14 @@
1
+ interface UserToken {
2
+ instanceUrl: string;
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ expiresAt: number;
6
+ snUser: string;
7
+ snUserSysId: string;
8
+ }
9
+ export declare function authLogin(): Promise<void>;
10
+ export declare function authLogout(instanceUrl?: string): void;
11
+ export declare function authWhoami(): void;
12
+ export declare function getStoredToken(instanceUrl: string): UserToken | undefined;
13
+ export {};
14
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAeA,UAAU,SAAS;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA2H/C;AAED,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBrD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGzE"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * `servicenow-mcp auth` subcommands — per-user OAuth / login management.
3
+ *
4
+ * login — opens browser to ServiceNow OAuth consent, stores token
5
+ * logout — removes stored token
6
+ * whoami — show which ServiceNow user is currently authenticated
7
+ */
8
+ import { input, password, select } from '@inquirer/prompts';
9
+ import chalk from 'chalk';
10
+ import ora from 'ora';
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
12
+ import { homedir } from 'os';
13
+ import { join } from 'path';
14
+ import { listInstances } from './config-store.js';
15
+ function tokenPath() {
16
+ const dir = join(homedir(), '.config', 'servicenow-mcp');
17
+ if (!existsSync(dir))
18
+ mkdirSync(dir, { recursive: true });
19
+ return join(dir, 'tokens.json');
20
+ }
21
+ function loadTokens() {
22
+ const p = tokenPath();
23
+ if (!existsSync(p))
24
+ return { tokens: {} };
25
+ try {
26
+ return JSON.parse(readFileSync(p, 'utf8'));
27
+ }
28
+ catch {
29
+ return { tokens: {} };
30
+ }
31
+ }
32
+ function saveTokens(store) {
33
+ writeFileSync(tokenPath(), JSON.stringify(store, null, 2), 'utf8');
34
+ }
35
+ function tokenKey(instanceUrl) {
36
+ return instanceUrl.replace(/https?:\/\//, '').replace(/[^a-z0-9]/gi, '_');
37
+ }
38
+ export async function authLogin() {
39
+ const instances = listInstances();
40
+ if (instances.length === 0) {
41
+ console.log(chalk.yellow('No instances configured. Run `servicenow-mcp setup` first.'));
42
+ return;
43
+ }
44
+ const instanceUrl = instances.length === 1
45
+ ? instances[0].instanceUrl
46
+ : await select({
47
+ message: 'Choose instance to authenticate against:',
48
+ choices: instances.map(i => ({ name: `${i.name} (${i.instanceUrl})`, value: i.instanceUrl })),
49
+ });
50
+ const instance = instances.find(i => i.instanceUrl === instanceUrl);
51
+ if (!instance)
52
+ return;
53
+ console.log('');
54
+ console.log(chalk.bold('Per-user OAuth login'));
55
+ console.log(chalk.dim('Your queries will run in your own ServiceNow permission context.'));
56
+ console.log('');
57
+ if (instance.authMethod === 'oauth' && instance.clientId) {
58
+ // OAuth Authorization Code flow — open browser
59
+ const authUrl = `${instanceUrl}/oauth_auth.do` +
60
+ `?response_type=code&client_id=${instance.clientId}` +
61
+ `&redirect_uri=http://localhost:8765/callback`;
62
+ console.log(chalk.cyan('Open this URL in your browser to authenticate:'));
63
+ console.log(chalk.underline(authUrl));
64
+ console.log('');
65
+ const code = await input({
66
+ message: 'Paste the authorization code from the redirect URL:',
67
+ });
68
+ const spinner = ora('Exchanging authorization code for token…').start();
69
+ try {
70
+ const resp = await fetch(`${instanceUrl}/oauth_token.do`, {
71
+ method: 'POST',
72
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
73
+ body: new URLSearchParams({
74
+ grant_type: 'authorization_code',
75
+ client_id: instance.clientId,
76
+ client_secret: instance.clientSecret || '',
77
+ code,
78
+ redirect_uri: 'http://localhost:8765/callback',
79
+ }).toString(),
80
+ });
81
+ if (!resp.ok) {
82
+ spinner.fail(chalk.red(`Token exchange failed: ${resp.status} ${resp.statusText}`));
83
+ return;
84
+ }
85
+ const data = await resp.json();
86
+ // Get the ServiceNow user tied to this token
87
+ const meResp = await fetch(`${instanceUrl}/api/now/table/sys_user?sysparm_query=sys_idINSTANCEOF&sysparm_limit=1`, {
88
+ headers: {
89
+ Authorization: `Bearer ${data.access_token}`,
90
+ Accept: 'application/json',
91
+ },
92
+ });
93
+ const meData = await meResp.json();
94
+ const snUserSysId = meData.result?.[0]?.sys_id?.value || '';
95
+ const snUser = meData.result?.[0]?.user_name?.value || 'unknown';
96
+ const store = loadTokens();
97
+ store.tokens[tokenKey(instanceUrl)] = {
98
+ instanceUrl,
99
+ accessToken: data.access_token,
100
+ refreshToken: data.refresh_token,
101
+ expiresAt: Date.now() + data.expires_in * 1000 * 0.9,
102
+ snUser,
103
+ snUserSysId,
104
+ };
105
+ saveTokens(store);
106
+ spinner.succeed(chalk.green(`Authenticated as ${snUser} on ${instanceUrl}`));
107
+ }
108
+ catch (err) {
109
+ spinner.fail(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
110
+ }
111
+ }
112
+ else {
113
+ // Basic auth per-user: prompt credentials, store them
114
+ const username = await input({ message: 'Your ServiceNow username:' });
115
+ const pass = await password({ message: 'Your ServiceNow password:', mask: '•' });
116
+ const spinner = ora('Verifying credentials…').start();
117
+ try {
118
+ const creds = Buffer.from(`${username}:${pass}`).toString('base64');
119
+ const resp = await fetch(`${instanceUrl}/api/now/table/sys_user?sysparm_query=user_name=${encodeURIComponent(username)}&sysparm_limit=1`, { headers: { Authorization: `Basic ${creds}`, Accept: 'application/json' } });
120
+ if (!resp.ok) {
121
+ spinner.fail(chalk.red(`Auth failed: ${resp.status} ${resp.statusText}`));
122
+ return;
123
+ }
124
+ const data = await resp.json();
125
+ const snUserSysId = data.result?.[0]?.sys_id?.value || '';
126
+ const store = loadTokens();
127
+ store.tokens[tokenKey(instanceUrl)] = {
128
+ instanceUrl,
129
+ accessToken: creds,
130
+ refreshToken: '',
131
+ expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000, // basic auth doesn't expire
132
+ snUser: username,
133
+ snUserSysId,
134
+ };
135
+ saveTokens(store);
136
+ spinner.succeed(chalk.green(`Saved credentials for ${username} on ${instanceUrl}`));
137
+ }
138
+ catch (err) {
139
+ spinner.fail(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
140
+ }
141
+ }
142
+ }
143
+ export function authLogout(instanceUrl) {
144
+ const store = loadTokens();
145
+ if (instanceUrl) {
146
+ const key = tokenKey(instanceUrl);
147
+ if (store.tokens[key]) {
148
+ delete store.tokens[key];
149
+ saveTokens(store);
150
+ console.log(chalk.green(`Logged out from ${instanceUrl}`));
151
+ }
152
+ else {
153
+ console.log(chalk.yellow(`No token found for ${instanceUrl}`));
154
+ }
155
+ }
156
+ else {
157
+ store.tokens = {};
158
+ saveTokens(store);
159
+ console.log(chalk.green('Logged out from all instances'));
160
+ }
161
+ }
162
+ export function authWhoami() {
163
+ const store = loadTokens();
164
+ const tokens = Object.values(store.tokens);
165
+ if (tokens.length === 0) {
166
+ console.log(chalk.dim('Not authenticated. Run `servicenow-mcp auth login`'));
167
+ return;
168
+ }
169
+ for (const t of tokens) {
170
+ const expired = Date.now() > t.expiresAt;
171
+ const status = expired ? chalk.red('(expired)') : chalk.green('(active)');
172
+ console.log(` ${t.instanceUrl} → ${chalk.bold(t.snUser)} ${status}`);
173
+ }
174
+ }
175
+ export function getStoredToken(instanceUrl) {
176
+ const store = loadTokens();
177
+ return store.tokens[tokenKey(instanceUrl)];
178
+ }
179
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface InstanceConfig {
2
+ name: string;
3
+ instanceUrl: string;
4
+ authMethod: 'basic' | 'oauth';
5
+ username?: string;
6
+ password?: string;
7
+ clientId?: string;
8
+ clientSecret?: string;
9
+ authMode?: 'service-account' | 'per-user' | 'impersonation';
10
+ writeEnabled?: boolean;
11
+ toolPackage?: string;
12
+ nowAssistEnabled?: boolean;
13
+ group?: string;
14
+ environment?: string;
15
+ addedAt: string;
16
+ }
17
+ export interface ServicenowMcpConfig {
18
+ version: number;
19
+ defaultInstance: string;
20
+ instances: Record<string, InstanceConfig>;
21
+ }
22
+ export declare function loadConfig(): ServicenowMcpConfig;
23
+ export declare function saveConfig(config: ServicenowMcpConfig): void;
24
+ export declare function addInstance(instance: InstanceConfig): void;
25
+ export declare function listInstances(): InstanceConfig[];
26
+ export declare function getDefaultInstance(): InstanceConfig | undefined;
27
+ export declare function removeInstance(name: string): boolean;
28
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/cli/config-store.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,iBAAiB,GAAG,UAAU,GAAG,eAAe,CAAC;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3C;AAiBD,wBAAgB,UAAU,IAAI,mBAAmB,CAUhD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAG5D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAO1D;AAED,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAGhD;AAED,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,SAAS,CAG/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUpD"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Persistent config store for servicenow-mcp CLI.
3
+ * Stores named instance configs at ~/.config/servicenow-mcp/instances.json
4
+ */
5
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
6
+ import { homedir } from 'os';
7
+ import { join } from 'path';
8
+ function configDir() {
9
+ return join(homedir(), '.config', 'servicenow-mcp');
10
+ }
11
+ function configPath() {
12
+ return join(configDir(), 'instances.json');
13
+ }
14
+ function ensureDir() {
15
+ const dir = configDir();
16
+ if (!existsSync(dir)) {
17
+ mkdirSync(dir, { recursive: true });
18
+ }
19
+ }
20
+ export function loadConfig() {
21
+ const path = configPath();
22
+ if (!existsSync(path)) {
23
+ return { version: 1, defaultInstance: '', instances: {} };
24
+ }
25
+ try {
26
+ return JSON.parse(readFileSync(path, 'utf8'));
27
+ }
28
+ catch {
29
+ return { version: 1, defaultInstance: '', instances: {} };
30
+ }
31
+ }
32
+ export function saveConfig(config) {
33
+ ensureDir();
34
+ writeFileSync(configPath(), JSON.stringify(config, null, 2), 'utf8');
35
+ }
36
+ export function addInstance(instance) {
37
+ const config = loadConfig();
38
+ config.instances[instance.name] = instance;
39
+ if (!config.defaultInstance) {
40
+ config.defaultInstance = instance.name;
41
+ }
42
+ saveConfig(config);
43
+ }
44
+ export function listInstances() {
45
+ const config = loadConfig();
46
+ return Object.values(config.instances);
47
+ }
48
+ export function getDefaultInstance() {
49
+ const config = loadConfig();
50
+ return config.instances[config.defaultInstance];
51
+ }
52
+ export function removeInstance(name) {
53
+ const config = loadConfig();
54
+ if (!config.instances[name])
55
+ return false;
56
+ delete config.instances[name];
57
+ if (config.defaultInstance === name) {
58
+ const remaining = Object.keys(config.instances);
59
+ config.defaultInstance = remaining[0] || '';
60
+ }
61
+ saveConfig(config);
62
+ return true;
63
+ }
64
+ //# sourceMappingURL=config-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/cli/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAyB5B,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAwB,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAwB;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC;IACzC,CAAC;IACD,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type WriteMethod = 'json-mcpServers' | 'json-servers' | 'command' | 'env';
2
+ export interface DetectedClient {
3
+ id: string;
4
+ name: string;
5
+ detected: boolean;
6
+ configPath: string;
7
+ /** JSON key inside the config that holds the server map */
8
+ configKey: string;
9
+ /** How the wizard writes the entry */
10
+ writeMethod: WriteMethod;
11
+ requiresRestart: boolean;
12
+ /** Extra note shown to the user after writing */
13
+ note?: string;
14
+ }
15
+ export declare function detectClients(): DetectedClient[];
16
+ //# sourceMappingURL=detect-clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-clients.d.ts","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD,wBAAgB,aAAa,IAAI,cAAc,EAAE,CA4IhD"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Auto-detect installed AI clients and their MCP config paths.
3
+ * Checks app binaries and known config file locations per platform.
4
+ */
5
+ import { existsSync } from 'fs';
6
+ import { homedir } from 'os';
7
+ import { join } from 'path';
8
+ import { execSync } from 'child_process';
9
+ function which(bin) {
10
+ try {
11
+ // Use 'where' on Windows, 'which' on Unix
12
+ const cmd = process.platform === 'win32' ? `where ${bin}` : `which ${bin}`;
13
+ execSync(cmd, { stdio: 'pipe' });
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ function appExists(macPath, winExe, linuxBin) {
21
+ const p = process.platform;
22
+ if (p === 'darwin')
23
+ return existsSync(macPath);
24
+ if (p === 'win32') {
25
+ const localAppData = process.env['LOCALAPPDATA'] || '';
26
+ return existsSync(join(localAppData, winExe));
27
+ }
28
+ return which(linuxBin);
29
+ }
30
+ export function detectClients() {
31
+ const home = homedir();
32
+ const p = process.platform;
33
+ const appData = process.env['APPDATA'] || join(home, 'AppData', 'Roaming');
34
+ const clients = [
35
+ {
36
+ id: 'claude-desktop',
37
+ name: 'Claude Desktop',
38
+ detected: false,
39
+ configPath: p === 'win32'
40
+ ? join(appData, 'Claude', 'claude_desktop_config.json')
41
+ : p === 'darwin'
42
+ ? join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json')
43
+ : join(home, '.config', 'Claude', 'claude_desktop_config.json'),
44
+ configKey: 'mcpServers',
45
+ writeMethod: 'json-mcpServers',
46
+ requiresRestart: true,
47
+ note: 'Restart Claude Desktop to activate.',
48
+ },
49
+ {
50
+ id: 'cursor',
51
+ name: 'Cursor',
52
+ detected: false,
53
+ configPath: p === 'win32'
54
+ ? join(appData, 'Cursor', 'mcp.json')
55
+ : join(home, '.cursor', 'mcp.json'),
56
+ configKey: 'mcpServers',
57
+ writeMethod: 'json-mcpServers',
58
+ requiresRestart: true,
59
+ note: 'Reload Cursor window (Cmd/Ctrl+Shift+P → Reload Window) to activate.',
60
+ },
61
+ {
62
+ id: 'vscode',
63
+ name: 'VS Code (GitHub Copilot)',
64
+ detected: false,
65
+ configPath: join(process.cwd(), '.vscode', 'mcp.json'),
66
+ configKey: 'servers',
67
+ writeMethod: 'json-servers',
68
+ requiresRestart: false,
69
+ note: 'VS Code reads .vscode/mcp.json from the workspace root. Open the workspace folder in VS Code.',
70
+ },
71
+ {
72
+ id: 'windsurf',
73
+ name: 'Windsurf',
74
+ detected: false,
75
+ configPath: p === 'win32'
76
+ ? join(appData, 'Codeium', 'windsurf', 'mcp_config.json')
77
+ : join(home, '.codeium', 'windsurf', 'mcp_config.json'),
78
+ configKey: 'mcpServers',
79
+ writeMethod: 'json-mcpServers',
80
+ requiresRestart: true,
81
+ note: 'Restart Windsurf to activate.',
82
+ },
83
+ {
84
+ id: 'continue',
85
+ name: 'Continue.dev',
86
+ detected: false,
87
+ configPath: join(home, '.continue', 'config.json'),
88
+ configKey: 'mcpServers',
89
+ writeMethod: 'json-mcpServers',
90
+ requiresRestart: false,
91
+ note: 'Continue.dev will pick up the change automatically.',
92
+ },
93
+ {
94
+ id: 'claude-code',
95
+ name: 'Claude Code (CLI)',
96
+ detected: false,
97
+ configPath: '',
98
+ configKey: '',
99
+ writeMethod: 'command',
100
+ requiresRestart: false,
101
+ note: 'The `claude mcp add` command will be run automatically.',
102
+ },
103
+ {
104
+ id: 'dotenv',
105
+ name: 'Generate .env file only',
106
+ detected: true,
107
+ configPath: join(process.cwd(), '.env'),
108
+ configKey: '',
109
+ writeMethod: 'env',
110
+ requiresRestart: false,
111
+ note: 'Set SERVICENOW_INSTANCE_URL and credentials in the generated .env file.',
112
+ },
113
+ ];
114
+ return clients.map(c => {
115
+ if (c.id === 'claude-desktop') {
116
+ return {
117
+ ...c,
118
+ detected: existsSync(c.configPath) ||
119
+ appExists('/Applications/Claude.app', join('AnthropicClaude', 'claude.exe'), 'claude-desktop'),
120
+ };
121
+ }
122
+ if (c.id === 'cursor') {
123
+ return {
124
+ ...c,
125
+ detected: existsSync(c.configPath) ||
126
+ appExists('/Applications/Cursor.app', join('Programs', 'cursor', 'Cursor.exe'), 'cursor'),
127
+ };
128
+ }
129
+ if (c.id === 'vscode') {
130
+ return {
131
+ ...c,
132
+ detected: appExists('/Applications/Visual Studio Code.app', join('Programs', 'Microsoft VS Code', 'Code.exe'), 'code'),
133
+ };
134
+ }
135
+ if (c.id === 'windsurf') {
136
+ return {
137
+ ...c,
138
+ detected: existsSync(c.configPath) ||
139
+ appExists('/Applications/Windsurf.app', join('Programs', 'windsurf', 'Windsurf.exe'), 'windsurf'),
140
+ };
141
+ }
142
+ if (c.id === 'continue') {
143
+ return { ...c, detected: existsSync(c.configPath) };
144
+ }
145
+ if (c.id === 'claude-code') {
146
+ return { ...c, detected: which('claude') };
147
+ }
148
+ return c;
149
+ });
150
+ }
151
+ //# sourceMappingURL=detect-clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * servicenow-mcp CLI entry point.
4
+ *
5
+ * Commands:
6
+ * servicenow-mcp setup [--add] — interactive setup wizard
7
+ * servicenow-mcp auth login — per-user OAuth login
8
+ * servicenow-mcp auth logout — remove stored token
9
+ * servicenow-mcp auth whoami — show current authenticated user
10
+ * servicenow-mcp instances list — list configured instances
11
+ * servicenow-mcp instances remove <name> — remove an instance
12
+ */
13
+ import { Command } from 'commander';
14
+ import chalk from 'chalk';
15
+ import { runSetup } from './setup.js';
16
+ import { authLogin, authLogout, authWhoami } from './auth.js';
17
+ import { listInstances, removeInstance } from './config-store.js';
18
+ // Brand colors (teal/navy palette)
19
+ // Terminal-adaptive: white/subtle/dim use chalk built-ins so text stays visible
20
+ // on both dark and light (bright-white) terminal backgrounds.
21
+ const teal = chalk.hex('#00D4AA');
22
+ const navy = chalk.hex('#0F4C81');
23
+ const bright = chalk.hex('#00B899');
24
+ const dim = chalk.gray;
25
+ const white = chalk.bold;
26
+ const subtle = chalk.dim;
27
+ const success = chalk.hex('#10B981');
28
+ const err = chalk.hex('#E8466A');
29
+ function logoText() {
30
+ return white('ServiceNow ') + teal.bold('MCP');
31
+ }
32
+ function cliBanner() {
33
+ console.log('');
34
+ console.log(bright(' ╔═╗') + teal('╔╗╔') + dim(' ') + teal('╔╦╗') + bright('╔═╗') + teal('╔═╗'));
35
+ console.log(teal(' ╚═╗') + navy('║║║') + dim(' ') + navy(' ║ ') + teal('║║║') + navy('╠═╝'));
36
+ console.log(navy(' ╚═╝') + teal('╝╚╝') + dim(' ') + teal(' ╩ ') + navy('╩ ╩') + teal('╩ ') + dim(' ') + teal('✦'));
37
+ console.log('');
38
+ console.log(` ${logoText()} ${dim('—')} ${subtle('400+ ServiceNow MCP tools')}`);
39
+ console.log(dim(' Connect ') + teal.bold('Any AI') + dim(' to ServiceNow. Instantly.'));
40
+ console.log('');
41
+ }
42
+ const program = new Command();
43
+ program
44
+ .name('servicenow-mcp')
45
+ .description('The most comprehensive ServiceNow MCP server')
46
+ .version('1.0.0')
47
+ .addHelpText('before', '')
48
+ .addHelpText('beforeAll', () => {
49
+ cliBanner();
50
+ return '';
51
+ });
52
+ // ─── setup ────────────────────────────────────────────────────────────────────
53
+ program
54
+ .command('setup')
55
+ .description('Interactive setup wizard — connect to ServiceNow and your AI client')
56
+ .option('--add', 'Add another instance without overwriting existing config')
57
+ .action(async (opts) => {
58
+ await runSetup({ add: opts.add });
59
+ });
60
+ // ─── auth ─────────────────────────────────────────────────────────────────────
61
+ const auth = program.command('auth').description('Per-user authentication management');
62
+ auth
63
+ .command('login')
64
+ .description('Authenticate as yourself — queries run in your own ServiceNow permission context')
65
+ .action(async () => {
66
+ await authLogin();
67
+ });
68
+ auth
69
+ .command('logout [instanceUrl]')
70
+ .description('Remove stored authentication token')
71
+ .action((instanceUrl) => {
72
+ authLogout(instanceUrl);
73
+ });
74
+ auth
75
+ .command('whoami')
76
+ .description('Show which ServiceNow user is currently authenticated')
77
+ .action(() => {
78
+ authWhoami();
79
+ });
80
+ // ─── instances ────────────────────────────────────────────────────────────────
81
+ const instances = program.command('instances').description('Manage configured ServiceNow instances');
82
+ instances
83
+ .command('list')
84
+ .description('List all configured instances')
85
+ .action(() => {
86
+ const list = listInstances();
87
+ if (list.length === 0) {
88
+ console.log('');
89
+ console.log(dim(' No instances configured. Run ') + teal('servicenow-mcp setup') + dim(' to add one.'));
90
+ console.log('');
91
+ return;
92
+ }
93
+ console.log('');
94
+ console.log(dim(' ' + '─'.repeat(60)));
95
+ console.log(` ${dim('NAME'.padEnd(16))} ${dim('URL'.padEnd(36))} ${dim('AUTH')}`);
96
+ console.log(dim(' ' + '─'.repeat(60)));
97
+ for (const inst of list) {
98
+ const envBadge = inst.environment
99
+ ? (inst.environment === 'production' ? err(' PROD ')
100
+ : inst.environment === 'development' ? success(' DEV ')
101
+ : inst.environment === 'test' ? chalk.hex('#FF6B35')(' TEST ')
102
+ : inst.environment === 'staging' ? navy(' STG ')
103
+ : dim(' PDI '))
104
+ : '';
105
+ console.log(` ${teal(inst.name.padEnd(16))} ${bright(inst.instanceUrl.padEnd(36))} ${dim(inst.authMethod)}${envBadge ? ' ' + envBadge : ''}`);
106
+ if (inst.group) {
107
+ console.log(` ${' '.repeat(16)} ${dim('group: ' + inst.group)}`);
108
+ }
109
+ }
110
+ console.log(dim(' ' + '─'.repeat(60)));
111
+ console.log('');
112
+ });
113
+ instances
114
+ .command('remove <name>')
115
+ .description('Remove a configured instance')
116
+ .action((name) => {
117
+ const removed = removeInstance(name);
118
+ if (removed) {
119
+ console.log(` ${success('✓')} ${white(`Removed instance "${name}"`)}`);
120
+ }
121
+ else {
122
+ console.log(` ${err('✗')} ${white(`Instance "${name}" not found`)}`);
123
+ }
124
+ });
125
+ program.parseAsync(process.argv).catch((e) => {
126
+ console.error(err('Error:'), e instanceof Error ? e.message : e);
127
+ process.exit(1);
128
+ });
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runSetup(options?: {
2
+ add?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=setup.d.ts.map