mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-10 19:57:44 +02:00
[eric] 1.0.26: ship Discord shim default + auto-migrate legacy + clean Google
reconnect
This commit is contained in:
@@ -190,13 +190,15 @@
|
||||
"pathPattern": "/me/messages/{message-id}/createReply",
|
||||
"method": "post",
|
||||
"toolName": "create-reply-draft",
|
||||
"scopes": ["Mail.ReadWrite"]
|
||||
"scopes": ["Mail.ReadWrite"],
|
||||
"llmTip": "For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/me/messages/{message-id}/createReplyAll",
|
||||
"method": "post",
|
||||
"toolName": "create-reply-all-draft",
|
||||
"scopes": ["Mail.ReadWrite"]
|
||||
"scopes": ["Mail.ReadWrite"],
|
||||
"llmTip": "For HTML replies pass Message.body.contentType: 'html' with Message.body.content as HTML. Note: supplying Message.body replaces the whole draft body, so the original quoted history is not included. Specifying both 'comment' and Message.body returns 400. Signatures are added by the Outlook client only, not via Graph."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/me/messages/{message-id}/send",
|
||||
@@ -556,6 +558,59 @@
|
||||
"scopes": ["Files.Read"],
|
||||
"skipEncoding": ["address"]
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')",
|
||||
"method": "patch",
|
||||
"toolName": "update-excel-range",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"skipEncoding": ["address"],
|
||||
"llmTip": "Set cell values, formulas, or number format on any range — does NOT require the worksheet to be a formal Excel table. Body: { values: [['v1','v2','v3']] } for a single row, or [['a','b'],['c','d']] for multi-row. Use this for append (target the next empty row's address, e.g. 'A172:H172'), update (target a single cell like 'H42'), or prepend-style edits (read existing, concatenate, write back). Number of inner-array values must match the column count of the address."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/insert",
|
||||
"method": "post",
|
||||
"toolName": "insert-excel-range",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"skipEncoding": ["address"],
|
||||
"llmTip": "Insert blank cells at the given range, shifting existing content. Body: { shift: 'Down' } or { shift: 'Right' }. Use 'Down' to insert blank rows above existing data."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/delete",
|
||||
"method": "post",
|
||||
"toolName": "delete-excel-range",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"skipEncoding": ["address"],
|
||||
"llmTip": "Delete cells at the given range, shifting remaining content. Body: { shift: 'Up' } or { shift: 'Left' }. Use 'Up' to delete entire rows."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/tables/{workbookTable-id}/rows/itemAt(index={index})",
|
||||
"method": "patch",
|
||||
"toolName": "update-excel-table-row",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"skipEncoding": ["index"],
|
||||
"llmTip": "Update a single row in a formal Excel table by zero-based row index. Body: { values: [[...]] } with one inner array matching the column count."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/tables/{workbookTable-id}/rows/itemAt(index={index})",
|
||||
"method": "delete",
|
||||
"toolName": "delete-excel-table-row",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"skipEncoding": ["index"],
|
||||
"llmTip": "Delete a single row from a formal Excel table by zero-based row index."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/tables/add",
|
||||
"method": "post",
|
||||
"toolName": "create-excel-table",
|
||||
"isExcelOp": true,
|
||||
"scopes": ["Files.ReadWrite"],
|
||||
"llmTip": "Convert a worksheet range into a formal Excel table. Body: { address: 'A1:H171', hasHeaders: true }. Required before using add-excel-table-rows / update-excel-table-row / delete-excel-table-row on a plain-cells sheet."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets",
|
||||
"method": "get",
|
||||
@@ -1618,5 +1673,47 @@
|
||||
"toolName": "create-chat",
|
||||
"workScopes": ["Chat.Create", "Chat.ReadWrite"],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions",
|
||||
"method": "get",
|
||||
"toolName": "list-subscriptions",
|
||||
"scopes": [],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions",
|
||||
"method": "post",
|
||||
"toolName": "create-subscription",
|
||||
"scopes": [],
|
||||
"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)."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions/{subscription-id}",
|
||||
"method": "get",
|
||||
"toolName": "get-subscription",
|
||||
"scopes": [],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions/{subscription-id}",
|
||||
"method": "patch",
|
||||
"toolName": "update-subscription",
|
||||
"scopes": [],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions/{subscription-id}",
|
||||
"method": "delete",
|
||||
"toolName": "delete-subscription",
|
||||
"scopes": [],
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"pathPattern": "/subscriptions/{subscription-id}/reauthorize",
|
||||
"method": "post",
|
||||
"toolName": "reauthorize-subscription",
|
||||
"scopes": [],
|
||||
"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."
|
||||
}
|
||||
]
|
||||
|
||||
+217
-2
@@ -84823,7 +84823,8 @@ async function getKeytar() {
|
||||
}
|
||||
if (keytar === null) {
|
||||
try {
|
||||
keytar = await import("keytar");
|
||||
const mod = await import("keytar");
|
||||
keytar = mod.default ?? mod;
|
||||
return keytar;
|
||||
} catch (error2) {
|
||||
logger_default.info("keytar not available, using file-based credential storage");
|
||||
@@ -104407,6 +104408,7 @@ var microsoft_graph_workbookRange = external_exports.object({
|
||||
sort: microsoft_graph_workbookRangeSort.optional(),
|
||||
worksheet: microsoft_graph_workbookWorksheet.optional()
|
||||
}).passthrough();
|
||||
var create_excel_table_Body = external_exports.object({ address: external_exports.string().nullable(), hasHeaders: external_exports.boolean().default(false) }).partial().passthrough();
|
||||
var microsoft_graph_assignedLabel = external_exports.object({
|
||||
displayName: external_exports.string().describe("The display name of the label. Read-only.").nullish(),
|
||||
labelId: external_exports.string().describe("The unique identifier of the label.").nullish()
|
||||
@@ -107341,6 +107343,11 @@ var microsoft_graph_virtualEventSessionCollectionResponse = external_exports.obj
|
||||
"@odata.nextLink": external_exports.string().nullable(),
|
||||
value: external_exports.array(microsoft_graph_virtualEventSession)
|
||||
}).partial().passthrough();
|
||||
var microsoft_graph_subscriptionCollectionResponse = external_exports.object({
|
||||
"@odata.count": external_exports.number().int().nullable(),
|
||||
"@odata.nextLink": external_exports.string().nullable(),
|
||||
value: external_exports.array(microsoft_graph_subscription)
|
||||
}).partial().passthrough();
|
||||
var microsoft_graph_channelCollectionResponse = external_exports.object({
|
||||
"@odata.count": external_exports.number().int().nullable(),
|
||||
"@odata.nextLink": external_exports.string().nullable(),
|
||||
@@ -108335,6 +108342,30 @@ Items with this property set should be removed from your local state.`,
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "patch",
|
||||
path: "/drives/:driveId/items/:driveItemId/workbook/tables/:workbookTableId/rows/itemAt(index=:index)",
|
||||
alias: "update-excel-table-row",
|
||||
description: `Update a single row in a formal Excel table by zero-based row index. Body: { values: [[...]] } with one inner array matching the column count.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `Operation payload`,
|
||||
type: "Body",
|
||||
schema: external_exports.object({}).partial().passthrough().passthrough()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "delete",
|
||||
path: "/drives/:driveId/items/:driveItemId/workbook/tables/:workbookTableId/rows/itemAt(index=:index)",
|
||||
alias: "delete-excel-table-row",
|
||||
description: `Delete a single row from a formal Excel table by zero-based row index.`,
|
||||
requestFormat: "json",
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets",
|
||||
@@ -108443,6 +108474,70 @@ Items with this property set should be removed from your local state.`,
|
||||
requestFormat: "json",
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "patch",
|
||||
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')`,
|
||||
alias: "update-excel-range",
|
||||
description: `Set cell values, formulas, or number format on any range \u2014 does NOT require the worksheet to be a formal Excel table. Body: { values: [['v1','v2','v3']] } for a single row, or [['a','b'],['c','d']] for multi-row. Use this for append (target the next empty row's address, e.g. 'A172:H172'), update (target a single cell like 'H42'), or prepend-style edits (read existing, concatenate, write back). Number of inner-array values must match the column count of the address.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `Operation payload`,
|
||||
type: "Body",
|
||||
schema: external_exports.object({}).partial().passthrough().passthrough()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "post",
|
||||
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/delete`,
|
||||
alias: "delete-excel-range",
|
||||
description: `Invoke action delete`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `Action parameters`,
|
||||
type: "Body",
|
||||
schema: external_exports.object({ shift: external_exports.string() }).partial().passthrough()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "post",
|
||||
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/insert`,
|
||||
alias: "insert-excel-range",
|
||||
description: `Invoke action insert`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `Action parameters`,
|
||||
type: "Body",
|
||||
schema: external_exports.object({ shift: external_exports.string() }).partial().passthrough()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "post",
|
||||
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/tables/add",
|
||||
alias: "create-excel-table",
|
||||
description: `Create a new table. The range source address determines the worksheet under which the table will be added. If the table can't be added (for example, because the address is invalid, or the table would overlap with another table), an error is generated.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `Action parameters`,
|
||||
type: "Body",
|
||||
schema: create_excel_table_Body
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "/drives/:driveId/root",
|
||||
@@ -114013,6 +114108,126 @@ To monitor future changes, call the delta API by using the @odata.deltaLink in t
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "/subscriptions",
|
||||
alias: "list-subscriptions",
|
||||
description: `Retrieve the properties and relationships of webhook subscriptions, based on the app ID, the user, and the user's role with a tenant. The content of the response depends on the context in which the app is calling; for details, see the scenarios in the Permissions section.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "$top",
|
||||
type: "Query",
|
||||
schema: external_exports.number().int().gte(0).describe("Show only the first n items").optional()
|
||||
},
|
||||
{
|
||||
name: "$skip",
|
||||
type: "Query",
|
||||
schema: external_exports.number().int().gte(0).describe("Skip the first n items").optional()
|
||||
},
|
||||
{
|
||||
name: "$search",
|
||||
type: "Query",
|
||||
schema: external_exports.string().describe("Search items by search phrases").optional()
|
||||
},
|
||||
{
|
||||
name: "$filter",
|
||||
type: "Query",
|
||||
schema: external_exports.string().describe("Filter items by property values").optional()
|
||||
},
|
||||
{
|
||||
name: "$count",
|
||||
type: "Query",
|
||||
schema: external_exports.boolean().describe("Include count of items").optional()
|
||||
},
|
||||
{
|
||||
name: "$orderby",
|
||||
type: "Query",
|
||||
schema: external_exports.array(external_exports.string()).describe("Order items by property values").optional()
|
||||
},
|
||||
{
|
||||
name: "$select",
|
||||
type: "Query",
|
||||
schema: external_exports.array(external_exports.string()).describe("Select properties to be returned").optional()
|
||||
},
|
||||
{
|
||||
name: "$expand",
|
||||
type: "Query",
|
||||
schema: external_exports.array(external_exports.string()).describe("Expand related entities").optional()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "post",
|
||||
path: "/subscriptions",
|
||||
alias: "create-subscription",
|
||||
description: `Subscribes a listener application to receive change notifications when the requested type of changes occur to the specified resource in Microsoft Graph. To identify the resources for which you can create subscriptions and the limitations on subscriptions, see Set up notifications for changes in resource data: Supported resources. Some resources support rich notifications, that is, notifications that include resource data. For more information about these resources, see Set up change notifications that include resource data: Supported resources.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `New entity`,
|
||||
type: "Body",
|
||||
schema: microsoft_graph_subscription
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "/subscriptions/:subscriptionId",
|
||||
alias: "get-subscription",
|
||||
description: `Retrieve the properties and relationships of a subscription. See the table in the Permissions section for the list of resources that support subscribing to change notifications.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "$select",
|
||||
type: "Query",
|
||||
schema: external_exports.array(external_exports.string()).describe("Select properties to be returned").optional()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "patch",
|
||||
path: "/subscriptions/:subscriptionId",
|
||||
alias: "update-subscription",
|
||||
description: `Renew a subscription by extending its expiry time. The table in the Permissions section lists the resources that support subscribing to change notifications. Subscriptions expire after a length of time that varies by resource type. In order to avoid missing change notifications, an app should renew its subscriptions well in advance of their expiry date. See subscription for maximum length of a subscription for each resource type.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "body",
|
||||
description: `New property values`,
|
||||
type: "Body",
|
||||
schema: microsoft_graph_subscription
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "delete",
|
||||
path: "/subscriptions/:subscriptionId",
|
||||
alias: "delete-subscription",
|
||||
description: `Delete a subscription. For the list of resources that support subscribing to change notifications, see the table in the Permissions section.`,
|
||||
requestFormat: "json",
|
||||
parameters: [
|
||||
{
|
||||
name: "If-Match",
|
||||
type: "Header",
|
||||
schema: external_exports.string().describe("ETag").optional()
|
||||
}
|
||||
],
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "post",
|
||||
path: "/subscriptions/:subscriptionId/reauthorize",
|
||||
alias: "reauthorize-subscription",
|
||||
description: `Reauthorize a subscription when you receive a reauthorizationRequired challenge.`,
|
||||
requestFormat: "json",
|
||||
response: external_exports.void()
|
||||
},
|
||||
{
|
||||
method: "get",
|
||||
path: "/teams/:teamId",
|
||||
@@ -115222,7 +115437,7 @@ async function executeGraphTool(tool, config2, graphClient, params, authManager)
|
||||
logger_default.info(`Setting timezone preference: outlook.timezone="${params.timezone}"`);
|
||||
}
|
||||
const bodyFormat = process.env.MS365_MCP_BODY_FORMAT || "text";
|
||||
if (bodyFormat !== "html") {
|
||||
if (bodyFormat !== "html" && tool.method.toUpperCase() === "GET") {
|
||||
preferValues.push(`outlook.body-content-type="${bodyFormat}"`);
|
||||
}
|
||||
if (preferValues.length > 0) {
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name":"@softeria/ms-365-mcp-server","version":"0.86.0"}
|
||||
{"name":"@softeria/ms-365-mcp-server","version":"0.88.1"}
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user