@softeria/ms-365-mcp-server 0.94.0 → 0.96.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/bin/modules/simplified-openapi.mjs +14 -4
- package/dist/endpoints.json +96 -2
- package/dist/generated/client.js +366 -18
- package/package.json +1 -1
- package/src/endpoints.json +96 -2
|
@@ -8,24 +8,34 @@ export function createAndSaveSimplifiedOpenAPI(endpointsFile, openapiFile, opena
|
|
|
8
8
|
const spec = fs.readFileSync(openapiFile, 'utf8');
|
|
9
9
|
const openApiSpec = yaml.load(spec);
|
|
10
10
|
|
|
11
|
+
// Synthesize paths that the Graph REST API supports but are missing from
|
|
12
|
+
// Microsoft's published OpenAPI metadata (e.g. range(address='{address}')/format
|
|
13
|
+
// — documented in Excel API but not in the OpenAPI spec).
|
|
11
14
|
for (const endpoint of endpoints) {
|
|
12
15
|
if (!openApiSpec.paths[endpoint.pathPattern]) {
|
|
13
|
-
|
|
16
|
+
openApiSpec.paths[endpoint.pathPattern] = {};
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
|
|
17
|
-
// Synthesize operations
|
|
18
|
-
// Microsoft's published OpenAPI metadata (e.g. PATCH on range(address='{address}')
|
|
19
|
-
// for cell-value writes — documented in Excel API but not in the OpenAPI spec).
|
|
20
|
+
// Synthesize operations on existing paths when the method is missing.
|
|
20
21
|
for (const endpoint of endpoints) {
|
|
21
22
|
const pathSpec = openApiSpec.paths[endpoint.pathPattern];
|
|
22
23
|
const methodLower = endpoint.method.toLowerCase();
|
|
23
24
|
if (pathSpec && !pathSpec[methodLower]) {
|
|
25
|
+
const pathParamMatches = [...endpoint.pathPattern.matchAll(/\{([^}]+)\}/g)].map((m) => m[1]);
|
|
26
|
+
const synthesizedParameters = pathParamMatches.map((paramName) => ({
|
|
27
|
+
name: paramName,
|
|
28
|
+
in: 'path',
|
|
29
|
+
required: true,
|
|
30
|
+
description: `Path parameter: ${paramName}`,
|
|
31
|
+
schema: { type: 'string' },
|
|
32
|
+
}));
|
|
24
33
|
pathSpec[methodLower] = {
|
|
25
34
|
tags: ['drives.driveItem'],
|
|
26
35
|
summary: endpoint.llmTip || `${endpoint.toolName} (synthesized)`,
|
|
27
36
|
description: endpoint.llmTip || `${endpoint.toolName} (synthesized)`,
|
|
28
37
|
operationId: endpoint.toolName,
|
|
38
|
+
parameters: synthesizedParameters,
|
|
29
39
|
requestBody:
|
|
30
40
|
methodLower === 'get' || methodLower === 'delete'
|
|
31
41
|
? undefined
|
package/dist/endpoints.json
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"pathPattern": "/$batch",
|
|
4
|
+
"method": "post",
|
|
5
|
+
"toolName": "graph-batch",
|
|
6
|
+
"scopes": [],
|
|
7
|
+
"llmTip": "Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...)."
|
|
8
|
+
},
|
|
2
9
|
{
|
|
3
10
|
"pathPattern": "/me/messages",
|
|
4
11
|
"method": "get",
|
|
@@ -593,11 +600,13 @@
|
|
|
593
600
|
"scopes": ["Files.ReadWrite"]
|
|
594
601
|
},
|
|
595
602
|
{
|
|
596
|
-
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range()/format",
|
|
603
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/format",
|
|
597
604
|
"method": "patch",
|
|
598
605
|
"toolName": "format-excel-range",
|
|
599
606
|
"isExcelOp": true,
|
|
600
|
-
"scopes": ["Files.ReadWrite"]
|
|
607
|
+
"scopes": ["Files.ReadWrite"],
|
|
608
|
+
"skipEncoding": ["address"],
|
|
609
|
+
"llmTip": "Apply font/fill/borders/alignment/wrapText/columnWidth/rowHeight to a specific range. Required path param 'address' (e.g. 'A1:E5' or 'Sheet1!A1:E5'). Body: { font: {bold,color,size,italic,name,underline}, fill: {color}, borders: [{sideIndex,style,color,weight}], horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight }."
|
|
601
610
|
},
|
|
602
611
|
{
|
|
603
612
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range()/sort",
|
|
@@ -614,6 +623,14 @@
|
|
|
614
623
|
"scopes": ["Files.Read"],
|
|
615
624
|
"skipEncoding": ["address"]
|
|
616
625
|
},
|
|
626
|
+
{
|
|
627
|
+
"pathPattern": "/me/messages/{message-id}/$value",
|
|
628
|
+
"method": "get",
|
|
629
|
+
"toolName": "get-mail-message-mime",
|
|
630
|
+
"scopes": ["Mail.Read"],
|
|
631
|
+
"acceptType": "text/plain",
|
|
632
|
+
"llmTip": "Download an email message as raw RFC 5322 MIME content (.eml format). Use this when archiving an email to disk preserving all original headers, body, and inline-encoded attachments. Returns the MIME stream as text. Find the message id with list-mail-messages first."
|
|
633
|
+
},
|
|
617
634
|
{
|
|
618
635
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')",
|
|
619
636
|
"method": "patch",
|
|
@@ -641,6 +658,41 @@
|
|
|
641
658
|
"skipEncoding": ["address"],
|
|
642
659
|
"llmTip": "Delete cells at the given range, shifting remaining content. Body: { shift: 'Up' } or { shift: 'Left' }. Use 'Up' to delete entire rows."
|
|
643
660
|
},
|
|
661
|
+
{
|
|
662
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/merge",
|
|
663
|
+
"method": "post",
|
|
664
|
+
"toolName": "merge-excel-range",
|
|
665
|
+
"isExcelOp": true,
|
|
666
|
+
"scopes": ["Files.ReadWrite"],
|
|
667
|
+
"skipEncoding": ["address"],
|
|
668
|
+
"llmTip": "Merge the cells in the given range into a single cell. Body: { across: false } merges the entire range into one cell; { across: true } merges each row separately. Useful for building styled headers, banner rows, and report layouts."
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/unmerge",
|
|
672
|
+
"method": "post",
|
|
673
|
+
"toolName": "unmerge-excel-range",
|
|
674
|
+
"isExcelOp": true,
|
|
675
|
+
"scopes": ["Files.ReadWrite"],
|
|
676
|
+
"skipEncoding": ["address"],
|
|
677
|
+
"llmTip": "Unmerge any merged cells within the given range back into individual cells. No request body. Inverse of merge-excel-range."
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/clear",
|
|
681
|
+
"method": "post",
|
|
682
|
+
"toolName": "clear-excel-range",
|
|
683
|
+
"isExcelOp": true,
|
|
684
|
+
"scopes": ["Files.ReadWrite"],
|
|
685
|
+
"skipEncoding": ["address"],
|
|
686
|
+
"llmTip": "Clear cell contents and/or formatting on the given range. Body: { applyTo: 'All' | 'Formats' | 'Contents' }. 'Contents' wipes values but keeps formatting; 'Formats' resets styling but keeps values; 'All' wipes both. Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell."
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/usedRange()",
|
|
690
|
+
"method": "get",
|
|
691
|
+
"toolName": "get-excel-used-range",
|
|
692
|
+
"isExcelOp": true,
|
|
693
|
+
"scopes": ["Files.Read"],
|
|
694
|
+
"llmTip": "Get the smallest range that encompasses any cells with values or formatting on the worksheet. Returns address, values, formulas, numberFormat, rowCount, columnCount. Use this to discover the populated bounds of a sheet before reading or appending — avoids guessing how far data extends. Optional $select to trim the response."
|
|
695
|
+
},
|
|
644
696
|
{
|
|
645
697
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/tables/{workbookTable-id}/rows/itemAt(index={index})",
|
|
646
698
|
"method": "patch",
|
|
@@ -1408,6 +1460,48 @@
|
|
|
1408
1460
|
"workScopes": ["Sites.ReadWrite.All"],
|
|
1409
1461
|
"llmTip": "Deletes a list item permanently. This cannot be undone — the item is moved to the site recycle bin."
|
|
1410
1462
|
},
|
|
1463
|
+
{
|
|
1464
|
+
"pathPattern": "/sites/{site-id}/lists",
|
|
1465
|
+
"method": "post",
|
|
1466
|
+
"toolName": "create-sharepoint-list",
|
|
1467
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1468
|
+
"llmTip": "Creates a new SharePoint list in a site. Body: { displayName: 'My List', description: 'Optional', list: { template: 'genericList' }, columns: [ { name: 'Status', text: {} }, { name: 'Due', dateTime: {} } ] }. Templates include genericList, documentLibrary, tasks, calendar, contacts, links, announcements, survey. Columns can be defined inline at creation; otherwise add them later via create-sharepoint-list-column. Use search-sharepoint-sites or get-sharepoint-site-by-path to find the site ID first."
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
|
|
1472
|
+
"method": "get",
|
|
1473
|
+
"toolName": "list-sharepoint-list-columns",
|
|
1474
|
+
"workScopes": ["Sites.Read.All"],
|
|
1475
|
+
"llmTip": "Lists column definitions for a SharePoint list. Returns each column's id, name, displayName, description, type indicator (text, number, choice, dateTime, person, lookup, boolean, calculated, hyperlinkOrPicture, etc.), required, indexed, hidden, readOnly. Use this to discover the schema before creating or updating list items."
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
|
|
1479
|
+
"method": "post",
|
|
1480
|
+
"toolName": "create-sharepoint-list-column",
|
|
1481
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1482
|
+
"llmTip": "Creates a new column on a SharePoint list. Body must include name and exactly one column type property: { name: 'Priority', text: {} } or { name: 'DueDate', dateTime: { format: 'dateOnly' } } or { name: 'Status', choice: { choices: ['Open','In Progress','Done'] } }. Other types: number, boolean, currency, hyperlinkOrPicture, personOrGroup, lookup, calculated. Optional: displayName, description, required, indexed, enforceUniqueValues."
|
|
1483
|
+
},
|
|
1484
|
+
{
|
|
1485
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1486
|
+
"method": "get",
|
|
1487
|
+
"toolName": "get-sharepoint-list-column",
|
|
1488
|
+
"workScopes": ["Sites.Read.All"],
|
|
1489
|
+
"llmTip": "Gets a specific column definition by ID, including its full type configuration (choices for choice columns, format for dateTime, etc.). Use list-sharepoint-list-columns first to find the column ID."
|
|
1490
|
+
},
|
|
1491
|
+
{
|
|
1492
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1493
|
+
"method": "patch",
|
|
1494
|
+
"toolName": "update-sharepoint-list-column",
|
|
1495
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1496
|
+
"llmTip": "Updates a column definition. Body: { displayName: 'New name', description: 'New description', required: true, ... }. The column type itself (text, choice, etc.) cannot be changed — only its metadata and per-type options (e.g. choices array for a choice column). Send only the fields you want to change."
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1500
|
+
"method": "delete",
|
|
1501
|
+
"toolName": "delete-sharepoint-list-column",
|
|
1502
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1503
|
+
"llmTip": "Deletes a column from a SharePoint list. This is irreversible — all data stored in this column across every list item is lost. Confirm with the user before calling. Cannot delete built-in columns (Title, Created, Modified, etc.)."
|
|
1504
|
+
},
|
|
1411
1505
|
{
|
|
1412
1506
|
"pathPattern": "/sites/{site-id}/getByPath(path='{path}')",
|
|
1413
1507
|
"method": "get",
|
package/dist/generated/client.js
CHANGED
|
@@ -1320,6 +1320,7 @@ const microsoft_graph_workbookWorksheetCollectionResponse = z.object({
|
|
|
1320
1320
|
value: z.array(microsoft_graph_workbookWorksheet)
|
|
1321
1321
|
}).partial().passthrough();
|
|
1322
1322
|
const create_excel_chart_Body = z.object({ type: z.string(), sourceData: z.unknown(), seriesBy: z.string() }).partial().passthrough();
|
|
1323
|
+
const microsoft_graph_workbookRangeSort = z.object({ id: z.string().describe("The unique identifier for an entity. Read-only.").optional() }).passthrough();
|
|
1323
1324
|
const microsoft_graph_workbookRangeBorder = z.object({
|
|
1324
1325
|
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
1325
1326
|
color: z.string().describe(
|
|
@@ -1385,7 +1386,6 @@ const microsoft_graph_workbookRangeFormat = z.object({
|
|
|
1385
1386
|
font: microsoft_graph_workbookRangeFont.optional(),
|
|
1386
1387
|
protection: microsoft_graph_workbookFormatProtection.optional()
|
|
1387
1388
|
}).passthrough();
|
|
1388
|
-
const microsoft_graph_workbookRangeSort = z.object({ id: z.string().describe("The unique identifier for an entity. Read-only.").optional() }).passthrough();
|
|
1389
1389
|
const microsoft_graph_workbookRange = z.object({
|
|
1390
1390
|
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
1391
1391
|
address: z.string().describe(
|
|
@@ -4289,6 +4289,11 @@ const microsoft_graph_listCollectionResponse = z.object({
|
|
|
4289
4289
|
"@odata.nextLink": z.string().nullable(),
|
|
4290
4290
|
value: z.array(microsoft_graph_list)
|
|
4291
4291
|
}).partial().passthrough();
|
|
4292
|
+
const microsoft_graph_columnDefinitionCollectionResponse = z.object({
|
|
4293
|
+
"@odata.count": z.number().int().nullable(),
|
|
4294
|
+
"@odata.nextLink": z.string().nullable(),
|
|
4295
|
+
value: z.array(microsoft_graph_columnDefinition)
|
|
4296
|
+
}).partial().passthrough();
|
|
4292
4297
|
const microsoft_graph_listItemCollectionResponse = z.object({
|
|
4293
4298
|
"@odata.count": z.number().int().nullable(),
|
|
4294
4299
|
"@odata.nextLink": z.string().nullable(),
|
|
@@ -4641,12 +4646,12 @@ const schemas = {
|
|
|
4641
4646
|
microsoft_graph_workbookTableRowCollectionResponse,
|
|
4642
4647
|
microsoft_graph_workbookWorksheetCollectionResponse,
|
|
4643
4648
|
create_excel_chart_Body,
|
|
4649
|
+
microsoft_graph_workbookRangeSort,
|
|
4644
4650
|
microsoft_graph_workbookRangeBorder,
|
|
4645
4651
|
microsoft_graph_workbookRangeFill,
|
|
4646
4652
|
microsoft_graph_workbookRangeFont,
|
|
4647
4653
|
microsoft_graph_workbookFormatProtection,
|
|
4648
4654
|
microsoft_graph_workbookRangeFormat,
|
|
4649
|
-
microsoft_graph_workbookRangeSort,
|
|
4650
4655
|
microsoft_graph_workbookRange,
|
|
4651
4656
|
create_excel_table_Body,
|
|
4652
4657
|
microsoft_graph_assignedLabel,
|
|
@@ -4933,6 +4938,7 @@ const schemas = {
|
|
|
4933
4938
|
microsoft_graph_siteCollectionResponse,
|
|
4934
4939
|
microsoft_graph_baseItemCollectionResponse,
|
|
4935
4940
|
microsoft_graph_listCollectionResponse,
|
|
4941
|
+
microsoft_graph_columnDefinitionCollectionResponse,
|
|
4936
4942
|
microsoft_graph_listItemCollectionResponse,
|
|
4937
4943
|
microsoft_graph_endpointType,
|
|
4938
4944
|
microsoft_graph_communicationsIdentitySet,
|
|
@@ -4956,6 +4962,22 @@ const schemas = {
|
|
|
4956
4962
|
microsoft_graph_userCollectionResponse
|
|
4957
4963
|
};
|
|
4958
4964
|
const endpoints = makeApi([
|
|
4965
|
+
{
|
|
4966
|
+
method: "post",
|
|
4967
|
+
path: "/$batch",
|
|
4968
|
+
alias: "graph-batch",
|
|
4969
|
+
description: `Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order \u2014 match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...).`,
|
|
4970
|
+
requestFormat: "json",
|
|
4971
|
+
parameters: [
|
|
4972
|
+
{
|
|
4973
|
+
name: "body",
|
|
4974
|
+
description: `Operation payload`,
|
|
4975
|
+
type: "Body",
|
|
4976
|
+
schema: z.object({}).partial().passthrough().passthrough()
|
|
4977
|
+
}
|
|
4978
|
+
],
|
|
4979
|
+
response: z.void()
|
|
4980
|
+
},
|
|
4959
4981
|
{
|
|
4960
4982
|
method: "post",
|
|
4961
4983
|
path: "/chats",
|
|
@@ -6053,6 +6075,26 @@ Items with this property set should be removed from your local state.`,
|
|
|
6053
6075
|
description: `Operation payload`,
|
|
6054
6076
|
type: "Body",
|
|
6055
6077
|
schema: z.object({}).partial().passthrough().passthrough()
|
|
6078
|
+
},
|
|
6079
|
+
{
|
|
6080
|
+
name: "driveId",
|
|
6081
|
+
type: "Path",
|
|
6082
|
+
schema: z.string().describe("Path parameter: drive-id")
|
|
6083
|
+
},
|
|
6084
|
+
{
|
|
6085
|
+
name: "driveItemId",
|
|
6086
|
+
type: "Path",
|
|
6087
|
+
schema: z.string().describe("Path parameter: driveItem-id")
|
|
6088
|
+
},
|
|
6089
|
+
{
|
|
6090
|
+
name: "workbookTableId",
|
|
6091
|
+
type: "Path",
|
|
6092
|
+
schema: z.string().describe("Path parameter: workbookTable-id")
|
|
6093
|
+
},
|
|
6094
|
+
{
|
|
6095
|
+
name: "index",
|
|
6096
|
+
type: "Path",
|
|
6097
|
+
schema: z.string().describe("Path parameter: index")
|
|
6056
6098
|
}
|
|
6057
6099
|
],
|
|
6058
6100
|
response: z.void()
|
|
@@ -6063,6 +6105,28 @@ Items with this property set should be removed from your local state.`,
|
|
|
6063
6105
|
alias: "delete-excel-table-row",
|
|
6064
6106
|
description: `Delete a single row from a formal Excel table by zero-based row index.`,
|
|
6065
6107
|
requestFormat: "json",
|
|
6108
|
+
parameters: [
|
|
6109
|
+
{
|
|
6110
|
+
name: "driveId",
|
|
6111
|
+
type: "Path",
|
|
6112
|
+
schema: z.string().describe("Path parameter: drive-id")
|
|
6113
|
+
},
|
|
6114
|
+
{
|
|
6115
|
+
name: "driveItemId",
|
|
6116
|
+
type: "Path",
|
|
6117
|
+
schema: z.string().describe("Path parameter: driveItem-id")
|
|
6118
|
+
},
|
|
6119
|
+
{
|
|
6120
|
+
name: "workbookTableId",
|
|
6121
|
+
type: "Path",
|
|
6122
|
+
schema: z.string().describe("Path parameter: workbookTable-id")
|
|
6123
|
+
},
|
|
6124
|
+
{
|
|
6125
|
+
name: "index",
|
|
6126
|
+
type: "Path",
|
|
6127
|
+
schema: z.string().describe("Path parameter: index")
|
|
6128
|
+
}
|
|
6129
|
+
],
|
|
6066
6130
|
response: z.void()
|
|
6067
6131
|
},
|
|
6068
6132
|
{
|
|
@@ -6131,22 +6195,6 @@ Items with this property set should be removed from your local state.`,
|
|
|
6131
6195
|
],
|
|
6132
6196
|
response: z.void()
|
|
6133
6197
|
},
|
|
6134
|
-
{
|
|
6135
|
-
method: "patch",
|
|
6136
|
-
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range()/format",
|
|
6137
|
-
alias: "format-excel-range",
|
|
6138
|
-
description: `Update the navigation property format in drives`,
|
|
6139
|
-
requestFormat: "json",
|
|
6140
|
-
parameters: [
|
|
6141
|
-
{
|
|
6142
|
-
name: "body",
|
|
6143
|
-
description: `New navigation property values`,
|
|
6144
|
-
type: "Body",
|
|
6145
|
-
schema: microsoft_graph_workbookRangeFormat
|
|
6146
|
-
}
|
|
6147
|
-
],
|
|
6148
|
-
response: z.void()
|
|
6149
|
-
},
|
|
6150
6198
|
{
|
|
6151
6199
|
method: "patch",
|
|
6152
6200
|
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range()/sort",
|
|
@@ -6185,6 +6233,42 @@ Items with this property set should be removed from your local state.`,
|
|
|
6185
6233
|
description: `Operation payload`,
|
|
6186
6234
|
type: "Body",
|
|
6187
6235
|
schema: z.object({}).partial().passthrough().passthrough()
|
|
6236
|
+
},
|
|
6237
|
+
{
|
|
6238
|
+
name: "driveId",
|
|
6239
|
+
type: "Path",
|
|
6240
|
+
schema: z.string().describe("Path parameter: drive-id")
|
|
6241
|
+
},
|
|
6242
|
+
{
|
|
6243
|
+
name: "driveItemId",
|
|
6244
|
+
type: "Path",
|
|
6245
|
+
schema: z.string().describe("Path parameter: driveItem-id")
|
|
6246
|
+
},
|
|
6247
|
+
{
|
|
6248
|
+
name: "workbookWorksheetId",
|
|
6249
|
+
type: "Path",
|
|
6250
|
+
schema: z.string().describe("Path parameter: workbookWorksheet-id")
|
|
6251
|
+
},
|
|
6252
|
+
{
|
|
6253
|
+
name: "address",
|
|
6254
|
+
type: "Path",
|
|
6255
|
+
schema: z.string().describe("Path parameter: address")
|
|
6256
|
+
}
|
|
6257
|
+
],
|
|
6258
|
+
response: z.void()
|
|
6259
|
+
},
|
|
6260
|
+
{
|
|
6261
|
+
method: "post",
|
|
6262
|
+
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/clear`,
|
|
6263
|
+
alias: "clear-excel-range",
|
|
6264
|
+
description: `Invoke action clear`,
|
|
6265
|
+
requestFormat: "json",
|
|
6266
|
+
parameters: [
|
|
6267
|
+
{
|
|
6268
|
+
name: "body",
|
|
6269
|
+
description: `Action parameters`,
|
|
6270
|
+
type: "Body",
|
|
6271
|
+
schema: z.object({ applyTo: z.string() }).partial().passthrough()
|
|
6188
6272
|
}
|
|
6189
6273
|
],
|
|
6190
6274
|
response: z.void()
|
|
@@ -6205,6 +6289,22 @@ Items with this property set should be removed from your local state.`,
|
|
|
6205
6289
|
],
|
|
6206
6290
|
response: z.void()
|
|
6207
6291
|
},
|
|
6292
|
+
{
|
|
6293
|
+
method: "patch",
|
|
6294
|
+
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/format`,
|
|
6295
|
+
alias: "format-excel-range",
|
|
6296
|
+
description: `Update the navigation property format in drives`,
|
|
6297
|
+
requestFormat: "json",
|
|
6298
|
+
parameters: [
|
|
6299
|
+
{
|
|
6300
|
+
name: "body",
|
|
6301
|
+
description: `New navigation property values`,
|
|
6302
|
+
type: "Body",
|
|
6303
|
+
schema: microsoft_graph_workbookRangeFormat
|
|
6304
|
+
}
|
|
6305
|
+
],
|
|
6306
|
+
response: z.void()
|
|
6307
|
+
},
|
|
6208
6308
|
{
|
|
6209
6309
|
method: "post",
|
|
6210
6310
|
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/insert`,
|
|
@@ -6221,6 +6321,30 @@ Items with this property set should be removed from your local state.`,
|
|
|
6221
6321
|
],
|
|
6222
6322
|
response: z.void()
|
|
6223
6323
|
},
|
|
6324
|
+
{
|
|
6325
|
+
method: "post",
|
|
6326
|
+
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/merge`,
|
|
6327
|
+
alias: "merge-excel-range",
|
|
6328
|
+
description: `Invoke action merge`,
|
|
6329
|
+
requestFormat: "json",
|
|
6330
|
+
parameters: [
|
|
6331
|
+
{
|
|
6332
|
+
name: "body",
|
|
6333
|
+
description: `Action parameters`,
|
|
6334
|
+
type: "Body",
|
|
6335
|
+
schema: z.object({ across: z.boolean().default(false) }).partial().passthrough()
|
|
6336
|
+
}
|
|
6337
|
+
],
|
|
6338
|
+
response: z.void()
|
|
6339
|
+
},
|
|
6340
|
+
{
|
|
6341
|
+
method: "post",
|
|
6342
|
+
path: `/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/range(address=':address')/unmerge`,
|
|
6343
|
+
alias: "unmerge-excel-range",
|
|
6344
|
+
description: `Invoke action unmerge`,
|
|
6345
|
+
requestFormat: "json",
|
|
6346
|
+
response: z.void()
|
|
6347
|
+
},
|
|
6224
6348
|
{
|
|
6225
6349
|
method: "post",
|
|
6226
6350
|
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/tables/add",
|
|
@@ -6237,6 +6361,14 @@ Items with this property set should be removed from your local state.`,
|
|
|
6237
6361
|
],
|
|
6238
6362
|
response: z.void()
|
|
6239
6363
|
},
|
|
6364
|
+
{
|
|
6365
|
+
method: "get",
|
|
6366
|
+
path: "/drives/:driveId/items/:driveItemId/workbook/worksheets/:workbookWorksheetId/usedRange()",
|
|
6367
|
+
alias: "get-excel-used-range",
|
|
6368
|
+
description: `Invoke function usedRange`,
|
|
6369
|
+
requestFormat: "json",
|
|
6370
|
+
response: z.void()
|
|
6371
|
+
},
|
|
6240
6372
|
{
|
|
6241
6373
|
method: "get",
|
|
6242
6374
|
path: "/drives/:driveId/root",
|
|
@@ -9379,6 +9511,21 @@ having to fetch the entire set of messages from the server every time.`,
|
|
|
9379
9511
|
],
|
|
9380
9512
|
response: z.void()
|
|
9381
9513
|
},
|
|
9514
|
+
{
|
|
9515
|
+
method: "get",
|
|
9516
|
+
path: "/me/messages/:messageId/$value",
|
|
9517
|
+
alias: "get-mail-message-mime",
|
|
9518
|
+
description: `Get an open extension (openTypeExtension object) identified by name or fully qualified name. The table in the Permissions section lists the resources that support open extensions. The following table lists the three scenarios where you can get an open extension from a supported resource instance.`,
|
|
9519
|
+
requestFormat: "json",
|
|
9520
|
+
parameters: [
|
|
9521
|
+
{
|
|
9522
|
+
name: "includeHiddenMessages",
|
|
9523
|
+
type: "Query",
|
|
9524
|
+
schema: z.string().describe("Include Hidden Messages").optional()
|
|
9525
|
+
}
|
|
9526
|
+
],
|
|
9527
|
+
response: z.void()
|
|
9528
|
+
},
|
|
9382
9529
|
{
|
|
9383
9530
|
method: "get",
|
|
9384
9531
|
path: "/me/messages/:messageId/attachments",
|
|
@@ -11696,6 +11843,22 @@ To list them, include system in your $select statement.`,
|
|
|
11696
11843
|
],
|
|
11697
11844
|
response: z.void()
|
|
11698
11845
|
},
|
|
11846
|
+
{
|
|
11847
|
+
method: "post",
|
|
11848
|
+
path: "/sites/:siteId/lists",
|
|
11849
|
+
alias: "create-sharepoint-list",
|
|
11850
|
+
description: `Create a new list in a site.`,
|
|
11851
|
+
requestFormat: "json",
|
|
11852
|
+
parameters: [
|
|
11853
|
+
{
|
|
11854
|
+
name: "body",
|
|
11855
|
+
description: `New navigation property`,
|
|
11856
|
+
type: "Body",
|
|
11857
|
+
schema: microsoft_graph_list
|
|
11858
|
+
}
|
|
11859
|
+
],
|
|
11860
|
+
response: z.void()
|
|
11861
|
+
},
|
|
11699
11862
|
{
|
|
11700
11863
|
method: "get",
|
|
11701
11864
|
path: "/sites/:siteId/lists/:listId",
|
|
@@ -11716,6 +11879,191 @@ To list them, include system in your $select statement.`,
|
|
|
11716
11879
|
],
|
|
11717
11880
|
response: z.void()
|
|
11718
11881
|
},
|
|
11882
|
+
{
|
|
11883
|
+
method: "get",
|
|
11884
|
+
path: "/sites/:siteId/lists/:listId/columns",
|
|
11885
|
+
alias: "list-sharepoint-list-columns",
|
|
11886
|
+
description: `Get the collection of columns represented as columnDefinition resources in a list.`,
|
|
11887
|
+
requestFormat: "json",
|
|
11888
|
+
parameters: [
|
|
11889
|
+
{
|
|
11890
|
+
name: "$top",
|
|
11891
|
+
type: "Query",
|
|
11892
|
+
schema: z.number().int().gte(0).describe("Show only the first n items").optional()
|
|
11893
|
+
},
|
|
11894
|
+
{
|
|
11895
|
+
name: "$skip",
|
|
11896
|
+
type: "Query",
|
|
11897
|
+
schema: z.number().int().gte(0).describe("Skip the first n items").optional()
|
|
11898
|
+
},
|
|
11899
|
+
{
|
|
11900
|
+
name: "$search",
|
|
11901
|
+
type: "Query",
|
|
11902
|
+
schema: z.string().describe("Search items by search phrases").optional()
|
|
11903
|
+
},
|
|
11904
|
+
{
|
|
11905
|
+
name: "$filter",
|
|
11906
|
+
type: "Query",
|
|
11907
|
+
schema: z.string().describe("Filter items by property values").optional()
|
|
11908
|
+
},
|
|
11909
|
+
{
|
|
11910
|
+
name: "$count",
|
|
11911
|
+
type: "Query",
|
|
11912
|
+
schema: z.boolean().describe("Include count of items").optional()
|
|
11913
|
+
},
|
|
11914
|
+
{
|
|
11915
|
+
name: "$orderby",
|
|
11916
|
+
type: "Query",
|
|
11917
|
+
schema: z.array(z.string()).describe("Order items by property values").optional()
|
|
11918
|
+
},
|
|
11919
|
+
{
|
|
11920
|
+
name: "$select",
|
|
11921
|
+
type: "Query",
|
|
11922
|
+
schema: z.array(z.string()).describe("Select properties to be returned").optional()
|
|
11923
|
+
},
|
|
11924
|
+
{
|
|
11925
|
+
name: "$expand",
|
|
11926
|
+
type: "Query",
|
|
11927
|
+
schema: z.array(z.string()).describe("Expand related entities").optional()
|
|
11928
|
+
}
|
|
11929
|
+
],
|
|
11930
|
+
response: z.void()
|
|
11931
|
+
},
|
|
11932
|
+
{
|
|
11933
|
+
method: "post",
|
|
11934
|
+
path: "/sites/:siteId/lists/:listId/columns",
|
|
11935
|
+
alias: "create-sharepoint-list-column",
|
|
11936
|
+
description: `Create a column for a list with a request that specifies a columnDefinition.`,
|
|
11937
|
+
requestFormat: "json",
|
|
11938
|
+
parameters: [
|
|
11939
|
+
{
|
|
11940
|
+
name: "body",
|
|
11941
|
+
description: `New navigation property`,
|
|
11942
|
+
type: "Body",
|
|
11943
|
+
schema: z.object({
|
|
11944
|
+
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
11945
|
+
name: z.string().describe(
|
|
11946
|
+
"The API-facing name of the column as it appears in the fields on a listItem. For the user-facing name, see displayName."
|
|
11947
|
+
).nullish(),
|
|
11948
|
+
displayName: z.string().describe("The user-facing name of the column.").nullish(),
|
|
11949
|
+
description: z.string().describe("The user-facing description of the column.").nullish(),
|
|
11950
|
+
type: microsoft_graph_columnTypes.optional(),
|
|
11951
|
+
boolean: microsoft_graph_booleanColumn.optional(),
|
|
11952
|
+
calculated: microsoft_graph_calculatedColumn.optional(),
|
|
11953
|
+
choice: microsoft_graph_choiceColumn.optional(),
|
|
11954
|
+
columnGroup: z.string().describe(
|
|
11955
|
+
"For site columns, the name of the group this column belongs to. Helps organize related columns."
|
|
11956
|
+
).nullish(),
|
|
11957
|
+
contentApprovalStatus: microsoft_graph_contentApprovalStatusColumn.optional(),
|
|
11958
|
+
currency: microsoft_graph_currencyColumn.optional(),
|
|
11959
|
+
dateTime: microsoft_graph_dateTimeColumn.optional(),
|
|
11960
|
+
defaultValue: microsoft_graph_defaultColumnValue.optional(),
|
|
11961
|
+
enforceUniqueValues: z.boolean().describe("If true, no two list items may have the same value for this column.").nullish(),
|
|
11962
|
+
geolocation: microsoft_graph_geolocationColumn.optional(),
|
|
11963
|
+
hidden: z.boolean().describe("Specifies whether the column is displayed in the user interface.").nullish(),
|
|
11964
|
+
hyperlinkOrPicture: microsoft_graph_hyperlinkOrPictureColumn.optional(),
|
|
11965
|
+
indexed: z.boolean().describe(
|
|
11966
|
+
"Specifies whether the column values can be used for sorting and searching."
|
|
11967
|
+
).nullish(),
|
|
11968
|
+
isDeletable: z.boolean().describe("Indicates whether this column can be deleted.").nullish(),
|
|
11969
|
+
isReorderable: z.boolean().describe("Indicates whether values in the column can be reordered. Read-only.").nullish(),
|
|
11970
|
+
isSealed: z.boolean().describe("Specifies whether the column can be changed.").nullish(),
|
|
11971
|
+
lookup: microsoft_graph_lookupColumn.optional(),
|
|
11972
|
+
number: microsoft_graph_numberColumn.optional(),
|
|
11973
|
+
personOrGroup: microsoft_graph_personOrGroupColumn.optional(),
|
|
11974
|
+
propagateChanges: z.boolean().describe(
|
|
11975
|
+
"If 'true', changes to this column will be propagated to lists that implement the column."
|
|
11976
|
+
).nullish()
|
|
11977
|
+
}).passthrough().passthrough()
|
|
11978
|
+
}
|
|
11979
|
+
],
|
|
11980
|
+
response: z.void()
|
|
11981
|
+
},
|
|
11982
|
+
{
|
|
11983
|
+
method: "get",
|
|
11984
|
+
path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
|
|
11985
|
+
alias: "get-sharepoint-list-column",
|
|
11986
|
+
description: `The collection of field definitions for this list.`,
|
|
11987
|
+
requestFormat: "json",
|
|
11988
|
+
parameters: [
|
|
11989
|
+
{
|
|
11990
|
+
name: "$select",
|
|
11991
|
+
type: "Query",
|
|
11992
|
+
schema: z.array(z.string()).describe("Select properties to be returned").optional()
|
|
11993
|
+
},
|
|
11994
|
+
{
|
|
11995
|
+
name: "$expand",
|
|
11996
|
+
type: "Query",
|
|
11997
|
+
schema: z.array(z.string()).describe("Expand related entities").optional()
|
|
11998
|
+
}
|
|
11999
|
+
],
|
|
12000
|
+
response: z.void()
|
|
12001
|
+
},
|
|
12002
|
+
{
|
|
12003
|
+
method: "patch",
|
|
12004
|
+
path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
|
|
12005
|
+
alias: "update-sharepoint-list-column",
|
|
12006
|
+
description: `Update the navigation property columns in sites`,
|
|
12007
|
+
requestFormat: "json",
|
|
12008
|
+
parameters: [
|
|
12009
|
+
{
|
|
12010
|
+
name: "body",
|
|
12011
|
+
description: `New navigation property values`,
|
|
12012
|
+
type: "Body",
|
|
12013
|
+
schema: z.object({
|
|
12014
|
+
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
12015
|
+
name: z.string().describe(
|
|
12016
|
+
"The API-facing name of the column as it appears in the fields on a listItem. For the user-facing name, see displayName."
|
|
12017
|
+
).nullish(),
|
|
12018
|
+
displayName: z.string().describe("The user-facing name of the column.").nullish(),
|
|
12019
|
+
description: z.string().describe("The user-facing description of the column.").nullish(),
|
|
12020
|
+
type: microsoft_graph_columnTypes.optional(),
|
|
12021
|
+
boolean: microsoft_graph_booleanColumn.optional(),
|
|
12022
|
+
calculated: microsoft_graph_calculatedColumn.optional(),
|
|
12023
|
+
choice: microsoft_graph_choiceColumn.optional(),
|
|
12024
|
+
columnGroup: z.string().describe(
|
|
12025
|
+
"For site columns, the name of the group this column belongs to. Helps organize related columns."
|
|
12026
|
+
).nullish(),
|
|
12027
|
+
contentApprovalStatus: microsoft_graph_contentApprovalStatusColumn.optional(),
|
|
12028
|
+
currency: microsoft_graph_currencyColumn.optional(),
|
|
12029
|
+
dateTime: microsoft_graph_dateTimeColumn.optional(),
|
|
12030
|
+
defaultValue: microsoft_graph_defaultColumnValue.optional(),
|
|
12031
|
+
enforceUniqueValues: z.boolean().describe("If true, no two list items may have the same value for this column.").nullish(),
|
|
12032
|
+
geolocation: microsoft_graph_geolocationColumn.optional(),
|
|
12033
|
+
hidden: z.boolean().describe("Specifies whether the column is displayed in the user interface.").nullish(),
|
|
12034
|
+
hyperlinkOrPicture: microsoft_graph_hyperlinkOrPictureColumn.optional(),
|
|
12035
|
+
indexed: z.boolean().describe(
|
|
12036
|
+
"Specifies whether the column values can be used for sorting and searching."
|
|
12037
|
+
).nullish(),
|
|
12038
|
+
isDeletable: z.boolean().describe("Indicates whether this column can be deleted.").nullish(),
|
|
12039
|
+
isReorderable: z.boolean().describe("Indicates whether values in the column can be reordered. Read-only.").nullish(),
|
|
12040
|
+
isSealed: z.boolean().describe("Specifies whether the column can be changed.").nullish(),
|
|
12041
|
+
lookup: microsoft_graph_lookupColumn.optional(),
|
|
12042
|
+
number: microsoft_graph_numberColumn.optional(),
|
|
12043
|
+
personOrGroup: microsoft_graph_personOrGroupColumn.optional(),
|
|
12044
|
+
propagateChanges: z.boolean().describe(
|
|
12045
|
+
"If 'true', changes to this column will be propagated to lists that implement the column."
|
|
12046
|
+
).nullish()
|
|
12047
|
+
}).passthrough().passthrough()
|
|
12048
|
+
}
|
|
12049
|
+
],
|
|
12050
|
+
response: z.void()
|
|
12051
|
+
},
|
|
12052
|
+
{
|
|
12053
|
+
method: "delete",
|
|
12054
|
+
path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
|
|
12055
|
+
alias: "delete-sharepoint-list-column",
|
|
12056
|
+
description: `Delete navigation property columns for sites`,
|
|
12057
|
+
requestFormat: "json",
|
|
12058
|
+
parameters: [
|
|
12059
|
+
{
|
|
12060
|
+
name: "If-Match",
|
|
12061
|
+
type: "Header",
|
|
12062
|
+
schema: z.string().describe("ETag").optional()
|
|
12063
|
+
}
|
|
12064
|
+
],
|
|
12065
|
+
response: z.void()
|
|
12066
|
+
},
|
|
11719
12067
|
{
|
|
11720
12068
|
method: "get",
|
|
11721
12069
|
path: "/sites/:siteId/lists/:listId/items",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softeria/ms-365-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.96.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",
|
package/src/endpoints.json
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"pathPattern": "/$batch",
|
|
4
|
+
"method": "post",
|
|
5
|
+
"toolName": "graph-batch",
|
|
6
|
+
"scopes": [],
|
|
7
|
+
"llmTip": "Combine up to 20 Graph requests into a single HTTP call. Body: { requests: [{ id: '1', method: 'GET'|'POST'|'PATCH'|'DELETE', url: '/me/messages?$top=5', headers?: {...}, body?: {...}, dependsOn?: ['1'] }, ...] }. Returns { responses: [{ id, status, body, headers }] } in arbitrary order — match by id. Use cases: (1) parallelize many small reads (e.g. fetch 15 mail messages by id in one round-trip); (2) sequence dependent writes via dependsOn; (3) batch many Excel range writes into one call to dramatically reduce latency on large workbook builds. Note: each sub-request URL is relative to the Graph version root (/me/..., /drives/..., NOT https://graph.microsoft.com/v1.0/...)."
|
|
8
|
+
},
|
|
2
9
|
{
|
|
3
10
|
"pathPattern": "/me/messages",
|
|
4
11
|
"method": "get",
|
|
@@ -593,11 +600,13 @@
|
|
|
593
600
|
"scopes": ["Files.ReadWrite"]
|
|
594
601
|
},
|
|
595
602
|
{
|
|
596
|
-
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range()/format",
|
|
603
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/format",
|
|
597
604
|
"method": "patch",
|
|
598
605
|
"toolName": "format-excel-range",
|
|
599
606
|
"isExcelOp": true,
|
|
600
|
-
"scopes": ["Files.ReadWrite"]
|
|
607
|
+
"scopes": ["Files.ReadWrite"],
|
|
608
|
+
"skipEncoding": ["address"],
|
|
609
|
+
"llmTip": "Apply font/fill/borders/alignment/wrapText/columnWidth/rowHeight to a specific range. Required path param 'address' (e.g. 'A1:E5' or 'Sheet1!A1:E5'). Body: { font: {bold,color,size,italic,name,underline}, fill: {color}, borders: [{sideIndex,style,color,weight}], horizontalAlignment, verticalAlignment, wrapText, columnWidth, rowHeight }."
|
|
601
610
|
},
|
|
602
611
|
{
|
|
603
612
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range()/sort",
|
|
@@ -614,6 +623,14 @@
|
|
|
614
623
|
"scopes": ["Files.Read"],
|
|
615
624
|
"skipEncoding": ["address"]
|
|
616
625
|
},
|
|
626
|
+
{
|
|
627
|
+
"pathPattern": "/me/messages/{message-id}/$value",
|
|
628
|
+
"method": "get",
|
|
629
|
+
"toolName": "get-mail-message-mime",
|
|
630
|
+
"scopes": ["Mail.Read"],
|
|
631
|
+
"acceptType": "text/plain",
|
|
632
|
+
"llmTip": "Download an email message as raw RFC 5322 MIME content (.eml format). Use this when archiving an email to disk preserving all original headers, body, and inline-encoded attachments. Returns the MIME stream as text. Find the message id with list-mail-messages first."
|
|
633
|
+
},
|
|
617
634
|
{
|
|
618
635
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')",
|
|
619
636
|
"method": "patch",
|
|
@@ -641,6 +658,41 @@
|
|
|
641
658
|
"skipEncoding": ["address"],
|
|
642
659
|
"llmTip": "Delete cells at the given range, shifting remaining content. Body: { shift: 'Up' } or { shift: 'Left' }. Use 'Up' to delete entire rows."
|
|
643
660
|
},
|
|
661
|
+
{
|
|
662
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/merge",
|
|
663
|
+
"method": "post",
|
|
664
|
+
"toolName": "merge-excel-range",
|
|
665
|
+
"isExcelOp": true,
|
|
666
|
+
"scopes": ["Files.ReadWrite"],
|
|
667
|
+
"skipEncoding": ["address"],
|
|
668
|
+
"llmTip": "Merge the cells in the given range into a single cell. Body: { across: false } merges the entire range into one cell; { across: true } merges each row separately. Useful for building styled headers, banner rows, and report layouts."
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/unmerge",
|
|
672
|
+
"method": "post",
|
|
673
|
+
"toolName": "unmerge-excel-range",
|
|
674
|
+
"isExcelOp": true,
|
|
675
|
+
"scopes": ["Files.ReadWrite"],
|
|
676
|
+
"skipEncoding": ["address"],
|
|
677
|
+
"llmTip": "Unmerge any merged cells within the given range back into individual cells. No request body. Inverse of merge-excel-range."
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/range(address='{address}')/clear",
|
|
681
|
+
"method": "post",
|
|
682
|
+
"toolName": "clear-excel-range",
|
|
683
|
+
"isExcelOp": true,
|
|
684
|
+
"scopes": ["Files.ReadWrite"],
|
|
685
|
+
"skipEncoding": ["address"],
|
|
686
|
+
"llmTip": "Clear cell contents and/or formatting on the given range. Body: { applyTo: 'All' | 'Formats' | 'Contents' }. 'Contents' wipes values but keeps formatting; 'Formats' resets styling but keeps values; 'All' wipes both. Use this to reset a worksheet section before a fresh write rather than overwriting cell-by-cell."
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/worksheets/{workbookWorksheet-id}/usedRange()",
|
|
690
|
+
"method": "get",
|
|
691
|
+
"toolName": "get-excel-used-range",
|
|
692
|
+
"isExcelOp": true,
|
|
693
|
+
"scopes": ["Files.Read"],
|
|
694
|
+
"llmTip": "Get the smallest range that encompasses any cells with values or formatting on the worksheet. Returns address, values, formulas, numberFormat, rowCount, columnCount. Use this to discover the populated bounds of a sheet before reading or appending — avoids guessing how far data extends. Optional $select to trim the response."
|
|
695
|
+
},
|
|
644
696
|
{
|
|
645
697
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/workbook/tables/{workbookTable-id}/rows/itemAt(index={index})",
|
|
646
698
|
"method": "patch",
|
|
@@ -1408,6 +1460,48 @@
|
|
|
1408
1460
|
"workScopes": ["Sites.ReadWrite.All"],
|
|
1409
1461
|
"llmTip": "Deletes a list item permanently. This cannot be undone — the item is moved to the site recycle bin."
|
|
1410
1462
|
},
|
|
1463
|
+
{
|
|
1464
|
+
"pathPattern": "/sites/{site-id}/lists",
|
|
1465
|
+
"method": "post",
|
|
1466
|
+
"toolName": "create-sharepoint-list",
|
|
1467
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1468
|
+
"llmTip": "Creates a new SharePoint list in a site. Body: { displayName: 'My List', description: 'Optional', list: { template: 'genericList' }, columns: [ { name: 'Status', text: {} }, { name: 'Due', dateTime: {} } ] }. Templates include genericList, documentLibrary, tasks, calendar, contacts, links, announcements, survey. Columns can be defined inline at creation; otherwise add them later via create-sharepoint-list-column. Use search-sharepoint-sites or get-sharepoint-site-by-path to find the site ID first."
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
|
|
1472
|
+
"method": "get",
|
|
1473
|
+
"toolName": "list-sharepoint-list-columns",
|
|
1474
|
+
"workScopes": ["Sites.Read.All"],
|
|
1475
|
+
"llmTip": "Lists column definitions for a SharePoint list. Returns each column's id, name, displayName, description, type indicator (text, number, choice, dateTime, person, lookup, boolean, calculated, hyperlinkOrPicture, etc.), required, indexed, hidden, readOnly. Use this to discover the schema before creating or updating list items."
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
|
|
1479
|
+
"method": "post",
|
|
1480
|
+
"toolName": "create-sharepoint-list-column",
|
|
1481
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1482
|
+
"llmTip": "Creates a new column on a SharePoint list. Body must include name and exactly one column type property: { name: 'Priority', text: {} } or { name: 'DueDate', dateTime: { format: 'dateOnly' } } or { name: 'Status', choice: { choices: ['Open','In Progress','Done'] } }. Other types: number, boolean, currency, hyperlinkOrPicture, personOrGroup, lookup, calculated. Optional: displayName, description, required, indexed, enforceUniqueValues."
|
|
1483
|
+
},
|
|
1484
|
+
{
|
|
1485
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1486
|
+
"method": "get",
|
|
1487
|
+
"toolName": "get-sharepoint-list-column",
|
|
1488
|
+
"workScopes": ["Sites.Read.All"],
|
|
1489
|
+
"llmTip": "Gets a specific column definition by ID, including its full type configuration (choices for choice columns, format for dateTime, etc.). Use list-sharepoint-list-columns first to find the column ID."
|
|
1490
|
+
},
|
|
1491
|
+
{
|
|
1492
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1493
|
+
"method": "patch",
|
|
1494
|
+
"toolName": "update-sharepoint-list-column",
|
|
1495
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1496
|
+
"llmTip": "Updates a column definition. Body: { displayName: 'New name', description: 'New description', required: true, ... }. The column type itself (text, choice, etc.) cannot be changed — only its metadata and per-type options (e.g. choices array for a choice column). Send only the fields you want to change."
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
|
|
1500
|
+
"method": "delete",
|
|
1501
|
+
"toolName": "delete-sharepoint-list-column",
|
|
1502
|
+
"workScopes": ["Sites.Manage.All"],
|
|
1503
|
+
"llmTip": "Deletes a column from a SharePoint list. This is irreversible — all data stored in this column across every list item is lost. Confirm with the user before calling. Cannot delete built-in columns (Title, Created, Modified, etc.)."
|
|
1504
|
+
},
|
|
1411
1505
|
{
|
|
1412
1506
|
"pathPattern": "/sites/{site-id}/getByPath(path='{path}')",
|
|
1413
1507
|
"method": "get",
|