@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
@@ -0,0 +1,514 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ /**
4
+ * Shared state model for VI and RT (sys_choice on both tables, verified on PDI).
5
+ */
6
+ const VUL_STATE_LABELS = {
7
+ '1': 'Open',
8
+ '2': 'Under Investigation',
9
+ '10': 'Awaiting Implementation',
10
+ '11': 'In Review',
11
+ '12': 'Deferred',
12
+ '101': 'Resolved',
13
+ '3': 'Closed',
14
+ };
15
+ const VUL_STATE_SCHEMA = {
16
+ type: 'string',
17
+ description: 'State filter. Single value or comma-separated list. 1=Open, 2=Under Investigation, ' +
18
+ '10=Awaiting Implementation, 11=In Review, 12=Deferred, 101=Resolved, 3=Closed',
19
+ };
20
+ const SYS_ID_RE = /^[0-9a-f]{32}$/i;
21
+ const VI_FIELDS = 'number,short_description,state,substate,risk_score,risk_rating,cmdb_ci,' +
22
+ 'assignment_group,assigned_to,vulnerability,source,first_found,last_found,sys_id';
23
+ const RT_FIELDS = 'task_number,short_description,state,assignment_group,assigned_to,risk_score,' +
24
+ 'risk_rating,cmdb_ci,sn_vul_entry,ttr_status,ttr_target_date,sys_id';
25
+ const NVD_FIELDS = 'id,summary,v3_base_score,v3_base_severity,v2_base_severity,epss_score,' +
26
+ 'exploit,patch_available,date_published,last_modified,sys_id';
27
+ const VG_FIELDS = 'number,short_description,state,assignment_group,assigned_to,risk_score,risk_rating,' +
28
+ 'ttr_status,ttr_target_date,total_vulnerabilities,sys_id';
29
+ export function getUsemToolDefinitions() {
30
+ return [
31
+ {
32
+ name: 'list_vulnerable_items',
33
+ description: 'List USEM Vulnerable Items (sn_vul_vulnerable_item). Filter by state, minimum risk score, ' +
34
+ 'CMDB CI, or assignment group. Returns curated fields ordered by descending risk score.',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ state: VUL_STATE_SCHEMA,
39
+ risk_score_min: { type: 'number', description: 'Only return VIs with risk_score >= this value' },
40
+ cmdb_ci: { type: 'string', description: 'Filter by affected CI sys_id' },
41
+ assignment_group: { type: 'string', description: 'Filter by assignment group sys_id' },
42
+ query: { type: 'string', description: 'Additional raw encoded query appended with ^' },
43
+ limit: { type: 'number', description: 'Max records (default: 25, max: 1000)' },
44
+ display_value: {
45
+ description: 'Return human-readable reference/choice values (true) or both raw and display ("all")',
46
+ oneOf: [{ type: 'boolean' }, { type: 'string', enum: ['all'] }],
47
+ },
48
+ },
49
+ },
50
+ },
51
+ {
52
+ name: 'get_vulnerable_item',
53
+ description: 'Get full details of a single Vulnerable Item by sys_id or VI number (e.g. "VIT0010003").',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ number_or_sysid: { type: 'string', description: 'VI number (VITxxxxxxx) or 32-char sys_id' },
58
+ },
59
+ required: ['number_or_sysid'],
60
+ },
61
+ },
62
+ {
63
+ name: 'list_remediation_tasks',
64
+ description: 'List USEM Remediation Tasks (sn_vul_remediation_task). Filter by state or assignment group. ' +
65
+ 'Returns curated fields ordered by descending risk score.',
66
+ inputSchema: {
67
+ type: 'object',
68
+ properties: {
69
+ state: VUL_STATE_SCHEMA,
70
+ assignment_group: { type: 'string', description: 'Filter by assignment group sys_id' },
71
+ assigned_to: { type: 'string', description: 'Filter by assignee sys_id' },
72
+ query: { type: 'string', description: 'Additional raw encoded query appended with ^' },
73
+ limit: { type: 'number', description: 'Max records (default: 25, max: 1000)' },
74
+ display_value: {
75
+ description: 'Return human-readable reference/choice values (true) or both raw and display ("all")',
76
+ oneOf: [{ type: 'boolean' }, { type: 'string', enum: ['all'] }],
77
+ },
78
+ },
79
+ },
80
+ },
81
+ {
82
+ name: 'get_remediation_task',
83
+ description: 'Get full details of a single Remediation Task by sys_id or task number.',
84
+ inputSchema: {
85
+ type: 'object',
86
+ properties: {
87
+ number_or_sysid: { type: 'string', description: 'RT task_number or 32-char sys_id' },
88
+ },
89
+ required: ['number_or_sysid'],
90
+ },
91
+ },
92
+ {
93
+ name: 'list_vulnerability_groups',
94
+ description: 'List Vulnerability Groups (sn_vul_vulnerability) — the task-based remediation entity ' +
95
+ '(sys_class label "Remediation Task", number prefix VUL). Filter by state, minimum risk score, ' +
96
+ 'or assignment group. Ordered by descending risk score. Use add_vi_to_remediation_task to add ' +
97
+ 'members and the SLA tools (record_type=vg) for TTR status.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ state: VUL_STATE_SCHEMA,
102
+ risk_score_min: { type: 'number', description: 'Only return groups with risk_score >= this value' },
103
+ assignment_group: { type: 'string', description: 'Filter by assignment group sys_id' },
104
+ query: { type: 'string', description: 'Additional raw encoded query appended with ^' },
105
+ limit: { type: 'number', description: 'Max records (default: 25, max: 1000)' },
106
+ display_value: {
107
+ description: 'Return human-readable reference/choice values (true) or both raw and display ("all")',
108
+ oneOf: [{ type: 'boolean' }, { type: 'string', enum: ['all'] }],
109
+ },
110
+ },
111
+ },
112
+ },
113
+ {
114
+ name: 'get_vulnerability_group',
115
+ description: 'Get full details of a single Vulnerability Group by sys_id or VUL number (e.g. "VUL0000103").',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ number_or_sysid: { type: 'string', description: 'Group number (VULxxxxxxx) or 32-char sys_id' },
120
+ },
121
+ required: ['number_or_sysid'],
122
+ },
123
+ },
124
+ {
125
+ name: 'create_vulnerability_group',
126
+ description: 'Create a Vulnerability Group / Remediation Task (sn_vul_vulnerability). Being task-based it ' +
127
+ 'accepts assignment_group, assigned_to and state. **[Write — requires WRITE_ENABLED=true]**',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ short_description: { type: 'string', description: 'Short description / title' },
132
+ description: { type: 'string', description: 'Detailed description' },
133
+ assignment_group: { type: 'string', description: 'Assignment group sys_id' },
134
+ assigned_to: { type: 'string', description: 'Assignee sys_id' },
135
+ state: VUL_STATE_SCHEMA,
136
+ ttr_target_date: { type: 'string', description: 'Remediation target date (YYYY-MM-DD HH:MM:SS)' },
137
+ },
138
+ required: ['short_description'],
139
+ },
140
+ },
141
+ {
142
+ name: 'update_vulnerability_group',
143
+ description: 'Update a Vulnerability Group by sys_id — state transitions, (re)assignment, target date, etc. ' +
144
+ '**[Write — requires WRITE_ENABLED=true]**',
145
+ inputSchema: {
146
+ type: 'object',
147
+ properties: {
148
+ sys_id: { type: 'string', description: '32-char sys_id of the Vulnerability Group' },
149
+ state: VUL_STATE_SCHEMA,
150
+ assignment_group: { type: 'string', description: 'Assignment group sys_id' },
151
+ assigned_to: { type: 'string', description: 'Assignee sys_id' },
152
+ short_description: { type: 'string', description: 'Updated short description' },
153
+ ttr_target_date: { type: 'string', description: 'Remediation target date (YYYY-MM-DD HH:MM:SS)' },
154
+ },
155
+ required: ['sys_id'],
156
+ },
157
+ },
158
+ {
159
+ name: 'list_nvd_entries',
160
+ description: 'List NVD entries (sn_vul_nvd_entry). Filter by CVE id substring or minimum CVSS v3 base score.',
161
+ inputSchema: {
162
+ type: 'object',
163
+ properties: {
164
+ cve: { type: 'string', description: 'CVE id or substring (matched with LIKE), e.g. "CVE-2018" or "2018-1002203"' },
165
+ score_min: { type: 'number', description: 'Only return entries with v3_base_score >= this value' },
166
+ query: { type: 'string', description: 'Additional raw encoded query appended with ^' },
167
+ limit: { type: 'number', description: 'Max records (default: 25, max: 1000)' },
168
+ },
169
+ },
170
+ },
171
+ {
172
+ name: 'get_nvd_entry_by_cve',
173
+ description: 'Look up a single NVD entry by exact CVE id (e.g. "CVE-2018-1002203").',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ cve: { type: 'string', description: 'Exact CVE id, e.g. "CVE-2018-1002203"' },
178
+ },
179
+ required: ['cve'],
180
+ },
181
+ },
182
+ {
183
+ name: 'get_usem_dashboard',
184
+ description: 'Summarize the USEM posture: Vulnerable Item counts by state, Remediation Task counts by state, ' +
185
+ 'and the highest-risk open Vulnerable Items. Uses the aggregate (stats) API for exact counts.',
186
+ inputSchema: {
187
+ type: 'object',
188
+ properties: {
189
+ top: { type: 'number', description: 'How many top-risk VIs to include (default: 5, max: 50)' },
190
+ },
191
+ },
192
+ },
193
+ {
194
+ name: 'create_remediation_task',
195
+ description: 'Create a Remediation Task (sn_vul_remediation_task). **[Write — requires WRITE_ENABLED=true]**',
196
+ inputSchema: {
197
+ type: 'object',
198
+ properties: {
199
+ short_description: { type: 'string', description: 'Short description / title of the task' },
200
+ description: { type: 'string', description: 'Detailed description' },
201
+ assignment_group: { type: 'string', description: 'Assignment group sys_id' },
202
+ assigned_to: { type: 'string', description: 'Assignee sys_id' },
203
+ cmdb_ci: { type: 'string', description: 'Affected CI sys_id' },
204
+ sn_vul_entry: { type: 'string', description: 'Related vulnerability entry sys_id' },
205
+ state: VUL_STATE_SCHEMA,
206
+ ttr_target_date: { type: 'string', description: 'Target remediation date (YYYY-MM-DD HH:MM:SS)' },
207
+ },
208
+ required: ['short_description'],
209
+ },
210
+ },
211
+ {
212
+ name: 'update_remediation_task',
213
+ description: 'Update a Remediation Task by sys_id (state, assignee, group, target date, etc.). ' +
214
+ '**[Write — requires WRITE_ENABLED=true]**',
215
+ inputSchema: {
216
+ type: 'object',
217
+ properties: {
218
+ sys_id: { type: 'string', description: '32-char sys_id of the Remediation Task' },
219
+ state: VUL_STATE_SCHEMA,
220
+ assignment_group: { type: 'string', description: 'Assignment group sys_id' },
221
+ assigned_to: { type: 'string', description: 'Assignee sys_id' },
222
+ short_description: { type: 'string', description: 'Updated short description' },
223
+ ttr_target_date: { type: 'string', description: 'Target remediation date (YYYY-MM-DD HH:MM:SS)' },
224
+ },
225
+ required: ['sys_id'],
226
+ },
227
+ },
228
+ {
229
+ name: 'add_vi_to_remediation_task',
230
+ description: 'Associate a Vulnerable Item with a remediation group via the "Remediation Task Item" m2m ' +
231
+ '(sn_vul_m2m_vul_group_item). The group is an sn_vul_vulnerability record that backs the ' +
232
+ 'remediation task. **[Write — requires WRITE_ENABLED=true]**',
233
+ inputSchema: {
234
+ type: 'object',
235
+ properties: {
236
+ remediation_group: {
237
+ type: 'string',
238
+ description: 'sys_id of the sn_vul_vulnerability group backing the remediation task',
239
+ },
240
+ vulnerable_item: { type: 'string', description: 'sys_id of the Vulnerable Item to add' },
241
+ },
242
+ required: ['remediation_group', 'vulnerable_item'],
243
+ },
244
+ },
245
+ ];
246
+ }
247
+ /** Build a `state=` / `stateIN` clause from a single value or comma list. */
248
+ function stateClause(state) {
249
+ if (state === undefined || state === null || state === '')
250
+ return undefined;
251
+ const values = String(state)
252
+ .split(',')
253
+ .map(s => s.trim())
254
+ .filter(Boolean);
255
+ if (values.length === 0)
256
+ return undefined;
257
+ return values.length === 1 ? `state=${values[0]}` : `stateIN${values.join(',')}`;
258
+ }
259
+ /** Normalize the stats API result into [{ state, label, count }]. */
260
+ function summarizeByState(stats) {
261
+ const rows = Array.isArray(stats) ? stats : [];
262
+ return rows
263
+ .map(row => {
264
+ const value = String(row?.groupby_fields?.[0]?.value ?? '');
265
+ const count = parseInt(String(row?.stats?.count ?? '0'), 10);
266
+ return {
267
+ state: value,
268
+ label: VUL_STATE_LABELS[value] ?? value,
269
+ count: Number.isFinite(count) ? count : 0,
270
+ };
271
+ })
272
+ .sort((a, b) => b.count - a.count);
273
+ }
274
+ export async function executeUsemToolCall(client, name, args) {
275
+ switch (name) {
276
+ case 'list_vulnerable_items': {
277
+ const parts = [];
278
+ const sc = stateClause(args.state);
279
+ if (sc)
280
+ parts.push(sc);
281
+ if (args.risk_score_min !== undefined)
282
+ parts.push(`risk_score>=${Number(args.risk_score_min)}`);
283
+ if (args.cmdb_ci)
284
+ parts.push(`cmdb_ci=${args.cmdb_ci}`);
285
+ if (args.assignment_group)
286
+ parts.push(`assignment_group=${args.assignment_group}`);
287
+ if (args.query)
288
+ parts.push(args.query);
289
+ const resp = await client.queryRecords({
290
+ table: 'sn_vul_vulnerable_item',
291
+ query: parts.join('^'),
292
+ fields: VI_FIELDS,
293
+ orderBy: '-risk_score',
294
+ limit: args.limit ?? 25,
295
+ display_value: args.display_value,
296
+ });
297
+ return { count: resp.count, records: resp.records, summary: `Found ${resp.count} vulnerable item(s)` };
298
+ }
299
+ case 'get_vulnerable_item': {
300
+ if (!args.number_or_sysid)
301
+ throw new ServiceNowError('number_or_sysid is required', 'INVALID_REQUEST');
302
+ if (SYS_ID_RE.test(args.number_or_sysid)) {
303
+ return await client.getRecord('sn_vul_vulnerable_item', args.number_or_sysid);
304
+ }
305
+ const resp = await client.queryRecords({
306
+ table: 'sn_vul_vulnerable_item',
307
+ query: `number=${args.number_or_sysid}`,
308
+ limit: 1,
309
+ });
310
+ if (resp.count === 0)
311
+ throw new ServiceNowError(`Vulnerable Item not found: ${args.number_or_sysid}`, 'NOT_FOUND');
312
+ return resp.records[0];
313
+ }
314
+ case 'list_remediation_tasks': {
315
+ const parts = [];
316
+ const sc = stateClause(args.state);
317
+ if (sc)
318
+ parts.push(sc);
319
+ if (args.assignment_group)
320
+ parts.push(`assignment_group=${args.assignment_group}`);
321
+ if (args.assigned_to)
322
+ parts.push(`assigned_to=${args.assigned_to}`);
323
+ if (args.query)
324
+ parts.push(args.query);
325
+ const resp = await client.queryRecords({
326
+ table: 'sn_vul_remediation_task',
327
+ query: parts.join('^'),
328
+ fields: RT_FIELDS,
329
+ orderBy: '-risk_score',
330
+ limit: args.limit ?? 25,
331
+ display_value: args.display_value,
332
+ });
333
+ return { count: resp.count, records: resp.records, summary: `Found ${resp.count} remediation task(s)` };
334
+ }
335
+ case 'get_remediation_task': {
336
+ if (!args.number_or_sysid)
337
+ throw new ServiceNowError('number_or_sysid is required', 'INVALID_REQUEST');
338
+ if (SYS_ID_RE.test(args.number_or_sysid)) {
339
+ return await client.getRecord('sn_vul_remediation_task', args.number_or_sysid);
340
+ }
341
+ const resp = await client.queryRecords({
342
+ table: 'sn_vul_remediation_task',
343
+ query: `task_number=${args.number_or_sysid}`,
344
+ limit: 1,
345
+ });
346
+ if (resp.count === 0)
347
+ throw new ServiceNowError(`Remediation Task not found: ${args.number_or_sysid}`, 'NOT_FOUND');
348
+ return resp.records[0];
349
+ }
350
+ case 'list_vulnerability_groups': {
351
+ const parts = [];
352
+ const sc = stateClause(args.state);
353
+ if (sc)
354
+ parts.push(sc);
355
+ if (args.risk_score_min !== undefined)
356
+ parts.push(`risk_score>=${Number(args.risk_score_min)}`);
357
+ if (args.assignment_group)
358
+ parts.push(`assignment_group=${args.assignment_group}`);
359
+ if (args.query)
360
+ parts.push(args.query);
361
+ const resp = await client.queryRecords({
362
+ table: 'sn_vul_vulnerability',
363
+ query: parts.join('^'),
364
+ fields: VG_FIELDS,
365
+ orderBy: '-risk_score',
366
+ limit: args.limit ?? 25,
367
+ display_value: args.display_value,
368
+ });
369
+ return { count: resp.count, records: resp.records, summary: `Found ${resp.count} vulnerability group(s)` };
370
+ }
371
+ case 'get_vulnerability_group': {
372
+ if (!args.number_or_sysid)
373
+ throw new ServiceNowError('number_or_sysid is required', 'INVALID_REQUEST');
374
+ if (SYS_ID_RE.test(args.number_or_sysid)) {
375
+ return await client.getRecord('sn_vul_vulnerability', args.number_or_sysid);
376
+ }
377
+ const resp = await client.queryRecords({
378
+ table: 'sn_vul_vulnerability',
379
+ query: `number=${args.number_or_sysid}`,
380
+ limit: 1,
381
+ });
382
+ if (resp.count === 0)
383
+ throw new ServiceNowError(`Vulnerability Group not found: ${args.number_or_sysid}`, 'NOT_FOUND');
384
+ return resp.records[0];
385
+ }
386
+ case 'create_vulnerability_group': {
387
+ requireWrite();
388
+ if (!args.short_description)
389
+ throw new ServiceNowError('short_description is required', 'INVALID_REQUEST');
390
+ const data = { short_description: args.short_description };
391
+ for (const f of ['description', 'assignment_group', 'assigned_to', 'state', 'ttr_target_date']) {
392
+ if (args[f] !== undefined)
393
+ data[f] = args[f];
394
+ }
395
+ const result = await client.createRecord('sn_vul_vulnerability', data);
396
+ return { ...result, summary: `Created Vulnerability Group: ${args.short_description}` };
397
+ }
398
+ case 'update_vulnerability_group': {
399
+ requireWrite();
400
+ if (!args.sys_id)
401
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
402
+ const data = {};
403
+ for (const f of ['state', 'assignment_group', 'assigned_to', 'short_description', 'ttr_target_date']) {
404
+ if (args[f] !== undefined)
405
+ data[f] = args[f];
406
+ }
407
+ if (Object.keys(data).length === 0) {
408
+ throw new ServiceNowError('At least one field to update is required', 'INVALID_REQUEST');
409
+ }
410
+ const result = await client.updateRecord('sn_vul_vulnerability', args.sys_id, data);
411
+ return { ...result, summary: `Updated Vulnerability Group ${args.sys_id}` };
412
+ }
413
+ case 'list_nvd_entries': {
414
+ const parts = [];
415
+ if (args.cve)
416
+ parts.push(`idLIKE${args.cve}`);
417
+ if (args.score_min !== undefined)
418
+ parts.push(`v3_base_score>=${Number(args.score_min)}`);
419
+ if (args.query)
420
+ parts.push(args.query);
421
+ const resp = await client.queryRecords({
422
+ table: 'sn_vul_nvd_entry',
423
+ query: parts.join('^'),
424
+ fields: NVD_FIELDS,
425
+ orderBy: '-v3_base_score',
426
+ limit: args.limit ?? 25,
427
+ });
428
+ return { count: resp.count, records: resp.records, summary: `Found ${resp.count} NVD entry/entries` };
429
+ }
430
+ case 'get_nvd_entry_by_cve': {
431
+ if (!args.cve)
432
+ throw new ServiceNowError('cve is required', 'INVALID_REQUEST');
433
+ const resp = await client.queryRecords({
434
+ table: 'sn_vul_nvd_entry',
435
+ query: `id=${args.cve}`,
436
+ limit: 1,
437
+ });
438
+ if (resp.count === 0)
439
+ throw new ServiceNowError(`NVD entry not found for CVE: ${args.cve}`, 'NOT_FOUND');
440
+ return resp.records[0];
441
+ }
442
+ case 'get_usem_dashboard': {
443
+ const top = Math.min(Math.max(Math.trunc(Number(args.top) || 5), 1), 50);
444
+ const [viStats, rtStats, topRisk] = await Promise.all([
445
+ client.runAggregateQuery('sn_vul_vulnerable_item', 'state', 'COUNT'),
446
+ client.runAggregateQuery('sn_vul_remediation_task', 'state', 'COUNT'),
447
+ client.queryRecords({
448
+ table: 'sn_vul_vulnerable_item',
449
+ query: 'state!=3',
450
+ fields: 'number,short_description,risk_score,state,cmdb_ci,assignment_group',
451
+ orderBy: '-risk_score',
452
+ limit: top,
453
+ display_value: 'all',
454
+ }),
455
+ ]);
456
+ const viByState = summarizeByState(viStats);
457
+ const rtByState = summarizeByState(rtStats);
458
+ const total = (rows) => rows.reduce((s, r) => s + r.count, 0);
459
+ const openLike = (rows) => rows.filter(r => r.state !== '3' && r.state !== '101').reduce((s, r) => s + r.count, 0);
460
+ return {
461
+ vulnerable_items: { total: total(viByState), open: openLike(viByState), by_state: viByState },
462
+ remediation_tasks: { total: total(rtByState), open: openLike(rtByState), by_state: rtByState },
463
+ top_risk_vulnerable_items: topRisk.records,
464
+ summary: `VI: ${total(viByState)} total (${openLike(viByState)} open) · ` +
465
+ `RT: ${total(rtByState)} total (${openLike(rtByState)} open) · ` +
466
+ `top ${topRisk.count} risk VI listed`,
467
+ };
468
+ }
469
+ case 'create_remediation_task': {
470
+ requireWrite();
471
+ if (!args.short_description)
472
+ throw new ServiceNowError('short_description is required', 'INVALID_REQUEST');
473
+ const data = { short_description: args.short_description };
474
+ for (const f of ['description', 'assignment_group', 'assigned_to', 'cmdb_ci', 'sn_vul_entry', 'state', 'ttr_target_date']) {
475
+ if (args[f] !== undefined)
476
+ data[f] = args[f];
477
+ }
478
+ const result = await client.createRecord('sn_vul_remediation_task', data);
479
+ return { ...result, summary: `Created Remediation Task: ${args.short_description}` };
480
+ }
481
+ case 'update_remediation_task': {
482
+ requireWrite();
483
+ if (!args.sys_id)
484
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
485
+ const data = {};
486
+ for (const f of ['state', 'assignment_group', 'assigned_to', 'short_description', 'ttr_target_date']) {
487
+ if (args[f] !== undefined)
488
+ data[f] = args[f];
489
+ }
490
+ if (Object.keys(data).length === 0) {
491
+ throw new ServiceNowError('At least one field to update is required', 'INVALID_REQUEST');
492
+ }
493
+ const result = await client.updateRecord('sn_vul_remediation_task', args.sys_id, data);
494
+ return { ...result, summary: `Updated Remediation Task ${args.sys_id}` };
495
+ }
496
+ case 'add_vi_to_remediation_task': {
497
+ requireWrite();
498
+ if (!args.remediation_group || !args.vulnerable_item) {
499
+ throw new ServiceNowError('remediation_group and vulnerable_item are required', 'INVALID_REQUEST');
500
+ }
501
+ const result = await client.createRecord('sn_vul_m2m_vul_group_item', {
502
+ sn_vul_vulnerability: args.remediation_group,
503
+ sn_vul_vulnerable_item: args.vulnerable_item,
504
+ });
505
+ return {
506
+ ...result,
507
+ summary: `Linked VI ${args.vulnerable_item} to remediation group ${args.remediation_group}`,
508
+ };
509
+ }
510
+ default:
511
+ return null;
512
+ }
513
+ }
514
+ //# sourceMappingURL=usem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usem.js","sourceRoot":"","sources":["../../src/tools/usem.ts"],"names":[],"mappings":"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"}