itglue-mcp 1.3.2 → 1.5.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 (78) hide show
  1. package/README.md +68 -26
  2. package/dist/index.js +1 -1
  3. package/dist/lib/api-client.d.ts +21 -1
  4. package/dist/lib/api-client.d.ts.map +1 -1
  5. package/dist/lib/api-client.js +72 -0
  6. package/dist/lib/api-client.js.map +1 -1
  7. package/dist/lib/batch-processor.d.ts +37 -0
  8. package/dist/lib/batch-processor.d.ts.map +1 -0
  9. package/dist/lib/batch-processor.js +72 -0
  10. package/dist/lib/batch-processor.js.map +1 -0
  11. package/dist/lib/format-utils.d.ts +47 -0
  12. package/dist/lib/format-utils.d.ts.map +1 -0
  13. package/dist/lib/format-utils.js +82 -0
  14. package/dist/lib/format-utils.js.map +1 -0
  15. package/dist/tools/attachments.d.ts +8 -9
  16. package/dist/tools/attachments.d.ts.map +1 -1
  17. package/dist/tools/attachments.js +18 -13
  18. package/dist/tools/attachments.js.map +1 -1
  19. package/dist/tools/auxiliary/audit/compliance-check.d.ts +6 -10
  20. package/dist/tools/auxiliary/audit/compliance-check.d.ts.map +1 -1
  21. package/dist/tools/auxiliary/audit/compliance-check.js +15 -34
  22. package/dist/tools/auxiliary/audit/compliance-check.js.map +1 -1
  23. package/dist/tools/auxiliary/reporting/organization-report.js +12 -13
  24. package/dist/tools/auxiliary/reporting/organization-report.js.map +1 -1
  25. package/dist/tools/auxiliary/staleness/staleness-detector.d.ts.map +1 -1
  26. package/dist/tools/auxiliary/staleness/staleness-detector.js +10 -25
  27. package/dist/tools/auxiliary/staleness/staleness-detector.js.map +1 -1
  28. package/dist/tools/auxiliary/validation/data-validator.js +14 -10
  29. package/dist/tools/auxiliary/validation/data-validator.js.map +1 -1
  30. package/dist/tools/configuration-interfaces.d.ts +8 -10
  31. package/dist/tools/configuration-interfaces.d.ts.map +1 -1
  32. package/dist/tools/configuration-interfaces.js +18 -12
  33. package/dist/tools/configuration-interfaces.js.map +1 -1
  34. package/dist/tools/configurations.d.ts +16 -7
  35. package/dist/tools/configurations.d.ts.map +1 -1
  36. package/dist/tools/configurations.js +31 -11
  37. package/dist/tools/configurations.js.map +1 -1
  38. package/dist/tools/contacts.d.ts +16 -8
  39. package/dist/tools/contacts.d.ts.map +1 -1
  40. package/dist/tools/contacts.js +23 -10
  41. package/dist/tools/contacts.js.map +1 -1
  42. package/dist/tools/documents.d.ts +16 -7
  43. package/dist/tools/documents.d.ts.map +1 -1
  44. package/dist/tools/documents.js +23 -11
  45. package/dist/tools/documents.js.map +1 -1
  46. package/dist/tools/flexible-assets.d.ts +16 -5
  47. package/dist/tools/flexible-assets.d.ts.map +1 -1
  48. package/dist/tools/flexible-assets.js +38 -20
  49. package/dist/tools/flexible-assets.js.map +1 -1
  50. package/dist/tools/locations.d.ts +16 -6
  51. package/dist/tools/locations.d.ts.map +1 -1
  52. package/dist/tools/locations.js +23 -10
  53. package/dist/tools/locations.js.map +1 -1
  54. package/dist/tools/organizations.d.ts +16 -6
  55. package/dist/tools/organizations.d.ts.map +1 -1
  56. package/dist/tools/organizations.js +32 -14
  57. package/dist/tools/organizations.js.map +1 -1
  58. package/dist/tools/passwords.d.ts +16 -6
  59. package/dist/tools/passwords.d.ts.map +1 -1
  60. package/dist/tools/passwords.js +30 -10
  61. package/dist/tools/passwords.js.map +1 -1
  62. package/dist/tools/related-items.d.ts +8 -8
  63. package/dist/tools/related-items.d.ts.map +1 -1
  64. package/dist/tools/related-items.js +18 -12
  65. package/dist/tools/related-items.js.map +1 -1
  66. package/dist/tools/search.d.ts +9 -1
  67. package/dist/tools/search.d.ts.map +1 -1
  68. package/dist/tools/search.js +16 -8
  69. package/dist/tools/search.js.map +1 -1
  70. package/package.json +2 -1
  71. package/scripts/CLAUDE.md +47 -0
  72. package/scripts/batch_processor.py +213 -0
  73. package/scripts/publish_document.sh +347 -0
  74. package/skills/account-review/SKILL.md +49 -0
  75. package/skills/compliance-audit/SKILL.md +59 -0
  76. package/skills/incident-response/CLAUDE.md +2 -2
  77. package/skills/incident-response/SKILL.md +58 -0
  78. package/skills/report-generator/SKILL.md +60 -0
package/README.md CHANGED
@@ -32,24 +32,33 @@ This package connects [Claude Code](https://docs.anthropic.com/en/docs/claude-co
32
32
 
33
33
  ### 2. Add to Claude Code
34
34
 
35
- Open your Claude Code configuration file (`~/.claude.json`) and add the MCP server:
35
+ ```bash
36
+ claude mcp add -s user \
37
+ -e "ITGLUE_API_KEY=ITG.your-key-here" \
38
+ -e "ITGLUE_REGION=US" \
39
+ -- itglue npx -y itglue-mcp
40
+ ```
41
+
42
+ The `-s user` flag makes it available in every Claude Code session globally. Set `ITGLUE_REGION` to `US`, `EU`, or `AU` depending on your ITGlue instance.
43
+
44
+ <details>
45
+ <summary>Manual JSON configuration (click to expand)</summary>
46
+
47
+ If you prefer editing config files directly, add to the `mcpServers` object in `~/.claude.json`:
36
48
 
37
49
  ```json
38
- {
39
- "mcpServers": {
40
- "itglue": {
41
- "command": "npx",
42
- "args": ["-y", "itglue-mcp"],
43
- "env": {
44
- "ITGLUE_API_KEY": "ITG.your-key-here",
45
- "ITGLUE_REGION": "US"
46
- }
47
- }
50
+ "itglue": {
51
+ "type": "stdio",
52
+ "command": "npx",
53
+ "args": ["-y", "itglue-mcp"],
54
+ "env": {
55
+ "ITGLUE_API_KEY": "ITG.your-key-here",
56
+ "ITGLUE_REGION": "US"
48
57
  }
49
58
  }
50
59
  ```
51
60
 
52
- Set `ITGLUE_REGION` to `US`, `EU`, or `AU` depending on your ITGlue instance.
61
+ </details>
53
62
 
54
63
  ### 3. Restart Claude Code
55
64
 
@@ -142,6 +151,47 @@ All password retrievals are audit logged automatically.
142
151
  "Network outage at Contoso, pull all firewall info and contacts"
143
152
  ```
144
153
 
154
+ ## Publishing Reports to ITGlue
155
+
156
+ Skills that generate HTML reports (Account Review, Report Generator, Compliance Audit, Incident Response) can optionally upload them directly to ITGlue as published documents.
157
+
158
+ ### How It Works
159
+
160
+ The `scripts/publish_document.sh` script handles the 3-step ITGlue Document API workflow:
161
+
162
+ 1. Creates a document container in the organization
163
+ 2. Adds the HTML content as a `Document::Text` section
164
+ 3. Publishes the document
165
+
166
+ ### Usage
167
+
168
+ ```bash
169
+ # Create a new document
170
+ scripts/publish_document.sh \
171
+ --org-id 8128883 \
172
+ --name "Account Review — Acme Corp — Feb 2026" \
173
+ --file reports/acme-corp-account-review.html
174
+
175
+ # Update an existing document (replaces content)
176
+ scripts/publish_document.sh \
177
+ --doc-id 22531267 \
178
+ --file reports/acme-corp-account-review.html
179
+
180
+ # Pipe HTML from stdin
181
+ cat report.html | scripts/publish_document.sh --org-id 8128883 --name "My Report"
182
+
183
+ # Get JSON output for automation
184
+ scripts/publish_document.sh --org-id 8128883 --name "Report" --file report.html --json
185
+ ```
186
+
187
+ The script requires `ITGLUE_API_KEY` in the environment (same key used by the MCP server). If section creation fails after the document container is created, the script automatically cleans up the orphan.
188
+
189
+ ### Using with Skills
190
+
191
+ When running any report-generating skill, Claude will ask if you want to upload to ITGlue after saving the local HTML file. You can also re-run reports and update existing documents by providing the document ID.
192
+
193
+ ---
194
+
145
195
  ## What's Included (19 Tools)
146
196
 
147
197
  ### Finding Things
@@ -193,21 +243,13 @@ All password retrievals are audit logged automatically.
193
243
 
194
244
  ### On-Premise ITGlue
195
245
 
196
- If you run ITGlue on-premise, add your server URL:
246
+ If you run ITGlue on-premise, add your server URL via the `ITGLUE_BASE_URL` env var:
197
247
 
198
- ```json
199
- {
200
- "mcpServers": {
201
- "itglue": {
202
- "command": "npx",
203
- "args": ["-y", "itglue-mcp"],
204
- "env": {
205
- "ITGLUE_API_KEY": "your-on-prem-key",
206
- "ITGLUE_BASE_URL": "https://your-itglue-server.com/api"
207
- }
208
- }
209
- }
210
- }
248
+ ```bash
249
+ claude mcp add -s user \
250
+ -e "ITGLUE_API_KEY=your-on-prem-key" \
251
+ -e "ITGLUE_BASE_URL=https://your-itglue-server.com/api" \
252
+ -- itglue npx -y itglue-mcp
211
253
  ```
212
254
 
213
255
  ## Security
package/dist/index.js CHANGED
@@ -70,7 +70,7 @@ async function main() {
70
70
  // Create MCP server
71
71
  const server = new Server({
72
72
  name: 'itglue-mcp',
73
- version: '1.2.0',
73
+ version: '1.5.0',
74
74
  }, {
75
75
  capabilities: {
76
76
  tools: {},
@@ -2,7 +2,7 @@
2
2
  * ITGlue API Client
3
3
  * Integrates rate limiting, caching, retry logic, and error handling
4
4
  */
5
- import type { JsonApiResponse, JsonApiWriteBody, ApiParams, ITGlueRegion } from '../types/itglue.js';
5
+ import type { JsonApiResponse, JsonApiResource, JsonApiMeta, JsonApiWriteBody, ApiParams, ITGlueRegion } from '../types/itglue.js';
6
6
  export interface APIClientConfig {
7
7
  apiKey: string;
8
8
  region?: ITGlueRegion;
@@ -57,6 +57,26 @@ export declare class APIClient {
57
57
  * Execute GET request with retry logic
58
58
  */
59
59
  private requestWithRetry;
60
+ /**
61
+ * Paginated GET — transparently fetches multiple pages when limit > 100.
62
+ * Returns a single merged response with combined data array and pagination metadata.
63
+ *
64
+ * @param endpoint - API endpoint path
65
+ * @param params - Query parameters (page[size] will be overridden internally)
66
+ * @param options - Cache TTL, organizationId, skipCache
67
+ * @param totalLimit - Total number of records desired (default: 50)
68
+ * @returns Merged response with all records up to totalLimit, plus pagination info
69
+ */
70
+ getPaginated<T>(endpoint: string, params?: ApiParams, options?: {
71
+ skipCache?: boolean;
72
+ cacheTTL?: number;
73
+ organizationId?: string;
74
+ }, totalLimit?: number): Promise<{
75
+ data: JsonApiResource<T>[];
76
+ meta?: JsonApiMeta;
77
+ totalReturned: number;
78
+ hasMore: boolean;
79
+ }>;
60
80
  /**
61
81
  * Get all pages of a paginated endpoint
62
82
  * Follows JSON:API links.next pattern
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAY5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;gBAExC,MAAM,EAAE,eAAe;IA6BnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA0B9B;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAW9B;;OAEG;IACG,KAAK,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAW9B;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;YACW,qBAAqB;IAsCnC;;OAEG;YACW,gBAAgB;IAiD9B;;;OAGG;IACG,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAuChC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMxC;;OAEG;IACH,QAAQ;;;;;;;;;;;;;CAMT"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAY5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;gBAExC,MAAM,EAAE,eAAe;IA6BnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA0B9B;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAW9B;;OAEG;IACG,KAAK,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAW9B;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;YACW,qBAAqB;IAsCnC;;OAEG;YACW,gBAAgB;IAiD9B;;;;;;;;;OASG;IACG,YAAY,CAAC,CAAC,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,EACD,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC;QACT,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IA+EF;;;OAGG;IACG,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAuChC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMxC;;OAEG;IACH,QAAQ;;;;;;;;;;;;;CAMT"}
@@ -181,6 +181,78 @@ export class APIClient {
181
181
  throw apiError;
182
182
  }
183
183
  }
184
+ /**
185
+ * Paginated GET — transparently fetches multiple pages when limit > 100.
186
+ * Returns a single merged response with combined data array and pagination metadata.
187
+ *
188
+ * @param endpoint - API endpoint path
189
+ * @param params - Query parameters (page[size] will be overridden internally)
190
+ * @param options - Cache TTL, organizationId, skipCache
191
+ * @param totalLimit - Total number of records desired (default: 50)
192
+ * @returns Merged response with all records up to totalLimit, plus pagination info
193
+ */
194
+ async getPaginated(endpoint, params, options, totalLimit = 50) {
195
+ const API_PAGE_MAX = 100;
196
+ const pageSize = Math.min(totalLimit, API_PAGE_MAX);
197
+ const allData = [];
198
+ let hasMore = false;
199
+ let lastMeta;
200
+ let lastNextLink;
201
+ // First page
202
+ const firstParams = { ...params, 'page[size]': pageSize };
203
+ const firstResponse = await this.get(endpoint, firstParams, options);
204
+ const firstData = Array.isArray(firstResponse.data)
205
+ ? firstResponse.data
206
+ : [firstResponse.data];
207
+ allData.push(...firstData);
208
+ lastMeta = firstResponse.meta;
209
+ lastNextLink = firstResponse.links?.next;
210
+ // If we got a full page and need more, follow pagination links
211
+ if (totalLimit > API_PAGE_MAX &&
212
+ firstData.length >= pageSize &&
213
+ lastNextLink) {
214
+ const maxPages = Math.ceil(totalLimit / API_PAGE_MAX);
215
+ for (let page = 2; page <= maxPages && lastNextLink; page++) {
216
+ const parsedUrl = new URL(lastNextLink, this.axios.defaults.baseURL);
217
+ const nextEndpoint = parsedUrl.pathname;
218
+ const nextParams = Object.fromEntries(parsedUrl.searchParams);
219
+ const pageResponse = await this.get(nextEndpoint, nextParams, options);
220
+ const pageData = Array.isArray(pageResponse.data)
221
+ ? pageResponse.data
222
+ : [pageResponse.data];
223
+ allData.push(...pageData);
224
+ lastMeta = pageResponse.meta;
225
+ lastNextLink = pageResponse.links?.next;
226
+ if (allData.length >= totalLimit || !lastNextLink) {
227
+ break;
228
+ }
229
+ }
230
+ }
231
+ // Trim to exact limit
232
+ const trimmed = allData.slice(0, totalLimit);
233
+ // Determine if more records exist beyond what we returned
234
+ // 1. We collected more than requested (overshot from full pages)
235
+ // 2. We hit exact limit and the last fetched page had a next link
236
+ hasMore = allData.length > totalLimit || (allData.length === totalLimit && !!lastNextLink);
237
+ // If meta provides total count, use it as the authoritative source
238
+ const totalAvailable = lastMeta?.['total-count'] ?? lastMeta?.total;
239
+ if (typeof totalAvailable === 'number') {
240
+ hasMore = totalAvailable > trimmed.length;
241
+ }
242
+ this.logger.debug('Paginated fetch complete', {
243
+ endpoint,
244
+ requested: totalLimit,
245
+ returned: trimmed.length,
246
+ hasMore,
247
+ pagesRead: Math.ceil(allData.length / API_PAGE_MAX) || 1,
248
+ });
249
+ return {
250
+ data: trimmed,
251
+ meta: lastMeta,
252
+ totalReturned: trimmed.length,
253
+ hasMore,
254
+ };
255
+ }
184
256
  /**
185
257
  * Get all pages of a paginated endpoint
186
258
  * Follows JSON:API links.next pattern
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * TypeScript wrapper for the Python batch processor.
3
+ * Spawns a Python process to handle heavy data analysis operations,
4
+ * keeping large datasets out of the MCP response context.
5
+ */
6
+ export interface BatchRequest {
7
+ mode: 'aggregate' | 'compliance_scan' | 'staleness_scan' | 'dedup_detect' | 'stats';
8
+ records: any[];
9
+ group_by?: string;
10
+ entity_type?: string;
11
+ rules?: {
12
+ required_fields?: string[];
13
+ staleness_days?: number;
14
+ };
15
+ threshold_days?: number;
16
+ match_field?: string;
17
+ fields?: string[];
18
+ }
19
+ export interface BatchResult {
20
+ error?: string;
21
+ [key: string]: any;
22
+ }
23
+ /**
24
+ * Run the Python batch processor with the given request.
25
+ * Pipes JSON to stdin, reads JSON from stdout.
26
+ *
27
+ * @param request - The batch processing request
28
+ * @param timeoutMs - Timeout in milliseconds (default: 30000)
29
+ * @returns Parsed JSON result from the processor
30
+ */
31
+ export declare function runBatchProcessor(request: BatchRequest, timeoutMs?: number): Promise<BatchResult>;
32
+ /**
33
+ * Check if the Python batch processor is available.
34
+ * Useful for graceful degradation.
35
+ */
36
+ export declare function isBatchProcessorAvailable(): Promise<boolean>;
37
+ //# sourceMappingURL=batch-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../../src/lib/batch-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,cAAc,GAAG,OAAO,CAAC;IACpF,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CA6CtB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOlE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * TypeScript wrapper for the Python batch processor.
3
+ * Spawns a Python process to handle heavy data analysis operations,
4
+ * keeping large datasets out of the MCP response context.
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import { join, dirname } from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+ const SCRIPT_PATH = join(__dirname, '..', '..', 'scripts', 'batch_processor.py');
11
+ /**
12
+ * Run the Python batch processor with the given request.
13
+ * Pipes JSON to stdin, reads JSON from stdout.
14
+ *
15
+ * @param request - The batch processing request
16
+ * @param timeoutMs - Timeout in milliseconds (default: 30000)
17
+ * @returns Parsed JSON result from the processor
18
+ */
19
+ export async function runBatchProcessor(request, timeoutMs = 30000) {
20
+ return new Promise((resolve, reject) => {
21
+ const proc = spawn('python3', [SCRIPT_PATH], {
22
+ stdio: ['pipe', 'pipe', 'pipe'],
23
+ });
24
+ let stdout = '';
25
+ let stderr = '';
26
+ proc.stdout.on('data', (chunk) => {
27
+ stdout += chunk.toString();
28
+ });
29
+ proc.stderr.on('data', (chunk) => {
30
+ stderr += chunk.toString();
31
+ });
32
+ const timer = setTimeout(() => {
33
+ proc.kill('SIGTERM');
34
+ reject(new Error(`Batch processor timed out after ${timeoutMs}ms`));
35
+ }, timeoutMs);
36
+ proc.on('close', (code) => {
37
+ clearTimeout(timer);
38
+ if (code !== 0) {
39
+ resolve({ error: `Process exited with code ${code}: ${stderr}` });
40
+ return;
41
+ }
42
+ try {
43
+ resolve(JSON.parse(stdout));
44
+ }
45
+ catch {
46
+ resolve({ error: `Invalid JSON output: ${stdout.slice(0, 200)}` });
47
+ }
48
+ });
49
+ proc.on('error', (err) => {
50
+ clearTimeout(timer);
51
+ // Python not available - fall back gracefully
52
+ resolve({ error: `Failed to spawn batch processor: ${err.message}` });
53
+ });
54
+ // Send the request
55
+ proc.stdin.write(JSON.stringify(request));
56
+ proc.stdin.end();
57
+ });
58
+ }
59
+ /**
60
+ * Check if the Python batch processor is available.
61
+ * Useful for graceful degradation.
62
+ */
63
+ export async function isBatchProcessorAvailable() {
64
+ try {
65
+ const result = await runBatchProcessor({ mode: 'stats', records: [] }, 5000);
66
+ return !result.error;
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ }
72
+ //# sourceMappingURL=batch-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.js","sourceRoot":"","sources":["../../src/lib/batch-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Shared formatting utilities for token-optimized output
3
+ *
4
+ * Provides three output modes to minimize context/token usage:
5
+ * - detailed: Full markdown with headers per record (current default, most tokens)
6
+ * - compact: Markdown table format (~65% fewer tokens than detailed)
7
+ * - count_only: Just the total count (1 line, ~95% fewer tokens)
8
+ */
9
+ import { z } from 'zod';
10
+ /**
11
+ * Reusable Zod schema fragment for output_mode parameter.
12
+ * Add to any list tool's schema via .extend() or .merge().
13
+ */
14
+ export declare const OutputModeSchema: z.ZodDefault<z.ZodEnum<["detailed", "compact", "count_only"]>>;
15
+ export type OutputMode = z.infer<typeof OutputModeSchema>;
16
+ /**
17
+ * Format data as a compact markdown table.
18
+ * Dramatically reduces token usage for list views.
19
+ *
20
+ * @param title - Table title/heading
21
+ * @param headers - Column headers (display names)
22
+ * @param rows - Array of row arrays (string values, same order as headers)
23
+ * @param footer - Optional footer text (count, hasMore indicator)
24
+ * @returns Formatted markdown table string
25
+ */
26
+ export declare function formatCompactTable(title: string, headers: string[], rows: string[][], footer?: string): string;
27
+ /**
28
+ * Format a count-only response.
29
+ * Minimum possible tokens - just the entity type and count.
30
+ */
31
+ export declare function formatCountOnly(entityType: string, count: number | string, context?: string): string;
32
+ /**
33
+ * Build a lean data object for the MCP response `data` field.
34
+ * Returns only IDs and metadata instead of full record objects.
35
+ * This prevents the data field from duplicating content that's already in the markdown.
36
+ */
37
+ export declare function buildLeanData(ids: string[], hasMore: boolean, totalAvailable?: number): {
38
+ ids: string[];
39
+ count: number;
40
+ hasMore: boolean;
41
+ totalAvailable?: number;
42
+ };
43
+ /**
44
+ * Build a footer string with count and hasMore indicator.
45
+ */
46
+ export declare function buildFooter(count: number, hasMore: boolean): string;
47
+ //# sourceMappingURL=format-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/lib/format-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gEAK1B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAsBR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAO7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMnE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Shared formatting utilities for token-optimized output
3
+ *
4
+ * Provides three output modes to minimize context/token usage:
5
+ * - detailed: Full markdown with headers per record (current default, most tokens)
6
+ * - compact: Markdown table format (~65% fewer tokens than detailed)
7
+ * - count_only: Just the total count (1 line, ~95% fewer tokens)
8
+ */
9
+ import { z } from 'zod';
10
+ /**
11
+ * Reusable Zod schema fragment for output_mode parameter.
12
+ * Add to any list tool's schema via .extend() or .merge().
13
+ */
14
+ export const OutputModeSchema = z
15
+ .enum(['detailed', 'compact', 'count_only'])
16
+ .default('detailed')
17
+ .describe('Output format: "detailed" (full markdown), "compact" (table, ~65% fewer tokens), "count_only" (just total count, minimal tokens)');
18
+ /**
19
+ * Format data as a compact markdown table.
20
+ * Dramatically reduces token usage for list views.
21
+ *
22
+ * @param title - Table title/heading
23
+ * @param headers - Column headers (display names)
24
+ * @param rows - Array of row arrays (string values, same order as headers)
25
+ * @param footer - Optional footer text (count, hasMore indicator)
26
+ * @returns Formatted markdown table string
27
+ */
28
+ export function formatCompactTable(title, headers, rows, footer) {
29
+ const lines = [title, ''];
30
+ // Header row
31
+ lines.push('| ' + headers.join(' | ') + ' |');
32
+ // Separator row
33
+ lines.push('| ' + headers.map(() => '---').join(' | ') + ' |');
34
+ // Data rows
35
+ for (const row of rows) {
36
+ // Escape pipe characters in cell values and truncate long values
37
+ const cells = row.map(cell => {
38
+ const safe = (cell || '—').replace(/\|/g, '\\|').replace(/\n/g, ' ');
39
+ return safe.length > 80 ? safe.slice(0, 77) + '...' : safe;
40
+ });
41
+ lines.push('| ' + cells.join(' | ') + ' |');
42
+ }
43
+ if (footer) {
44
+ lines.push('', footer);
45
+ }
46
+ return lines.join('\n');
47
+ }
48
+ /**
49
+ * Format a count-only response.
50
+ * Minimum possible tokens - just the entity type and count.
51
+ */
52
+ export function formatCountOnly(entityType, count, context) {
53
+ const parts = [`**${entityType}**: ${count} total`];
54
+ if (context) {
55
+ parts.push(`(${context})`);
56
+ }
57
+ return parts.join(' ');
58
+ }
59
+ /**
60
+ * Build a lean data object for the MCP response `data` field.
61
+ * Returns only IDs and metadata instead of full record objects.
62
+ * This prevents the data field from duplicating content that's already in the markdown.
63
+ */
64
+ export function buildLeanData(ids, hasMore, totalAvailable) {
65
+ return {
66
+ ids,
67
+ count: ids.length,
68
+ hasMore,
69
+ ...(totalAvailable !== undefined ? { totalAvailable } : {}),
70
+ };
71
+ }
72
+ /**
73
+ * Build a footer string with count and hasMore indicator.
74
+ */
75
+ export function buildFooter(count, hasMore) {
76
+ const parts = [`Found ${count} record(s).`];
77
+ if (hasMore) {
78
+ parts.push('*More available — increase `limit` to fetch more.*');
79
+ }
80
+ return parts.join(' ');
81
+ }
82
+ //# sourceMappingURL=format-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/lib/format-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;KAC3C,OAAO,CAAC,UAAU,CAAC;KACnB,QAAQ,CACP,kIAAkI,CACnI,CAAC;AAIJ;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,OAAiB,EACjB,IAAgB,EAChB,MAAe;IAEf,MAAM,KAAK,GAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEpC,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,YAAY;IACZ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,iEAAiE;QACjE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,KAAsB,EACtB,OAAgB;IAEhB,MAAM,KAAK,GAAG,CAAC,KAAK,UAAU,OAAO,KAAK,QAAQ,CAAC,CAAC;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAa,EACb,OAAgB,EAChB,cAAuB;IAEvB,OAAO;QACL,GAAG;QACH,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,OAAO;QACP,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,OAAgB;IACzD,MAAM,KAAK,GAAG,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -8,14 +8,17 @@ export declare const ListAttachmentsArgsSchema: z.ZodObject<{
8
8
  resource_type: z.ZodEnum<["configurations", "passwords", "flexible_assets", "documents", "contacts", "locations"]>;
9
9
  resource_id: z.ZodString;
10
10
  limit: z.ZodDefault<z.ZodNumber>;
11
+ output_mode: z.ZodDefault<z.ZodEnum<["detailed", "compact", "count_only"]>>;
11
12
  }, "strip", z.ZodTypeAny, {
12
13
  limit: number;
14
+ output_mode: "detailed" | "compact" | "count_only";
13
15
  resource_id: string;
14
16
  resource_type: "passwords" | "configurations" | "contacts" | "locations" | "flexible_assets" | "documents";
15
17
  }, {
16
18
  resource_id: string;
17
19
  resource_type: "passwords" | "configurations" | "contacts" | "locations" | "flexible_assets" | "documents";
18
20
  limit?: number | undefined;
21
+ output_mode?: "detailed" | "compact" | "count_only" | undefined;
19
22
  }>;
20
23
  export type ListAttachmentsArgs = z.infer<typeof ListAttachmentsArgsSchema>;
21
24
  /**
@@ -33,14 +36,10 @@ export declare function listAttachments(client: APIClient, args: ListAttachments
33
36
  text: string;
34
37
  }[];
35
38
  data: {
36
- id: string;
37
- name: any;
38
- file_name: any;
39
- content_type: any;
40
- file_size: string;
41
- download_url: any;
42
- notes: any;
43
- created_at: any;
44
- }[];
39
+ ids: string[];
40
+ count: number;
41
+ hasMore: boolean;
42
+ totalAvailable?: number;
43
+ };
45
44
  }>;
46
45
  //# sourceMappingURL=attachments.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKtD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAapC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;GA0CjF"}
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMtD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAcpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;GAyCjF"}