itglue-mcp 1.3.0 → 1.3.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 (43) hide show
  1. package/dist/index.js +492 -6
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/api-client.d.ts +24 -2
  4. package/dist/lib/api-client.d.ts.map +1 -1
  5. package/dist/lib/api-client.js +68 -1
  6. package/dist/lib/api-client.js.map +1 -1
  7. package/dist/lib/audit-logger.d.ts +4 -0
  8. package/dist/lib/audit-logger.d.ts.map +1 -1
  9. package/dist/lib/audit-logger.js +15 -0
  10. package/dist/lib/audit-logger.js.map +1 -1
  11. package/dist/tools/attachments.d.ts +2 -2
  12. package/dist/tools/auxiliary/audit/compliance-check.d.ts +3 -3
  13. package/dist/tools/configurations.d.ts +98 -0
  14. package/dist/tools/configurations.d.ts.map +1 -1
  15. package/dist/tools/configurations.js +136 -0
  16. package/dist/tools/configurations.js.map +1 -1
  17. package/dist/tools/contacts.d.ts +92 -0
  18. package/dist/tools/contacts.d.ts.map +1 -1
  19. package/dist/tools/contacts.js +131 -0
  20. package/dist/tools/contacts.js.map +1 -1
  21. package/dist/tools/flexible-assets.d.ts +96 -0
  22. package/dist/tools/flexible-assets.d.ts.map +1 -1
  23. package/dist/tools/flexible-assets.js +176 -0
  24. package/dist/tools/flexible-assets.js.map +1 -1
  25. package/dist/tools/locations.d.ts +110 -0
  26. package/dist/tools/locations.d.ts.map +1 -1
  27. package/dist/tools/locations.js +155 -0
  28. package/dist/tools/locations.js.map +1 -1
  29. package/dist/tools/organizations.d.ts +36 -0
  30. package/dist/tools/organizations.d.ts.map +1 -1
  31. package/dist/tools/organizations.js +61 -0
  32. package/dist/tools/organizations.js.map +1 -1
  33. package/dist/tools/passwords.d.ts +92 -0
  34. package/dist/tools/passwords.d.ts.map +1 -1
  35. package/dist/tools/passwords.js +148 -0
  36. package/dist/tools/passwords.js.map +1 -1
  37. package/dist/tools/related-items.d.ts +2 -2
  38. package/dist/types/itglue.d.ts +17 -0
  39. package/dist/types/itglue.d.ts.map +1 -1
  40. package/dist/types/itglue.js.map +1 -1
  41. package/package.json +1 -1
  42. package/skills/find-password/CLAUDE.md +1 -0
  43. package/skills/report-generator/CLAUDE.md +5 -1
package/dist/index.js CHANGED
@@ -13,14 +13,14 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextpro
13
13
  import { APIClient } from './lib/api-client.js';
14
14
  import { AuditLogger } from './lib/audit-logger.js';
15
15
  // Import tool schemas and handlers
16
- import { SearchOrganizationsSchema, ListOrganizationTypesSchema, searchOrganizations, listOrganizationTypes, } from './tools/organizations.js';
16
+ import { SearchOrganizationsSchema, ListOrganizationTypesSchema, UpdateOrganizationSchema, searchOrganizations, listOrganizationTypes, updateOrganization, } from './tools/organizations.js';
17
17
  import { GlobalSearchSchema, globalSearch } from './tools/search.js';
18
- import { ListConfigurationsSchema, listConfigurations } from './tools/configurations.js';
19
- import { ListPasswordsSchema, GetPasswordSchema, listPasswords, getPassword, } from './tools/passwords.js';
20
- import { ListFlexibleAssetsSchema, GetFlexibleAssetSchema, listFlexibleAssets, getFlexibleAsset, } from './tools/flexible-assets.js';
18
+ import { ListConfigurationsSchema, CreateConfigurationSchema, UpdateConfigurationSchema, listConfigurations, createConfiguration, updateConfiguration, } from './tools/configurations.js';
19
+ import { ListPasswordsSchema, GetPasswordSchema, CreatePasswordSchema, UpdatePasswordSchema, listPasswords, getPassword, createPassword, updatePassword, } from './tools/passwords.js';
20
+ import { ListFlexibleAssetTypesSchema, ListFlexibleAssetsSchema, GetFlexibleAssetSchema, CreateFlexibleAssetSchema, UpdateFlexibleAssetSchema, listFlexibleAssetTypes, listFlexibleAssets, getFlexibleAsset, createFlexibleAsset, updateFlexibleAsset, } from './tools/flexible-assets.js';
21
21
  import { ListDocumentsSchema, listDocuments } from './tools/documents.js';
22
- import { ListContactsArgsSchema, listContacts } from './tools/contacts.js';
23
- import { ListLocationsArgsSchema, listLocations } from './tools/locations.js';
22
+ import { ListContactsArgsSchema, CreateContactSchema, UpdateContactSchema, listContacts, createContact, updateContact, } from './tools/contacts.js';
23
+ import { ListLocationsArgsSchema, CreateLocationSchema, UpdateLocationSchema, listLocations, createLocation, updateLocation, } from './tools/locations.js';
24
24
  import { ListAttachmentsArgsSchema, listAttachments } from './tools/attachments.js';
25
25
  import { ListConfigurationInterfacesArgsSchema, listConfigurationInterfaces, } from './tools/configuration-interfaces.js';
26
26
  import { GetRelatedItemsArgsSchema, getRelatedItems } from './tools/related-items.js';
@@ -110,6 +110,13 @@ async function main() {
110
110
  },
111
111
  },
112
112
  },
113
+ annotations: {
114
+ title: 'Search Organizations',
115
+ readOnlyHint: true,
116
+ destructiveHint: false,
117
+ idempotentHint: true,
118
+ openWorldHint: true,
119
+ },
113
120
  },
114
121
  {
115
122
  name: 'itglue_list_organization_types',
@@ -118,6 +125,13 @@ async function main() {
118
125
  type: 'object',
119
126
  properties: {},
120
127
  },
128
+ annotations: {
129
+ title: 'List Organization Types',
130
+ readOnlyHint: true,
131
+ destructiveHint: false,
132
+ idempotentHint: true,
133
+ openWorldHint: true,
134
+ },
121
135
  },
122
136
  {
123
137
  name: 'itglue_search_global',
@@ -139,6 +153,34 @@ async function main() {
139
153
  },
140
154
  required: ['query'],
141
155
  },
156
+ annotations: {
157
+ title: 'Global Search',
158
+ readOnlyHint: true,
159
+ destructiveHint: false,
160
+ idempotentHint: true,
161
+ openWorldHint: true,
162
+ },
163
+ },
164
+ {
165
+ name: 'itglue_list_flexible_asset_types',
166
+ description: 'List all flexible asset types (custom documentation categories like "Network", "Application", "Backup"). Returns type IDs needed for itglue_list_flexible_assets. Optionally includes field definitions for each type.',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ include_fields: {
171
+ type: 'boolean',
172
+ description: 'Include field definitions (name, kind, required) for each type',
173
+ default: false,
174
+ },
175
+ },
176
+ },
177
+ annotations: {
178
+ title: 'List Flexible Asset Types',
179
+ readOnlyHint: true,
180
+ destructiveHint: false,
181
+ idempotentHint: true,
182
+ openWorldHint: true,
183
+ },
142
184
  },
143
185
  // Tier 2: Entity Navigation
144
186
  {
@@ -169,6 +211,13 @@ async function main() {
169
211
  },
170
212
  required: ['organization_id'],
171
213
  },
214
+ annotations: {
215
+ title: 'List Configurations',
216
+ readOnlyHint: true,
217
+ destructiveHint: false,
218
+ idempotentHint: true,
219
+ openWorldHint: true,
220
+ },
172
221
  },
173
222
  {
174
223
  name: 'itglue_list_passwords',
@@ -194,6 +243,13 @@ async function main() {
194
243
  },
195
244
  required: ['organization_id'],
196
245
  },
246
+ annotations: {
247
+ title: 'List Passwords',
248
+ readOnlyHint: true,
249
+ destructiveHint: false,
250
+ idempotentHint: true,
251
+ openWorldHint: true,
252
+ },
197
253
  },
198
254
  {
199
255
  name: 'itglue_list_flexible_assets',
@@ -219,6 +275,13 @@ async function main() {
219
275
  },
220
276
  required: ['organization_id', 'flexible_asset_type_id'],
221
277
  },
278
+ annotations: {
279
+ title: 'List Flexible Assets',
280
+ readOnlyHint: true,
281
+ destructiveHint: false,
282
+ idempotentHint: true,
283
+ openWorldHint: true,
284
+ },
222
285
  },
223
286
  {
224
287
  name: 'itglue_list_documents',
@@ -240,6 +303,13 @@ async function main() {
240
303
  },
241
304
  required: ['organization_id'],
242
305
  },
306
+ annotations: {
307
+ title: 'List Documents',
308
+ readOnlyHint: true,
309
+ destructiveHint: false,
310
+ idempotentHint: true,
311
+ openWorldHint: true,
312
+ },
243
313
  },
244
314
  {
245
315
  name: 'itglue_list_contacts',
@@ -265,6 +335,13 @@ async function main() {
265
335
  },
266
336
  required: ['organization_id'],
267
337
  },
338
+ annotations: {
339
+ title: 'List Contacts',
340
+ readOnlyHint: true,
341
+ destructiveHint: false,
342
+ idempotentHint: true,
343
+ openWorldHint: true,
344
+ },
268
345
  },
269
346
  {
270
347
  name: 'itglue_list_locations',
@@ -286,6 +363,13 @@ async function main() {
286
363
  },
287
364
  required: ['organization_id'],
288
365
  },
366
+ annotations: {
367
+ title: 'List Locations',
368
+ readOnlyHint: true,
369
+ destructiveHint: false,
370
+ idempotentHint: true,
371
+ openWorldHint: true,
372
+ },
289
373
  },
290
374
  {
291
375
  name: 'itglue_list_attachments',
@@ -319,6 +403,13 @@ async function main() {
319
403
  },
320
404
  required: ['resource_type', 'resource_id'],
321
405
  },
406
+ annotations: {
407
+ title: 'List Attachments',
408
+ readOnlyHint: true,
409
+ destructiveHint: false,
410
+ idempotentHint: true,
411
+ openWorldHint: true,
412
+ },
322
413
  },
323
414
  {
324
415
  name: 'itglue_list_configuration_interfaces',
@@ -340,6 +431,13 @@ async function main() {
340
431
  },
341
432
  required: ['configuration_id'],
342
433
  },
434
+ annotations: {
435
+ title: 'List Configuration Interfaces',
436
+ readOnlyHint: true,
437
+ destructiveHint: false,
438
+ idempotentHint: true,
439
+ openWorldHint: true,
440
+ },
343
441
  },
344
442
  {
345
443
  name: 'itglue_get_related_items',
@@ -366,6 +464,13 @@ async function main() {
366
464
  },
367
465
  required: ['resource_type', 'resource_id'],
368
466
  },
467
+ annotations: {
468
+ title: 'Get Related Items',
469
+ readOnlyHint: true,
470
+ destructiveHint: false,
471
+ idempotentHint: true,
472
+ openWorldHint: true,
473
+ },
369
474
  },
370
475
  // Tier 3: Detail Retrieval
371
476
  {
@@ -390,6 +495,13 @@ async function main() {
390
495
  },
391
496
  required: ['password_id'],
392
497
  },
498
+ annotations: {
499
+ title: 'Get Password',
500
+ readOnlyHint: true,
501
+ destructiveHint: false,
502
+ idempotentHint: true,
503
+ openWorldHint: true,
504
+ },
393
505
  },
394
506
  {
395
507
  name: 'itglue_get_flexible_asset',
@@ -408,6 +520,13 @@ async function main() {
408
520
  },
409
521
  required: ['flexible_asset_id'],
410
522
  },
523
+ annotations: {
524
+ title: 'Get Flexible Asset',
525
+ readOnlyHint: true,
526
+ destructiveHint: false,
527
+ idempotentHint: true,
528
+ openWorldHint: true,
529
+ },
411
530
  },
412
531
  // Auxiliary Tools: Audit & Compliance
413
532
  {
@@ -432,6 +551,13 @@ async function main() {
432
551
  },
433
552
  required: ['organization_id'],
434
553
  },
554
+ annotations: {
555
+ title: 'Compliance Check',
556
+ readOnlyHint: true,
557
+ destructiveHint: false,
558
+ idempotentHint: true,
559
+ openWorldHint: true,
560
+ },
435
561
  },
436
562
  // Auxiliary Tools: Staleness Detection
437
563
  {
@@ -468,6 +594,13 @@ async function main() {
468
594
  },
469
595
  required: ['organization_id'],
470
596
  },
597
+ annotations: {
598
+ title: 'Detect Staleness',
599
+ readOnlyHint: true,
600
+ destructiveHint: false,
601
+ idempotentHint: true,
602
+ openWorldHint: true,
603
+ },
471
604
  },
472
605
  // Auxiliary Tools: Data Validation
473
606
  {
@@ -492,6 +625,13 @@ async function main() {
492
625
  },
493
626
  required: ['organization_id'],
494
627
  },
628
+ annotations: {
629
+ title: 'Validate Data',
630
+ readOnlyHint: true,
631
+ destructiveHint: false,
632
+ idempotentHint: true,
633
+ openWorldHint: true,
634
+ },
495
635
  },
496
636
  // Auxiliary Tools: Reporting
497
637
  {
@@ -518,6 +658,296 @@ async function main() {
518
658
  },
519
659
  required: ['organization_id'],
520
660
  },
661
+ annotations: {
662
+ title: 'Generate Report',
663
+ readOnlyHint: true,
664
+ destructiveHint: false,
665
+ idempotentHint: true,
666
+ openWorldHint: true,
667
+ },
668
+ },
669
+ // Tier 4: Write Operations
670
+ {
671
+ name: 'itglue_update_organization',
672
+ description: '✏️ Update an organization\'s details (name, description, quick notes, short name). AUDIT LOGGED.',
673
+ inputSchema: {
674
+ type: 'object',
675
+ properties: {
676
+ organization_id: { type: 'string', description: 'Organization ID to update' },
677
+ name: { type: 'string', description: 'New organization name' },
678
+ description: { type: 'string', description: 'Organization description' },
679
+ quick_notes: { type: 'string', description: 'Quick notes (displayed prominently in ITGlue UI)' },
680
+ short_name: { type: 'string', description: 'Short name / abbreviation' },
681
+ },
682
+ required: ['organization_id'],
683
+ },
684
+ annotations: {
685
+ title: 'Update Organization',
686
+ readOnlyHint: false,
687
+ destructiveHint: true,
688
+ idempotentHint: true,
689
+ openWorldHint: true,
690
+ },
691
+ },
692
+ {
693
+ name: 'itglue_create_configuration',
694
+ description: '➕ Create a new configuration (server, workstation, network device) for an organization. AUDIT LOGGED.',
695
+ inputSchema: {
696
+ type: 'object',
697
+ properties: {
698
+ organization_id: { type: 'string', description: 'Organization ID' },
699
+ name: { type: 'string', description: 'Configuration name (hostname)' },
700
+ configuration_type_id: { type: 'number', description: 'Configuration type ID' },
701
+ configuration_status_id: { type: 'number', description: 'Configuration status ID' },
702
+ serial_number: { type: 'string', description: 'Serial number' },
703
+ asset_tag: { type: 'string', description: 'Asset tag' },
704
+ manufacturer_name: { type: 'string', description: 'Manufacturer name' },
705
+ model_number: { type: 'string', description: 'Model number' },
706
+ notes: { type: 'string', description: 'Notes' },
707
+ },
708
+ required: ['organization_id', 'name', 'configuration_type_id'],
709
+ },
710
+ annotations: {
711
+ title: 'Create Configuration',
712
+ readOnlyHint: false,
713
+ destructiveHint: false,
714
+ idempotentHint: false,
715
+ openWorldHint: true,
716
+ },
717
+ },
718
+ {
719
+ name: 'itglue_update_configuration',
720
+ description: '✏️ Update an existing configuration\'s details. AUDIT LOGGED.',
721
+ inputSchema: {
722
+ type: 'object',
723
+ properties: {
724
+ configuration_id: { type: 'string', description: 'Configuration ID to update' },
725
+ organization_id: { type: 'string', description: 'Organization ID (for audit)' },
726
+ name: { type: 'string', description: 'New name' },
727
+ configuration_type_id: { type: 'number', description: 'Configuration type ID' },
728
+ configuration_status_id: { type: 'number', description: 'Configuration status ID' },
729
+ serial_number: { type: 'string', description: 'Serial number' },
730
+ asset_tag: { type: 'string', description: 'Asset tag' },
731
+ manufacturer_name: { type: 'string', description: 'Manufacturer name' },
732
+ model_number: { type: 'string', description: 'Model number' },
733
+ notes: { type: 'string', description: 'Notes' },
734
+ },
735
+ required: ['configuration_id'],
736
+ },
737
+ annotations: {
738
+ title: 'Update Configuration',
739
+ readOnlyHint: false,
740
+ destructiveHint: true,
741
+ idempotentHint: true,
742
+ openWorldHint: true,
743
+ },
744
+ },
745
+ {
746
+ name: 'itglue_create_password',
747
+ description: '🔐 Create a new password entry for an organization. ⚠️ CRITICAL AUDIT LOGGED — password values are never stored in logs.',
748
+ inputSchema: {
749
+ type: 'object',
750
+ properties: {
751
+ organization_id: { type: 'string', description: 'Organization ID' },
752
+ name: { type: 'string', description: 'Password name/label' },
753
+ password: { type: 'string', description: 'The password value' },
754
+ username: { type: 'string', description: 'Username' },
755
+ url: { type: 'string', description: 'Service URL' },
756
+ notes: { type: 'string', description: 'Notes' },
757
+ password_category_id: { type: 'number', description: 'Password category ID' },
758
+ resource_id: { type: 'number', description: 'Related resource ID' },
759
+ resource_type: { type: 'string', description: 'Related resource type' },
760
+ },
761
+ required: ['organization_id', 'name', 'password'],
762
+ },
763
+ annotations: {
764
+ title: 'Create Password',
765
+ readOnlyHint: false,
766
+ destructiveHint: false,
767
+ idempotentHint: false,
768
+ openWorldHint: true,
769
+ },
770
+ },
771
+ {
772
+ name: 'itglue_update_password',
773
+ description: '🔐 Update an existing password entry (name, value, username, URL, category). ⚠️ CRITICAL AUDIT LOGGED.',
774
+ inputSchema: {
775
+ type: 'object',
776
+ properties: {
777
+ password_id: { type: 'string', description: 'Password ID to update' },
778
+ organization_id: { type: 'string', description: 'Organization ID (for audit)' },
779
+ name: { type: 'string', description: 'Password name/label' },
780
+ password: { type: 'string', description: 'New password value' },
781
+ username: { type: 'string', description: 'Username' },
782
+ url: { type: 'string', description: 'Service URL' },
783
+ notes: { type: 'string', description: 'Notes' },
784
+ password_category_id: { type: 'number', description: 'Password category ID' },
785
+ },
786
+ required: ['password_id'],
787
+ },
788
+ annotations: {
789
+ title: 'Update Password',
790
+ readOnlyHint: false,
791
+ destructiveHint: true,
792
+ idempotentHint: true,
793
+ openWorldHint: true,
794
+ },
795
+ },
796
+ {
797
+ name: 'itglue_create_contact',
798
+ description: '👤 Create a new contact for an organization. AUDIT LOGGED.',
799
+ inputSchema: {
800
+ type: 'object',
801
+ properties: {
802
+ organization_id: { type: 'string', description: 'Organization ID' },
803
+ first_name: { type: 'string', description: 'First name' },
804
+ last_name: { type: 'string', description: 'Last name' },
805
+ title: { type: 'string', description: 'Job title' },
806
+ contact_type_id: { type: 'number', description: 'Contact type ID' },
807
+ email: { type: 'string', description: 'Primary email' },
808
+ phone: { type: 'string', description: 'Primary phone' },
809
+ notes: { type: 'string', description: 'Notes' },
810
+ important: { type: 'boolean', description: 'Mark as important/VIP', default: false },
811
+ },
812
+ required: ['organization_id', 'first_name', 'last_name'],
813
+ },
814
+ annotations: {
815
+ title: 'Create Contact',
816
+ readOnlyHint: false,
817
+ destructiveHint: false,
818
+ idempotentHint: false,
819
+ openWorldHint: true,
820
+ },
821
+ },
822
+ {
823
+ name: 'itglue_update_contact',
824
+ description: '✏️ Update an existing contact\'s details. AUDIT LOGGED.',
825
+ inputSchema: {
826
+ type: 'object',
827
+ properties: {
828
+ contact_id: { type: 'string', description: 'Contact ID to update' },
829
+ organization_id: { type: 'string', description: 'Organization ID (for audit)' },
830
+ first_name: { type: 'string', description: 'First name' },
831
+ last_name: { type: 'string', description: 'Last name' },
832
+ title: { type: 'string', description: 'Job title' },
833
+ contact_type_id: { type: 'number', description: 'Contact type ID' },
834
+ notes: { type: 'string', description: 'Notes' },
835
+ important: { type: 'boolean', description: 'Mark as important/VIP' },
836
+ },
837
+ required: ['contact_id'],
838
+ },
839
+ annotations: {
840
+ title: 'Update Contact',
841
+ readOnlyHint: false,
842
+ destructiveHint: true,
843
+ idempotentHint: true,
844
+ openWorldHint: true,
845
+ },
846
+ },
847
+ {
848
+ name: 'itglue_create_location',
849
+ description: '📍 Create a new location (office, data center, site) for an organization. AUDIT LOGGED.',
850
+ inputSchema: {
851
+ type: 'object',
852
+ properties: {
853
+ organization_id: { type: 'string', description: 'Organization ID' },
854
+ name: { type: 'string', description: 'Location name' },
855
+ address1: { type: 'string', description: 'Street address line 1' },
856
+ address2: { type: 'string', description: 'Street address line 2' },
857
+ city: { type: 'string', description: 'City' },
858
+ region_name: { type: 'string', description: 'State/region' },
859
+ country_name: { type: 'string', description: 'Country' },
860
+ postal_code: { type: 'string', description: 'ZIP/postal code' },
861
+ phone: { type: 'string', description: 'Phone number' },
862
+ notes: { type: 'string', description: 'Notes' },
863
+ primary: { type: 'boolean', description: 'Set as primary location', default: false },
864
+ },
865
+ required: ['organization_id', 'name'],
866
+ },
867
+ annotations: {
868
+ title: 'Create Location',
869
+ readOnlyHint: false,
870
+ destructiveHint: false,
871
+ idempotentHint: false,
872
+ openWorldHint: true,
873
+ },
874
+ },
875
+ {
876
+ name: 'itglue_update_location',
877
+ description: '✏️ Update an existing location\'s details (address, phone, notes). AUDIT LOGGED.',
878
+ inputSchema: {
879
+ type: 'object',
880
+ properties: {
881
+ location_id: { type: 'string', description: 'Location ID to update' },
882
+ organization_id: { type: 'string', description: 'Organization ID (for audit)' },
883
+ name: { type: 'string', description: 'Location name' },
884
+ address1: { type: 'string', description: 'Street address line 1' },
885
+ address2: { type: 'string', description: 'Street address line 2' },
886
+ city: { type: 'string', description: 'City' },
887
+ region_name: { type: 'string', description: 'State/region' },
888
+ country_name: { type: 'string', description: 'Country' },
889
+ postal_code: { type: 'string', description: 'ZIP/postal code' },
890
+ phone: { type: 'string', description: 'Phone number' },
891
+ notes: { type: 'string', description: 'Notes' },
892
+ primary: { type: 'boolean', description: 'Set as primary location' },
893
+ },
894
+ required: ['location_id'],
895
+ },
896
+ annotations: {
897
+ title: 'Update Location',
898
+ readOnlyHint: false,
899
+ destructiveHint: true,
900
+ idempotentHint: true,
901
+ openWorldHint: true,
902
+ },
903
+ },
904
+ {
905
+ name: 'itglue_create_flexible_asset',
906
+ description: '➕ Create a new flexible asset (custom documentation type) with trait values. AUDIT LOGGED.',
907
+ inputSchema: {
908
+ type: 'object',
909
+ properties: {
910
+ organization_id: { type: 'string', description: 'Organization ID' },
911
+ flexible_asset_type_id: { type: 'number', description: 'Flexible asset type ID' },
912
+ traits: {
913
+ type: 'object',
914
+ description: 'Custom field values as key-value pairs (use trait field names as keys)',
915
+ additionalProperties: true,
916
+ },
917
+ },
918
+ required: ['organization_id', 'flexible_asset_type_id', 'traits'],
919
+ },
920
+ annotations: {
921
+ title: 'Create Flexible Asset',
922
+ readOnlyHint: false,
923
+ destructiveHint: false,
924
+ idempotentHint: false,
925
+ openWorldHint: true,
926
+ },
927
+ },
928
+ {
929
+ name: 'itglue_update_flexible_asset',
930
+ description: '✏️ Update a flexible asset\'s trait values. Only include traits to change. AUDIT LOGGED.',
931
+ inputSchema: {
932
+ type: 'object',
933
+ properties: {
934
+ flexible_asset_id: { type: 'string', description: 'Flexible asset ID to update' },
935
+ organization_id: { type: 'string', description: 'Organization ID (for audit)' },
936
+ traits: {
937
+ type: 'object',
938
+ description: 'Custom field values to update (only include fields to change)',
939
+ additionalProperties: true,
940
+ },
941
+ },
942
+ required: ['flexible_asset_id', 'traits'],
943
+ },
944
+ annotations: {
945
+ title: 'Update Flexible Asset',
946
+ readOnlyHint: false,
947
+ destructiveHint: true,
948
+ idempotentHint: true,
949
+ openWorldHint: true,
950
+ },
521
951
  },
522
952
  // Auxiliary Tools: Health Check
523
953
  {
@@ -537,6 +967,13 @@ async function main() {
537
967
  },
538
968
  },
539
969
  },
970
+ annotations: {
971
+ title: 'Health Check',
972
+ readOnlyHint: true,
973
+ destructiveHint: false,
974
+ idempotentHint: true,
975
+ openWorldHint: true,
976
+ },
540
977
  },
541
978
  ],
542
979
  };
@@ -562,6 +999,10 @@ async function main() {
562
999
  const parsed = GlobalSearchSchema.parse(args);
563
1000
  return await globalSearch(client, parsed);
564
1001
  }
1002
+ case 'itglue_list_flexible_asset_types': {
1003
+ const parsed = ListFlexibleAssetTypesSchema.parse(args);
1004
+ return await listFlexibleAssetTypes(client, parsed);
1005
+ }
565
1006
  // Tier 2: Entity Navigation
566
1007
  case 'itglue_list_configurations': {
567
1008
  const parsed = ListConfigurationsSchema.parse(args);
@@ -608,6 +1049,51 @@ async function main() {
608
1049
  const parsed = GetFlexibleAssetSchema.parse(args);
609
1050
  return await getFlexibleAsset(client, parsed);
610
1051
  }
1052
+ // Tier 4: Write Operations
1053
+ case 'itglue_update_organization': {
1054
+ const parsed = UpdateOrganizationSchema.parse(args);
1055
+ return await updateOrganization(client, parsed);
1056
+ }
1057
+ case 'itglue_create_configuration': {
1058
+ const parsed = CreateConfigurationSchema.parse(args);
1059
+ return await createConfiguration(client, parsed);
1060
+ }
1061
+ case 'itglue_update_configuration': {
1062
+ const parsed = UpdateConfigurationSchema.parse(args);
1063
+ return await updateConfiguration(client, parsed);
1064
+ }
1065
+ case 'itglue_create_password': {
1066
+ const parsed = CreatePasswordSchema.parse(args);
1067
+ return await createPassword(client, parsed);
1068
+ }
1069
+ case 'itglue_update_password': {
1070
+ const parsed = UpdatePasswordSchema.parse(args);
1071
+ return await updatePassword(client, parsed);
1072
+ }
1073
+ case 'itglue_create_contact': {
1074
+ const parsed = CreateContactSchema.parse(args);
1075
+ return await createContact(client, parsed);
1076
+ }
1077
+ case 'itglue_update_contact': {
1078
+ const parsed = UpdateContactSchema.parse(args);
1079
+ return await updateContact(client, parsed);
1080
+ }
1081
+ case 'itglue_create_location': {
1082
+ const parsed = CreateLocationSchema.parse(args);
1083
+ return await createLocation(client, parsed);
1084
+ }
1085
+ case 'itglue_update_location': {
1086
+ const parsed = UpdateLocationSchema.parse(args);
1087
+ return await updateLocation(client, parsed);
1088
+ }
1089
+ case 'itglue_create_flexible_asset': {
1090
+ const parsed = CreateFlexibleAssetSchema.parse(args);
1091
+ return await createFlexibleAsset(client, parsed);
1092
+ }
1093
+ case 'itglue_update_flexible_asset': {
1094
+ const parsed = UpdateFlexibleAssetSchema.parse(args);
1095
+ return await updateFlexibleAsset(client, parsed);
1096
+ }
611
1097
  // Auxiliary Tools
612
1098
  case 'itglue_compliance_check': {
613
1099
  const parsed = ComplianceCheckSchema.parse(args);