@softeria/ms-365-mcp-server 0.88.2 → 0.90.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.
@@ -500,6 +500,27 @@
500
500
  "scopes": ["Files.ReadWrite"],
501
501
  "llmTip": "Shares a file or folder with specific users. Body: { recipients: [{ email: 'user@example.com' }], roles: ['read'], sendInvitation: true, message: 'Please review this file.' }. Roles: 'read', 'write', 'owner'. Set requireSignIn to true to require authentication."
502
502
  },
503
+ {
504
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/createLink",
505
+ "method": "post",
506
+ "toolName": "create-drive-item-share-link",
507
+ "scopes": ["Files.ReadWrite"],
508
+ "llmTip": "Create a shareable link for a file or folder WITHOUT sending an email invitation. Body: { type: 'view' | 'edit' | 'embed', scope: 'anonymous' | 'organization' | 'users', password?: string, expirationDateTime?: ISO-8601, retainInheritedPermissions?: boolean }. Returns a permission with link.webUrl. Pair with share-drive-item when you want to grant explicit access; use this when you only need a URL to paste into a doc/email/chat without triggering OneDrive notifications."
509
+ },
510
+ {
511
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/copy",
512
+ "method": "post",
513
+ "toolName": "copy-drive-item",
514
+ "scopes": ["Files.ReadWrite"],
515
+ "llmTip": "Asynchronously copy a file or folder to a new location and/or name. Body: { parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx' }. Returns 202 Accepted with a Location header pointing at a monitor URL for the async job. Ideal for duplicating templates (e.g. clone an Armhr Census Template per prospect), bulk file provisioning, or preserving an immutable snapshot of a working file."
516
+ },
517
+ {
518
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/preview",
519
+ "method": "post",
520
+ "toolName": "create-drive-item-preview",
521
+ "scopes": ["Files.Read"],
522
+ "llmTip": "Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file."
523
+ },
503
524
  {
504
525
  "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/permissions",
505
526
  "method": "get",
@@ -1715,5 +1736,26 @@
1715
1736
  "toolName": "reauthorize-subscription",
1716
1737
  "scopes": [],
1717
1738
  "llmTip": "Reauthorizes a subscription after receiving a 'reauthorizationRequired' lifecycle notification from Microsoft Graph. No body required. Must be called within the reauthorizationRequiredDateTime window (typically 48h) to avoid subscription expiry."
1739
+ },
1740
+ {
1741
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/extractSensitivityLabels",
1742
+ "method": "post",
1743
+ "toolName": "extract-drive-item-sensitivity-labels",
1744
+ "workScopes": ["Files.Read.All"],
1745
+ "llmTip": "Returns the Microsoft Information Protection (MIP) sensitivity labels assigned to a file. No request body. Response: { value: { labels: [{ sensitivityLabelId, assignmentMethod, tenantId }] } }. Use list-sensitivity-labels to map sensitivityLabelId to a human-readable name. Not supported for personal Microsoft accounts. May return 423 Locked if the file is double-key-encrypted or decryption is deferred."
1746
+ },
1747
+ {
1748
+ "pathPattern": "/me/dataSecurityAndGovernance/sensitivityLabels",
1749
+ "method": "get",
1750
+ "toolName": "list-sensitivity-labels",
1751
+ "workScopes": ["SensitivityLabel.Read"],
1752
+ "llmTip": "Lists Microsoft Information Protection (MIP) sensitivity labels available to the signed-in user. Use to map label IDs (returned by extract-drive-item-sensitivity-labels) to human-readable names. Not supported for personal Microsoft accounts."
1753
+ },
1754
+ {
1755
+ "pathPattern": "/me/dataSecurityAndGovernance/sensitivityLabels/{sensitivityLabel-id}",
1756
+ "method": "get",
1757
+ "toolName": "get-sensitivity-label",
1758
+ "workScopes": ["SensitivityLabel.Read"],
1759
+ "llmTip": "Gets a single MIP sensitivity label by id. Use list-sensitivity-labels to find ids. Not supported for personal Microsoft accounts."
1718
1760
  }
1719
1761
  ]
@@ -763,30 +763,24 @@ const microsoft_graph_driveItemCollectionResponse = z.object({
763
763
  "@odata.nextLink": z.string().nullable(),
764
764
  value: z.array(microsoft_graph_driveItem)
765
765
  }).partial().passthrough();
766
- const create_upload_session_Body = z.object({ item: z.object({}).partial().passthrough() }).partial().passthrough();
767
- const microsoft_graph_uploadSession = z.object({
766
+ const copy_drive_item_Body = z.object({
767
+ name: z.string().nullable(),
768
+ parentReference: z.union([microsoft_graph_itemReference, z.object({}).partial().passthrough()]),
769
+ childrenOnly: z.boolean().nullable().default(false),
770
+ includeAllVersionHistory: z.boolean().nullable().default(false)
771
+ }).partial().passthrough();
772
+ const create_drive_item_share_link_Body = z.object({
773
+ type: z.string().nullable(),
774
+ scope: z.string().nullable(),
768
775
  expirationDateTime: z.string().regex(
769
776
  /^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$/
770
- ).datetime({ offset: true }).describe(
771
- "The date and time in UTC that the upload session expires. The complete file must be uploaded before this expiration time is reached. Each fragment uploaded during the session extends the expiration time."
772
- ).nullish(),
773
- nextExpectedRanges: z.array(z.string().nullable()).describe(
774
- "A collection of byte ranges that the server is missing for the file. These ranges are zero indexed and of the format 'start-end' (for example '0-26' to indicate the first 27 bytes of the file). When uploading files as Outlook attachments, instead of a collection of ranges, this property always indicates a single value '{start}', the location in the file where the next upload should begin."
775
- ).optional(),
776
- uploadUrl: z.string().describe("The URL endpoint that accepts PUT requests for byte ranges of the file.").nullish()
777
- }).passthrough();
778
- const BaseDeltaFunctionResponse = z.object({ "@odata.nextLink": z.string().nullable(), "@odata.deltaLink": z.string().nullable() }).partial().passthrough();
779
- const share_drive_item_Body = z.object({
780
- requireSignIn: z.boolean().nullable().default(false),
781
- roles: z.array(z.string().nullable()),
782
- sendInvitation: z.boolean().nullable().default(false),
777
+ ).datetime({ offset: true }).nullable(),
778
+ password: z.string().nullable(),
783
779
  message: z.string().nullable(),
784
780
  recipients: z.array(z.object({}).partial().passthrough()),
785
781
  retainInheritedPermissions: z.boolean().nullable().default(false),
786
- expirationDateTime: z.string().nullable(),
787
- password: z.string().nullable()
782
+ sendNotification: z.boolean().nullable().default(false)
788
783
  }).partial().passthrough();
789
- const BaseCollectionPaginationCountResponse = z.object({ "@odata.count": z.number().int().nullable(), "@odata.nextLink": z.string().nullable() }).partial().passthrough();
790
784
  const microsoft_graph_sharePointGroupIdentity = z.object({
791
785
  displayName: z.string().describe(
792
786
  "The display name of the identity.For drive items, the display name might not always be available or up to date. For example, if a user changes their display name the API might show the new value in a future response, but the items associated with the user don't show up as changed when using delta."
@@ -867,6 +861,56 @@ const microsoft_graph_permission = z.object({
867
861
  "A unique token that can be used to access this shared item via the shares API. Read-only."
868
862
  ).nullish()
869
863
  }).passthrough();
864
+ const create_upload_session_Body = z.object({ item: z.object({}).partial().passthrough() }).partial().passthrough();
865
+ const microsoft_graph_uploadSession = z.object({
866
+ expirationDateTime: z.string().regex(
867
+ /^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$/
868
+ ).datetime({ offset: true }).describe(
869
+ "The date and time in UTC that the upload session expires. The complete file must be uploaded before this expiration time is reached. Each fragment uploaded during the session extends the expiration time."
870
+ ).nullish(),
871
+ nextExpectedRanges: z.array(z.string().nullable()).describe(
872
+ "A collection of byte ranges that the server is missing for the file. These ranges are zero indexed and of the format 'start-end' (for example '0-26' to indicate the first 27 bytes of the file). When uploading files as Outlook attachments, instead of a collection of ranges, this property always indicates a single value '{start}', the location in the file where the next upload should begin."
873
+ ).optional(),
874
+ uploadUrl: z.string().describe("The URL endpoint that accepts PUT requests for byte ranges of the file.").nullish()
875
+ }).passthrough();
876
+ const BaseDeltaFunctionResponse = z.object({ "@odata.nextLink": z.string().nullable(), "@odata.deltaLink": z.string().nullable() }).partial().passthrough();
877
+ const microsoft_graph_sensitivityLabelAssignmentMethod = z.enum([
878
+ "standard",
879
+ "privileged",
880
+ "auto",
881
+ "unknownFutureValue"
882
+ ]);
883
+ const microsoft_graph_sensitivityLabelAssignment = z.object({
884
+ assignmentMethod: microsoft_graph_sensitivityLabelAssignmentMethod.optional(),
885
+ sensitivityLabelId: z.string().describe("The unique identifier for the sensitivity label assigned to the file.").optional(),
886
+ tenantId: z.string().describe(
887
+ "The unique identifier for the tenant that hosts the file when this label is applied."
888
+ ).optional()
889
+ }).passthrough();
890
+ const microsoft_graph_extractSensitivityLabelsResult = z.object({
891
+ labels: z.array(microsoft_graph_sensitivityLabelAssignment).describe("List of sensitivity labels assigned to a file.").optional()
892
+ }).passthrough();
893
+ const share_drive_item_Body = z.object({
894
+ requireSignIn: z.boolean().nullable().default(false),
895
+ roles: z.array(z.string().nullable()),
896
+ sendInvitation: z.boolean().nullable().default(false),
897
+ message: z.string().nullable(),
898
+ recipients: z.array(z.object({}).partial().passthrough()),
899
+ retainInheritedPermissions: z.boolean().nullable().default(false),
900
+ expirationDateTime: z.string().nullable(),
901
+ password: z.string().nullable()
902
+ }).partial().passthrough();
903
+ const BaseCollectionPaginationCountResponse = z.object({ "@odata.count": z.number().int().nullable(), "@odata.nextLink": z.string().nullable() }).partial().passthrough();
904
+ const ReferenceNumeric = z.enum(["-INF", "INF", "NaN"]);
905
+ const create_drive_item_preview_Body = z.object({
906
+ page: z.string().nullable(),
907
+ zoom: z.union([z.number(), z.string(), ReferenceNumeric])
908
+ }).partial().passthrough();
909
+ const microsoft_graph_itemPreviewInfo = z.object({
910
+ getUrl: z.string().nullish(),
911
+ postParameters: z.string().nullish(),
912
+ postUrl: z.string().nullish()
913
+ }).passthrough();
870
914
  const microsoft_graph_permissionCollectionResponse = z.object({
871
915
  "@odata.count": z.number().int().nullable(),
872
916
  "@odata.nextLink": z.string().nullable(),
@@ -1975,6 +2019,67 @@ const microsoft_graph_contactCollectionResponse = z.object({
1975
2019
  "@odata.nextLink": z.string().nullable(),
1976
2020
  value: z.array(microsoft_graph_contact)
1977
2021
  }).partial().passthrough();
2022
+ const microsoft_graph_labelActionSource = z.enum([
2023
+ "manual",
2024
+ "automatic",
2025
+ "recommended",
2026
+ "none",
2027
+ "unknownFutureValue"
2028
+ ]);
2029
+ const microsoft_graph_usageRights = z.enum([
2030
+ "unknown",
2031
+ "docEdit",
2032
+ "edit",
2033
+ "comment",
2034
+ "export",
2035
+ "forward",
2036
+ "owner",
2037
+ "print",
2038
+ "reply",
2039
+ "replyAll",
2040
+ "view",
2041
+ "extract",
2042
+ "viewRightsData",
2043
+ "editRightsData",
2044
+ "objModel",
2045
+ "accessDenied",
2046
+ "userDefinedProtectionTypeNotSupportedException",
2047
+ "encryptedProtectionTypeNotSupportedException",
2048
+ "purviewClaimsChallengeNotSupportedException",
2049
+ "exception",
2050
+ "labelNotFoundException",
2051
+ "unknownFutureValue"
2052
+ ]);
2053
+ const microsoft_graph_usageRightsIncluded = z.object({
2054
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2055
+ ownerEmail: z.string().describe("The email of owner label rights.").nullish(),
2056
+ userEmail: z.string().describe("The email of user with label user rights.").nullish(),
2057
+ value: microsoft_graph_usageRights.optional()
2058
+ }).passthrough();
2059
+ const microsoft_graph_sensitivityLabel = z.lazy(
2060
+ () => z.object({
2061
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2062
+ actionSource: microsoft_graph_labelActionSource.optional(),
2063
+ autoTooltip: z.string().nullish(),
2064
+ description: z.string().nullish(),
2065
+ displayName: z.string().nullish(),
2066
+ hasProtection: z.boolean().nullish(),
2067
+ isDefault: z.boolean().nullish(),
2068
+ isEndpointProtectionEnabled: z.boolean().nullish(),
2069
+ isScopedToUser: z.boolean().nullish(),
2070
+ locale: z.string().nullish(),
2071
+ name: z.string().nullish(),
2072
+ priority: z.number().gte(-2147483648).lte(2147483647).nullish(),
2073
+ toolTip: z.string().nullish(),
2074
+ rights: microsoft_graph_usageRightsIncluded.optional(),
2075
+ sublabels: z.array(microsoft_graph_sensitivityLabel).optional()
2076
+ }).passthrough()
2077
+ );
2078
+ const microsoft_graph_sensitivityLabelCollectionResponse = z.object({
2079
+ "@odata.count": z.number().int().nullable(),
2080
+ "@odata.nextLink": z.string().nullable(),
2081
+ value: z.array(microsoft_graph_sensitivityLabel)
2082
+ }).partial().passthrough();
1978
2083
  const microsoft_graph_storagePlanInformation = z.object({
1979
2084
  upgradeAvailable: z.boolean().describe("Indicates whether there are higher storage quota plans available. Read-only.").nullish()
1980
2085
  }).passthrough();
@@ -3004,7 +3109,6 @@ const microsoft_graph_timeConstraint = z.object({
3004
3109
  activityDomain: microsoft_graph_activityDomain.optional(),
3005
3110
  timeSlots: z.array(microsoft_graph_timeSlot).optional()
3006
3111
  }).passthrough();
3007
- const ReferenceNumeric = z.enum(["-INF", "INF", "NaN"]);
3008
3112
  const find_meeting_times_Body = z.object({
3009
3113
  attendees: z.array(microsoft_graph_attendeeBase),
3010
3114
  locationConstraint: z.union([
@@ -4401,17 +4505,25 @@ const schemas = {
4401
4505
  microsoft_graph_pendingOperations,
4402
4506
  microsoft_graph_driveItem,
4403
4507
  microsoft_graph_driveItemCollectionResponse,
4404
- create_upload_session_Body,
4405
- microsoft_graph_uploadSession,
4406
- BaseDeltaFunctionResponse,
4407
- share_drive_item_Body,
4408
- BaseCollectionPaginationCountResponse,
4508
+ copy_drive_item_Body,
4509
+ create_drive_item_share_link_Body,
4409
4510
  microsoft_graph_sharePointGroupIdentity,
4410
4511
  microsoft_graph_sharePointIdentity,
4411
4512
  microsoft_graph_sharePointIdentitySet,
4412
4513
  microsoft_graph_sharingInvitation,
4413
4514
  microsoft_graph_sharingLink,
4414
4515
  microsoft_graph_permission,
4516
+ create_upload_session_Body,
4517
+ microsoft_graph_uploadSession,
4518
+ BaseDeltaFunctionResponse,
4519
+ microsoft_graph_sensitivityLabelAssignmentMethod,
4520
+ microsoft_graph_sensitivityLabelAssignment,
4521
+ microsoft_graph_extractSensitivityLabelsResult,
4522
+ share_drive_item_Body,
4523
+ BaseCollectionPaginationCountResponse,
4524
+ ReferenceNumeric,
4525
+ create_drive_item_preview_Body,
4526
+ microsoft_graph_itemPreviewInfo,
4415
4527
  microsoft_graph_permissionCollectionResponse,
4416
4528
  microsoft_graph_publicationFacet,
4417
4529
  microsoft_graph_driveItemVersion,
@@ -4520,6 +4632,11 @@ const schemas = {
4520
4632
  microsoft_graph_chatCollectionResponse,
4521
4633
  microsoft_graph_contact,
4522
4634
  microsoft_graph_contactCollectionResponse,
4635
+ microsoft_graph_labelActionSource,
4636
+ microsoft_graph_usageRights,
4637
+ microsoft_graph_usageRightsIncluded,
4638
+ microsoft_graph_sensitivityLabel,
4639
+ microsoft_graph_sensitivityLabelCollectionResponse,
4523
4640
  microsoft_graph_storagePlanInformation,
4524
4641
  microsoft_graph_quota,
4525
4642
  microsoft_graph_systemFacet,
@@ -4620,7 +4737,6 @@ const schemas = {
4620
4737
  microsoft_graph_locationConstraint,
4621
4738
  microsoft_graph_activityDomain,
4622
4739
  microsoft_graph_timeConstraint,
4623
- ReferenceNumeric,
4624
4740
  find_meeting_times_Body,
4625
4741
  send_mail_Body,
4626
4742
  microsoft_graph_externalLink,
@@ -5402,6 +5518,39 @@ const endpoints = makeApi([
5402
5518
  ],
5403
5519
  response: z.void()
5404
5520
  },
5521
+ {
5522
+ method: "post",
5523
+ path: "/drives/:driveId/items/:driveItemId/copy",
5524
+ alias: "copy-drive-item",
5525
+ description: `Invoke action copy`,
5526
+ requestFormat: "json",
5527
+ parameters: [
5528
+ {
5529
+ name: "body",
5530
+ description: `Action parameters`,
5531
+ type: "Body",
5532
+ schema: copy_drive_item_Body
5533
+ }
5534
+ ],
5535
+ response: z.void()
5536
+ },
5537
+ {
5538
+ method: "post",
5539
+ path: "/drives/:driveId/items/:driveItemId/createLink",
5540
+ alias: "create-drive-item-share-link",
5541
+ description: `Create a link to share a driveItem driveItem. The createLink action creates a new sharing link if the specified link type doesn't already exist for the calling application.
5542
+ If a sharing link of the specified type already exists for the app, the existing sharing link is returned. DriveItem resources inherit sharing permissions from their ancestors.`,
5543
+ requestFormat: "json",
5544
+ parameters: [
5545
+ {
5546
+ name: "body",
5547
+ description: `Action parameters`,
5548
+ type: "Body",
5549
+ schema: create_drive_item_share_link_Body
5550
+ }
5551
+ ],
5552
+ response: z.void()
5553
+ },
5405
5554
  {
5406
5555
  method: "post",
5407
5556
  path: "/drives/:driveId/items/:driveItemId/createUploadSession",
@@ -5472,6 +5621,14 @@ Items with this property set should be removed from your local state.`,
5472
5621
  ],
5473
5622
  response: z.void()
5474
5623
  },
5624
+ {
5625
+ method: "post",
5626
+ path: "/drives/:driveId/items/:driveItemId/extractSensitivityLabels",
5627
+ alias: "extract-drive-item-sensitivity-labels",
5628
+ description: `Invoke action extractSensitivityLabels`,
5629
+ requestFormat: "json",
5630
+ response: z.void()
5631
+ },
5475
5632
  {
5476
5633
  method: "post",
5477
5634
  path: "/drives/:driveId/items/:driveItemId/invite",
@@ -5553,6 +5710,22 @@ Items with this property set should be removed from your local state.`,
5553
5710
  ],
5554
5711
  response: z.void()
5555
5712
  },
5713
+ {
5714
+ method: "post",
5715
+ path: "/drives/:driveId/items/:driveItemId/preview",
5716
+ alias: "create-drive-item-preview",
5717
+ description: `Invoke action preview`,
5718
+ requestFormat: "json",
5719
+ parameters: [
5720
+ {
5721
+ name: "body",
5722
+ description: `Action parameters`,
5723
+ type: "Body",
5724
+ schema: create_drive_item_preview_Body
5725
+ }
5726
+ ],
5727
+ response: z.void()
5728
+ },
5556
5729
  {
5557
5730
  method: "get",
5558
5731
  path: "/drives/:driveId/items/:driveItemId/versions",
@@ -7571,6 +7744,76 @@ or from some other calendar of the user.`,
7571
7744
  ],
7572
7745
  response: z.void()
7573
7746
  },
7747
+ {
7748
+ method: "get",
7749
+ path: "/me/dataSecurityAndGovernance/sensitivityLabels",
7750
+ alias: "list-sensitivity-labels",
7751
+ description: `Get sensitivityLabels from me`,
7752
+ requestFormat: "json",
7753
+ parameters: [
7754
+ {
7755
+ name: "$top",
7756
+ type: "Query",
7757
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
7758
+ },
7759
+ {
7760
+ name: "$skip",
7761
+ type: "Query",
7762
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
7763
+ },
7764
+ {
7765
+ name: "$search",
7766
+ type: "Query",
7767
+ schema: z.string().describe("Search items by search phrases").optional()
7768
+ },
7769
+ {
7770
+ name: "$filter",
7771
+ type: "Query",
7772
+ schema: z.string().describe("Filter items by property values").optional()
7773
+ },
7774
+ {
7775
+ name: "$count",
7776
+ type: "Query",
7777
+ schema: z.boolean().describe("Include count of items").optional()
7778
+ },
7779
+ {
7780
+ name: "$orderby",
7781
+ type: "Query",
7782
+ schema: z.array(z.string()).describe("Order items by property values").optional()
7783
+ },
7784
+ {
7785
+ name: "$select",
7786
+ type: "Query",
7787
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
7788
+ },
7789
+ {
7790
+ name: "$expand",
7791
+ type: "Query",
7792
+ schema: z.array(z.string()).describe("Expand related entities").optional()
7793
+ }
7794
+ ],
7795
+ response: z.void()
7796
+ },
7797
+ {
7798
+ method: "get",
7799
+ path: "/me/dataSecurityAndGovernance/sensitivityLabels/:sensitivityLabelId",
7800
+ alias: "get-sensitivity-label",
7801
+ description: `Get sensitivityLabels from me`,
7802
+ requestFormat: "json",
7803
+ parameters: [
7804
+ {
7805
+ name: "$select",
7806
+ type: "Query",
7807
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
7808
+ },
7809
+ {
7810
+ name: "$expand",
7811
+ type: "Query",
7812
+ schema: z.array(z.string()).describe("Expand related entities").optional()
7813
+ }
7814
+ ],
7815
+ response: z.void()
7816
+ },
7574
7817
  {
7575
7818
  method: "get",
7576
7819
  path: "/me/directReports",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softeria/ms-365-mcp-server",
3
- "version": "0.88.2",
3
+ "version": "0.90.0",
4
4
  "description": " A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -500,6 +500,27 @@
500
500
  "scopes": ["Files.ReadWrite"],
501
501
  "llmTip": "Shares a file or folder with specific users. Body: { recipients: [{ email: 'user@example.com' }], roles: ['read'], sendInvitation: true, message: 'Please review this file.' }. Roles: 'read', 'write', 'owner'. Set requireSignIn to true to require authentication."
502
502
  },
503
+ {
504
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/createLink",
505
+ "method": "post",
506
+ "toolName": "create-drive-item-share-link",
507
+ "scopes": ["Files.ReadWrite"],
508
+ "llmTip": "Create a shareable link for a file or folder WITHOUT sending an email invitation. Body: { type: 'view' | 'edit' | 'embed', scope: 'anonymous' | 'organization' | 'users', password?: string, expirationDateTime?: ISO-8601, retainInheritedPermissions?: boolean }. Returns a permission with link.webUrl. Pair with share-drive-item when you want to grant explicit access; use this when you only need a URL to paste into a doc/email/chat without triggering OneDrive notifications."
509
+ },
510
+ {
511
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/copy",
512
+ "method": "post",
513
+ "toolName": "copy-drive-item",
514
+ "scopes": ["Files.ReadWrite"],
515
+ "llmTip": "Asynchronously copy a file or folder to a new location and/or name. Body: { parentReference: { driveId: '...', id: '...' }, name?: 'New Name.xlsx' }. Returns 202 Accepted with a Location header pointing at a monitor URL for the async job. Ideal for duplicating templates (e.g. clone an Armhr Census Template per prospect), bulk file provisioning, or preserving an immutable snapshot of a working file."
516
+ },
517
+ {
518
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/preview",
519
+ "method": "post",
520
+ "toolName": "create-drive-item-preview",
521
+ "scopes": ["Files.Read"],
522
+ "llmTip": "Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file."
523
+ },
503
524
  {
504
525
  "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/permissions",
505
526
  "method": "get",
@@ -1715,5 +1736,26 @@
1715
1736
  "toolName": "reauthorize-subscription",
1716
1737
  "scopes": [],
1717
1738
  "llmTip": "Reauthorizes a subscription after receiving a 'reauthorizationRequired' lifecycle notification from Microsoft Graph. No body required. Must be called within the reauthorizationRequiredDateTime window (typically 48h) to avoid subscription expiry."
1739
+ },
1740
+ {
1741
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/extractSensitivityLabels",
1742
+ "method": "post",
1743
+ "toolName": "extract-drive-item-sensitivity-labels",
1744
+ "workScopes": ["Files.Read.All"],
1745
+ "llmTip": "Returns the Microsoft Information Protection (MIP) sensitivity labels assigned to a file. No request body. Response: { value: { labels: [{ sensitivityLabelId, assignmentMethod, tenantId }] } }. Use list-sensitivity-labels to map sensitivityLabelId to a human-readable name. Not supported for personal Microsoft accounts. May return 423 Locked if the file is double-key-encrypted or decryption is deferred."
1746
+ },
1747
+ {
1748
+ "pathPattern": "/me/dataSecurityAndGovernance/sensitivityLabels",
1749
+ "method": "get",
1750
+ "toolName": "list-sensitivity-labels",
1751
+ "workScopes": ["SensitivityLabel.Read"],
1752
+ "llmTip": "Lists Microsoft Information Protection (MIP) sensitivity labels available to the signed-in user. Use to map label IDs (returned by extract-drive-item-sensitivity-labels) to human-readable names. Not supported for personal Microsoft accounts."
1753
+ },
1754
+ {
1755
+ "pathPattern": "/me/dataSecurityAndGovernance/sensitivityLabels/{sensitivityLabel-id}",
1756
+ "method": "get",
1757
+ "toolName": "get-sensitivity-label",
1758
+ "workScopes": ["SensitivityLabel.Read"],
1759
+ "llmTip": "Gets a single MIP sensitivity label by id. Use list-sensitivity-labels to find ids. Not supported for personal Microsoft accounts."
1718
1760
  }
1719
1761
  ]