Spring til hovedindhold
All Excel tools are read-only and are called via tools/call over POST /excel/mcp. The connector reads Excel workbooks stored in OneDrive for work or school and in SharePoint document libraries through Microsoft Graph, and is connected through OAuth with a Microsoft work or school account (see Connect Excel). Your organization needs access to Excel (a subscription, or a plan that covers it, see What decides access), and your user must hold a seat or plan licence (assigned under Team in the portal, see Team).
Endpoint: https://mcp.consile.ai/excel/mcp. Excel is its own named connector with only its own tools. Tool names are namespaced excel__<tool> (e.g. excel__find_workbooks); the bare names are used below for readability. A bare name in a request returns Unknown tool.The connector is multi-instance: one instance reads through one connected Microsoft user. An administrator adds further connections (agreements, aftaler, in the portal), each served at its own endpoint, e.g. https://mcp.consile.ai/excel-2/mcp, with tools named excel-2__<tool>. Each agreement must be connected with a different Microsoft user.
For an account with access to Excel, tools/list returns the twelve excel__* tools plus the unprefixed system tool connect_account. Without access only connect_account is listed, and the initialize result includes instructions explaining how to get access. A user without a seat still sees the tools, but every call is refused. Every tool has a title and the annotations readOnlyHint: true, destructiveHint: false and openWorldHint: false. A successful result contains the payload twice: as JSON text in content and as the same object in structuredContent. The examples below show that payload.

Authorization and read-only enforcement

The account is connected through Microsoft’s OAuth sign-in. Only work or school accounts can connect; Microsoft refuses a personal Microsoft account. The requested delegated permissions are:
  • https://graph.microsoft.com/Files.Read.All (read the files the user can open)
  • https://graph.microsoft.com/User.Read (the signed-in user’s own profile)
  • offline_access (keeps the connection alive)
Both Graph permissions are read-only, so a token issued on this consent cannot change a cell or a file, not even outside Consile. In addition:
  • The connector has no write tools.
  • Consile sends only read requests to Microsoft Graph.
  • The connect is rejected if Microsoft’s grant does not contain the requested permissions, or contains permissions for a resource other than Microsoft Graph.
Files.Read.All often requires an administrator’s consent in the customer’s Microsoft organization. See If Microsoft asks for an administrator. Access is renewed automatically. Consile never hands the token to the MCP client, and the MCP client’s own token is never forwarded to Microsoft. Workbook contents are fetched live for each call and are not stored by Consile.

Shared conventions

Addressing a workbook

Every tool except find_workbooks reads one workbook, named by these arguments:
string
The drive (OneDrive or SharePoint document library) the workbook lives in. Take it from a find_workbooks result (driveId) or from the SharePoint connector’s list_site_drives. Omit it for the connected user’s own OneDrive.
string
The workbook file’s item id, from find_workbooks (id) or the SharePoint connector.
string
The workbook’s path under the drive root, e.g. Finance/Budget 2026.xlsx. Use it instead of itemId when you know the path. A .. segment is refused.
One of itemId or path is required; with neither, the call returns The workbook must be named by itemId or path. When both are given, itemId wins. The workbook must be an .xlsx or .xlsm file in OneDrive or SharePoint.
string
Worksheet name as shown on the sheet tab, or the worksheet id from list_worksheets. Required on get_used_range, get_range and list_charts, optional on list_tables.
string
Table name or table id from list_tables or get_workbook_overview. Required on get_table_columns and get_table_rows.

Result context

Every result of a workbook-scoped tool echoes driveId ("me" when you left it out) and workbook (the itemId or path you passed), and where it applies the worksheet, table or name that was read. Cell grids (values, text, formulas) are arrays of rows, each row an array of cells. @odata.* annotation keys are removed from every result.

Typical call order

  1. find_workbooks, to get the id and driveId of the file.
  2. get_workbook_overview, to see the sheets, tables and named items.
  3. get_table_rows for data formatted as an Excel table, or get_used_range and then get_range for plain cells.

find_workbooks

Finds Excel workbooks (.xlsx, .xlsm, .xlsb) the connected user can reach. With query it searches one drive by file name and content: the user’s OneDrive when driveId is omitted, or the document library named by driveId. Without query it lists the workbooks among the user’s recently used files across OneDrive and SharePoint. Other file types are filtered out of each page.
string
Search text: a file name or words in the workbook. Omit it for recent files.
string
The drive to search. Only used with query.
integer
standard:"50"
Rows per page, 1 to 500.
string
nextCursor from a previous page of this tool. When set, the other options are ignored. Never construct or edit one.
string
The searched drive ("me" for the user’s OneDrive), or "recent" for the recent files listing.
array
Each item has id (the itemId for the other tools), name, driveId, parentPath (the folder under the drive root, or null when Microsoft does not report it), webUrl, lastModifiedDateTime and size (bytes).
string | null
Token for the next page, or null when the listing is exhausted. Because non-workbook files are filtered out after Microsoft returns a page, count can be lower than pageSize, even 0, while nextCursor is still set.

get_workbook_overview

Orients in a workbook in one call: its worksheets, its tables and its named items. Call it first after find_workbooks. Arguments: driveId, itemId, path (see Addressing a workbook).
object
count and items, each with id, name, position and visibility (Visible, Hidden or VeryHidden, as Excel reports it).
object
count and items, each with id, name, showHeaders, showTotals, style and worksheet (the sheet’s name, or null when it could not be resolved).
object
count and items, each with name, type, value (for a range: the address it points at), visible and comment.

list_worksheets

Lists the worksheets of a workbook: id, name (the tab label), position and visibility. get_workbook_overview returns the same plus tables and names. Arguments: driveId, itemId, path. Result: driveId, workbook, count and items.

get_used_range

Reads the block of cells a worksheet actually uses, as rows of values. Formulas come back as their computed values. An empty sheet answers with the 404 error.
string
påkrævet
integer
standard:"200"
Rows to return from the top of the used range, 1 to 1000.
string
The used range, e.g. Budget!A1:F120.
integer
The full number of rows in the used range, and columnCount the number of columns.
integer
Rows actually returned in values.
boolean
true when the used range has more rows than maxRows. Read the rest with get_range.
array
The cell values, row by row.

get_range

Reads a window of cells by A1 address: the values, the formatted text, and with includeFormulas the formulas.
string
påkrævet
string
påkrævet
A1-style address of the window, e.g. A1:D50, or a single cell such as B2. A window is limited to 1,000 rows by 100 columns per call.
boolean
standard:"false"
Also return the formulas of the cells.
array
The cell values, row by row. text holds the same cells as Excel displays them, and formulas (only with includeFormulas) their formulas.
A window larger than the limit is refused with The range <address> is <rows> rows x <columns> columns; get_range reads at most 1000 rows x 100 columns per call. Read it in windows.

list_tables

Lists the Excel tables of a workbook, or of one worksheet when worksheet is given.
string
Limits the listing to one sheet.
array
Each item has id, name, showHeaders, showTotals, style and worksheet. Here worksheet is null; use get_workbook_overview to see which sheet each table is on.

get_table_columns

Lists the columns of a table in order.
string
påkrævet
array
Each item has id, name (the header) and index.

get_table_rows

Reads the data rows of a table as records keyed by the table’s header row. Formulas come back as their computed values.
string
påkrævet
integer
standard:"100"
Rows per page, 1 to 500.
integer
standard:"0"
Rows to skip. Pass the previous result’s nextSkip.
string[]
The keys used in each row. An empty header becomes column_<n> (its 1-based position), and a repeated header gets a suffix (Amount, Amount_2).
array
Each row has index (the row’s position in the table) and one key per header. rowCount is the number of rows in this page.
integer | null
The skip for the next page, or null when the page came back shorter than pageSize. When the table ends exactly on a page boundary, the next call returns no rows and nextSkip: null.

list_named_items

Lists the workbook’s named items: named ranges (type: "Range", value is the address they point at) and named constants. Arguments: driveId, itemId, path. Result: driveId, workbook, count and items, each with name, type, value, visible and comment.

get_named_item_range

Reads the cells a named range points at. A named constant has its value in list_named_items already and answers an error here.
string
påkrævet
The named item’s name from list_named_items.
Result: driveId, workbook, name, address, rowCount, columnCount and values.

list_charts

Lists the charts on a worksheet.
string
påkrævet
array
Each item has id, name, height, width, top and left, as Excel reports them.

get_chart_image

Renders one chart as a PNG image, fitted to the requested size. The image is returned base64-encoded inside the JSON payload. For the numbers behind a chart, read the sheet’s cells instead.
string
påkrævet
string
påkrævet
Chart name or chart id from list_charts.
integer
standard:"800"
Image width in pixels, 1 to 2000.
integer
standard:"450"
Image height in pixels, 1 to 2000.

connect_account

connect_account is a system tool that the Excel endpoint lists next to the twelve tools. It takes no arguments and its name has no excel__ prefix. It returns { "connect_url": "…", "instructions": "…" }. The user opens connect_url in a browser and is sent to Microsoft to sign in and approve access. The link expires after 10 minutes. It only works for accounts that subscribe to Excel and for users who have accepted Consile’s terms in the portal. Use it to reconnect after the access expired or was removed: completing the link connects the account again with the new Microsoft sign-in.
Request
Replacing an existing connection requires a Consile administrator; for other users the link is refused.

Errors

Tool failures come back as a normal tools/call result with isError: true and one text block, not as a JSON-RPC error. The connector returns explanatory messages for the common failures:

Limits

  • find_workbooks: page size default 50, maximum 500.
  • get_used_range: default 200 rows, maximum 1,000 rows per call.
  • get_range: at most 1,000 rows by 100 columns per call.
  • get_table_rows: page size default 100, maximum 500.
  • get_chart_image: default 800 × 450 pixels, maximum 2,000 × 2,000.
  • Microsoft Graph throttles requests. When a request is throttled, the tool returns the 429 error above.
Requests to the endpoint are also rate-limited per account and connector. When the limit is exceeded you get HTTP 429 (JSON-RPC error -32029, Retry-After: 1) instead of a tool result. See Errors & limits for the current limits and the protocol-level errors shared by all connectors.