@softeria/ms-365-mcp-server 0.85.2 → 0.87.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softeria/ms-365-mcp-server",
3
- "version": "0.85.2",
3
+ "version": "0.87.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",
@@ -640,6 +640,30 @@
640
640
  "toolName": "get-onenote-page-content",
641
641
  "scopes": ["Notes.Read"]
642
642
  },
643
+ {
644
+ "pathPattern": "/sites/{site-id}/onenote/notebooks",
645
+ "method": "get",
646
+ "toolName": "list-sharepoint-site-onenote-notebooks",
647
+ "workScopes": ["Notes.Read"]
648
+ },
649
+ {
650
+ "pathPattern": "/sites/{site-id}/onenote/notebooks/{notebook-id}/sections",
651
+ "method": "get",
652
+ "toolName": "list-sharepoint-site-onenote-notebook-sections",
653
+ "workScopes": ["Notes.Read"]
654
+ },
655
+ {
656
+ "pathPattern": "/sites/{site-id}/onenote/sections/{onenoteSection-id}/pages",
657
+ "method": "get",
658
+ "toolName": "list-sharepoint-site-onenote-section-pages",
659
+ "workScopes": ["Notes.Read"]
660
+ },
661
+ {
662
+ "pathPattern": "/sites/{site-id}/onenote/pages/{onenotePage-id}/content",
663
+ "method": "get",
664
+ "toolName": "get-sharepoint-site-onenote-page-content",
665
+ "workScopes": ["Notes.Read"]
666
+ },
643
667
  {
644
668
  "pathPattern": "/me/onenote/pages",
645
669
  "method": "post",
@@ -777,6 +801,39 @@
777
801
  "scopes": ["Tasks.ReadWrite"],
778
802
  "llmTip": "CRITICAL: Requires If-Match header with ETag from get-planner-task-details (use includeHeaders=true). Checklist items use GUID keys: {\"checklist\": {\"<guid>\": {\"title\": \"...\", \"isChecked\": false}}}."
779
803
  },
804
+ {
805
+ "pathPattern": "/planner/plans/{plannerPlan-id}/buckets",
806
+ "method": "get",
807
+ "toolName": "list-plan-buckets",
808
+ "scopes": ["Tasks.Read"]
809
+ },
810
+ {
811
+ "pathPattern": "/planner/buckets/{plannerBucket-id}",
812
+ "method": "get",
813
+ "toolName": "get-planner-bucket",
814
+ "scopes": ["Tasks.Read"],
815
+ "llmTip": "Response includes @odata.etag — required as If-Match for update-planner-bucket and delete-planner-bucket. Use includeHeaders=true."
816
+ },
817
+ {
818
+ "pathPattern": "/planner/buckets",
819
+ "method": "post",
820
+ "toolName": "create-planner-bucket",
821
+ "scopes": ["Tasks.ReadWrite"]
822
+ },
823
+ {
824
+ "pathPattern": "/planner/buckets/{plannerBucket-id}",
825
+ "method": "patch",
826
+ "toolName": "update-planner-bucket",
827
+ "scopes": ["Tasks.ReadWrite"],
828
+ "llmTip": "CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true)."
829
+ },
830
+ {
831
+ "pathPattern": "/planner/buckets/{plannerBucket-id}",
832
+ "method": "delete",
833
+ "toolName": "delete-planner-bucket",
834
+ "scopes": ["Tasks.ReadWrite"],
835
+ "llmTip": "CRITICAL: Requires If-Match header with ETag from get-planner-bucket (use includeHeaders=true)."
836
+ },
780
837
  {
781
838
  "pathPattern": "/me/contacts",
782
839
  "method": "get",
@@ -901,6 +958,20 @@
901
958
  "workScopes": ["Group.Read.All"],
902
959
  "llmTip": "Gets a specific group's details: displayName, description, mail, visibility, groupTypes, membershipRule, createdDateTime. Use $select to limit returned properties."
903
960
  },
961
+ {
962
+ "pathPattern": "/groups/{group-id}/calendarView",
963
+ "method": "get",
964
+ "toolName": "get-group-calendar-view",
965
+ "workScopes": ["Group.Read.All"],
966
+ "supportsTimezone": true
967
+ },
968
+ {
969
+ "pathPattern": "/groups/{group-id}/events",
970
+ "method": "get",
971
+ "toolName": "list-group-events",
972
+ "workScopes": ["Group.Read.All"],
973
+ "supportsTimezone": true
974
+ },
904
975
  {
905
976
  "pathPattern": "/groups/{group-id}/members",
906
977
  "method": "get",
@@ -1547,5 +1618,47 @@
1547
1618
  "toolName": "create-chat",
1548
1619
  "workScopes": ["Chat.Create", "Chat.ReadWrite"],
1549
1620
  "llmTip": "Creates a new 1:1 or group Teams chat. Body: { chatType ('oneOnOne' or 'group'), topic (optional, group only), members: [{ '@odata.type': '#microsoft.graph.aadUserConversationMember', roles: ['owner' | 'guest'], 'user@odata.bind': 'https://graph.microsoft.com/v1.0/users({id})' }] }. A oneOnOne chat requires exactly 2 members (self + other), both with role 'owner'. For group chats, include all participants. The signed-in user must be one of the members. Returns the created chat with its id — use that id with send-chat-message, list-chat-members, etc."
1621
+ },
1622
+ {
1623
+ "pathPattern": "/subscriptions",
1624
+ "method": "get",
1625
+ "toolName": "list-subscriptions",
1626
+ "scopes": [],
1627
+ "llmTip": "Lists webhook subscriptions owned by the current app/user. Returns id, resource, changeType, notificationUrl, expirationDateTime, clientState. Use $filter=resource eq '/me/messages' to find subscriptions for a specific resource. No dedicated 'Subscription.*' scope exists — the caller must already have a read permission for the subscribed resource (e.g. Mail.Read for /me/messages), which is supplied by the tool that reads that resource."
1628
+ },
1629
+ {
1630
+ "pathPattern": "/subscriptions",
1631
+ "method": "post",
1632
+ "toolName": "create-subscription",
1633
+ "scopes": [],
1634
+ "llmTip": "Creates a webhook subscription for change notifications. Required body: { changeType (comma-separated: 'created,updated,deleted'), notificationUrl (HTTPS, must validate with token echo), resource (e.g. '/me/mailFolders/inbox/messages', '/users/{id}/events', '/teams/{id}/channels/{id}/messages'), expirationDateTime (ISO 8601, max varies by resource type — 1 hour for calls, 24h for messages, 3 days for mail), clientState (opaque string returned in notifications, for validation) }. Optional: includeResourceData (true enables rich notifications, requires encryptionCertificate + encryptionCertificateId). No dedicated scope — caller must have a read permission for the target resource (e.g. Mail.Read, Calendars.Read, ChannelMessage.Read.All, Files.Read.All)."
1635
+ },
1636
+ {
1637
+ "pathPattern": "/subscriptions/{subscription-id}",
1638
+ "method": "get",
1639
+ "toolName": "get-subscription",
1640
+ "scopes": [],
1641
+ "llmTip": "Gets a specific webhook subscription by id. Use list-subscriptions to find the id. Returns full subscription details including resource, changeType, notificationUrl, expirationDateTime, applicationId."
1642
+ },
1643
+ {
1644
+ "pathPattern": "/subscriptions/{subscription-id}",
1645
+ "method": "patch",
1646
+ "toolName": "update-subscription",
1647
+ "scopes": [],
1648
+ "llmTip": "Renews a webhook subscription by extending its expiration. Body: { expirationDateTime (ISO 8601, new expiry) }. Call before the current expirationDateTime to avoid missing notifications. Max extension varies by resource type — check Microsoft Graph docs for subscription limits."
1649
+ },
1650
+ {
1651
+ "pathPattern": "/subscriptions/{subscription-id}",
1652
+ "method": "delete",
1653
+ "toolName": "delete-subscription",
1654
+ "scopes": [],
1655
+ "llmTip": "Deletes a webhook subscription. No further change notifications will be sent. Use this to clean up stale subscriptions or stop receiving notifications. Use list-subscriptions to find the id."
1656
+ },
1657
+ {
1658
+ "pathPattern": "/subscriptions/{subscription-id}/reauthorize",
1659
+ "method": "post",
1660
+ "toolName": "reauthorize-subscription",
1661
+ "scopes": [],
1662
+ "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."
1550
1663
  }
1551
1664
  ]