Basis MCP server
tech.basis1/mcpbasis1.techstreamable-httpv0.2.1Scanned
The Excel engine for AI agents: read, check and edit Excel models over MCP.
26 tools: 16 change things and 10 only read.
- Reads private data · 2
- Reads text others write · 0
- Can send data out · 4
- No findings
Sign-in required, no OAuth metadata. Remote posture
With Anlyon
16 tools here change things. Govern them.
- Anlyon lists the tools and adopts none.
- Each tool you adopt gets approvals and receipts.
- Your agent never holds the key.
A tool your agent calls directly is not routed through Anlyon and is not governed by it. anlyon.dev only lists and labels, and these labels are the same either way.
What the Basis MCP server can do
The Basis MCP server is published by basis1.tech, a domain the MCP Registry verified. It has 26 tools. It can create or change data (16 tools: parse_workbook, submit_job, evaluate_formula, create_session and 12 more), but cannot delete data. 10 tools only read.
2 tools read private data (export_workbook and get_formula_range); 4 tools can send data out of your system (parse_workbook, submit_job, create_session and 1 more).
None of the fixed checks matched anything in its tool definitions. That is not a safety guarantee.
Its remote endpoint asks for sign-in.
Last scanned Nov 5, 2026, version 0.2.1.
Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
26 tools
Changes things 16Claude Code: ask
add_sheetAdd a new sheet to a session's workbook.No findings
Why it is in this group
- The name "add_sheet" says "add": a word for a change.
Description, as the server wrote it Add a new sheet to a session's workbook. The new sheet becomes the active sheet. Only works on sessions created from blank documents (not imported xlsx files).
audit_workbookRun a structural audit on the session's workbook.No findings
Why it is in this group
- The description's first verb is "run": a word for a change.
Description, as the server wrote it Run a structural audit on the session's workbook. Returns formula errors, broken references, circular dependencies, hardcoded plugs, and verification mismatches.
close_sessionClose a computation session and release its resources.No findings
Why it is in this group
- The name "close_session" says "close": a word for a change.
Description, as the server wrote it Close a computation session and release its resources.
commit_sessionCreate a named checkpoint of the session's current state.No findings
Why it is in this group
- The name "commit_session" says "commit": a word for a change.
Description, as the server wrote it Create a named checkpoint of the session's current state. Returns the commit ID which can be passed to restore_session to roll back. Checkpoints live in the session only; to keep one in the Library's version history, call save_to_library after it (the version takes this message as its name).
create_sessionCreate a persistent computation session for a workbook.Can send data outNo findings
Why it is in this group
- The name "create_session" says "create": a word for a change.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Create a persistent computation session for a workbook. Pass library_file_id to load from the Library, base64 for raw xlsx bytes, url to fetch from a URL, or omit all for a blank model. Returns a session_id for subsequent calls. The workbook is recalculated on load, including formulas written by other tools that carry no cached values, so open a file you have edited to read back what its formulas compute (get_outputs, get_formula_range), or change inputs with set_inputs.
define_variableCreate or retarget a named variable in the session's workbook.No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
Description, as the server wrote it Create or retarget a named variable in the session's workbook. The name can then be used in set_inputs and get_outputs instead of cell references.
evaluate_formulaEvaluate an Excel formula locally and return the computed result: a quick way to check what a formula returns on a few sample values before you put it in a workbook.No findings
Why it is in this group
- The name "evaluate_formula" says "evaluate": a word for a change.
Description, as the server wrote it Evaluate an Excel formula locally and return the computed result: a quick way to check what a formula returns on a few sample values before you put it in a workbook. Pass data as a map of cell references to values (e.g. {"A1": 100, "A2": 200, "B1": "hello"}) and a formula string (e.g. "SUM(A1:A2)"). The formula is placed in row 1 of the first column right of your data, so don't reference that cell. A formula that evaluates to an Excel error returns type "error" with the code (#VALUE!, #N/A…) as a normal result; a formula that can't be parsed or uses an unsupported function is a tool error. Supports 278 Excel functions: math, financial (NPV, IRR, XIRR, PMT…), statistical, lookup, date/time, text, logical, and dynamic arrays (FILTER, SORT, UNIQUE, SEQUENCE…). Array expressions evaluate element by element inside SUMPRODUCT, LOOKUP, AGGREGATE, SMALL/LARGE, MATCH and INDEX. To check formulas that already live in a workbook, use create_session instead.
parse_workbookParse an .xlsx workbook and return the full semantic NDJSON output (workbook_meta, sheet, cell, edge, image, image_summary, audit records).Can send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Parse an .xlsx workbook and return the full semantic NDJSON output (workbook_meta, sheet, cell, edge, image, image_summary, audit records).
recalc_workbookRecalculate an .xlsx file and return it with the computed values saved in every formula cell.Can send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Recalculate an .xlsx file and return it with the computed values saved in every formula cell. Use this after you create or edit a workbook with openpyxl or any other library that writes formulas without results: those files have no cached values, so pandas, openpyxl (data_only=True) and other readers see empty cells until the file is recalculated. Replaces running LibreOffice recalc.py. Returns file_base64 plus a summary of formula errors (#REF!, #DIV/0!, #NAME?, #VALUE!... with sheet and cell) and of formulas Basis could not compute: fix those and call again. Styles, charts, images, data validation, defined names, comments and VBA are carried over unchanged. Pass exactly one of url or base64.
rename_sheetRename a sheet in a session's workbook.No findings
Why it is in this group
- The name "rename_sheet" says "rename": a word for a change.
Description, as the server wrote it Rename a sheet in a session's workbook. Formulas, named ranges and validations that reference the sheet are rewritten to the new name, so results don't change. Excel's rules apply: 1-31 characters, none of : \ / ? * [ ], no leading or trailing apostrophe, unique ignoring case.
restore_sessionRoll back a session to a previous commit.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Roll back a session to a previous commit. Reverts all cell changes made since that commit. Returns the number of cells that were changed by the rollback.
save_to_librarySave the session's workbook to the user's Library for durable storage.No findings
Why it is in this group
- The name "save_to_library" says "save": a word for a change.
Description, as the server wrote it Save the session's workbook to the user's Library for durable storage. If the session was loaded from the Library or was previously saved, this creates a new version of that file. Otherwise it creates a new Library file. Returns the library_file_id. Each save is a named version in the Library's history: pass `message`, or it takes the latest commit_session message since the last save. commit_session checkpoints themselves stay in the session, so save after each step you want kept as a version.
set_calc_settingsTurn iterative calculation on or off for a session and recalculate.No findings
Why it is in this group
- The name "set_calc_settings" says "set": a word for a change.
Description, as the server wrote it Turn iterative calculation on or off for a session and recalculate. Needed for circular models (e.g. development pro formas where loan size depends on cost, which includes the loan's interest and fees): with it on, set_inputs re-converges the loop on every call. Saved with the session's next commit (restore_session to an earlier commit rolls it back) and written to the workbook, so an exported xlsx iterates in Excel too.
set_inputsSet one or more cells in a session and recalculate.No findings
Why it is in this group
- The name "set_inputs" says "set": a word for a change.
Description, as the server wrote it Set one or more cells in a session and recalculate. Keys can be defined names (e.g. "Revenue") or cell references (e.g. "Sheet1!A1"). A string starting with "=" is stored as a formula, so you can also try a formula in place and read the result with get_outputs. Returns the applied changes and which named outputs changed (effects).
submit_jobSubmit an .xlsx workbook for async parsing and get back a job handle (job_id, status_url, stream_url) without waiting for it to finish.Can send data outNo findings
Why it is in this group
- The name "submit_job" says "submit": a word for a change.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Submit an .xlsx workbook for async parsing and get back a job handle (job_id, status_url, stream_url) without waiting for it to finish.
trace_dependenciesTrace the dependency graph from a cell.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Trace the dependency graph from a cell. direction="precedents" shows what feeds into this cell; direction="dependents" shows what this cell feeds. Returns a BFS traversal up to the given depth with formula text and computed value at each node.
Only reads 10Show 10 read-only tools
diff_workbooksCompare two .xlsx workbooks and return the cell-level differences as JSON.No findings
Why it is in this group
- The name "diff_workbooks" says "diff": a word for reading.
Description, as the server wrote it Compare two .xlsx workbooks and return the cell-level differences as JSON. Cells are joined on (sheet title, cell ref) and classified into added, removed, and changed (value and/or formula), with format-only changes bucketed separately. Provide exactly one of before_url/before_base64 and one of after_url/after_base64.
export_workbookGet a session's workbook back as an .xlsx file with every formula's computed value saved in it.Reads private dataNo findings
Why it is in this group
- The description's first verb is "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "get" and "file": it reads files.
Description, as the server wrote it Get a session's workbook back as an .xlsx file with every formula's computed value saved in it. Recalculates first. Call this when you need the file itself: to give it to the user, or to read it with pandas, openpyxl (data_only=True) or any tool that is not Excel. Returns file_base64 and a summary of formula errors (#REF!, #DIV/0!, #NAME? with sheet and cell) and of anything that did not survive the save. Everything Basis does not model (styles, charts, images, data validation, defined names, comments, VBA) is carried over from the original file unchanged.
get_cell_formulaReturn the formula text and computed value for a single cell.No findings
Why it is in this group
- The name "get_cell_formula" says "get": a word for reading.
Description, as the server wrote it Return the formula text and computed value for a single cell. If the cell has no formula (constant or empty), formula will be null.
get_formula_rangeBatch-read formulas and computed values for a rectangular range of cells: the way to check what the formulas in a file compute.Reads private dataNo findings
Why it is in this group
- The name "get_formula_range" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "file": it reads files.
Description, as the server wrote it Batch-read formulas and computed values for a rectangular range of cells: the way to check what the formulas in a file compute. Returns {cell, formula, value, value_type} per cell; a formula that errors has value_type "error". Much more efficient than calling get_cell_formula repeatedly.
get_job_statusCheck the status of a parse job submitted via submit_job.No findings
Why it is in this group
- The name "get_job_status" says "get": a word for reading.
Description, as the server wrote it Check the status of a parse job submitted via submit_job.
get_outputsRead computed values from a session, e.g.No findings
Why it is in this group
- The name "get_outputs" says "get": a word for reading.
Description, as the server wrote it Read computed values from a session, e.g. to check what the formulas in a workbook return. Pass defined names, cell refs ("B4", "Sheet1!B4") or ranges ("Sheet1!H2:H18", one entry per cell), or omit to read all defined names. A cell that evaluates to an Excel error is returned with type "error", not as a tool failure.
inspect_modelInspect a session's model structure: sheets, defined names, cell/formula counts, and optionally the full dependency edge graph.No findings
Why it is in this group
- The name "inspect_model" says "inspect": a word for reading.
Description, as the server wrote it Inspect a session's model structure: sheets, defined names, cell/formula counts, and optionally the full dependency edge graph.
list_sessionsList all active computation sessions for the current user.No findings
Why it is in this group
- The name "list_sessions" says "list": a word for reading.
Description, as the server wrote it List all active computation sessions for the current user.
snapshot_sessionExport the session's current state as xlsx bytes (base64).No findings
Why it is in this group
- The name "snapshot_session" says "snapshot": a word for reading.
Description, as the server wrote it Export the session's current state as xlsx bytes (base64). Optionally creates a commit first. To get the file for a user or a non-Excel reader, with formula errors listed, prefer export_workbook.
stream_jobFetch the NDJSON output of a completed parse job.No findings
Why it is in this group
- The description's first verb is "fetch": a word for reading.
Description, as the server wrote it Fetch the NDJSON output of a completed parse job. Pass `since` to resume from a record index.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged untrusted-input.
- Reads private data2
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write0
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out4
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Nov 4, 2026, 02:20 UTC, unchanged since Nov 4, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 401
- tools/list served without credentials
- no
- Tools that change things, listed without credentials
- 0
- Protocol version
- not observed
- WWW-Authenticate on 401
- no
- resource_metadata in WWW-Authenticate
- not observed
- RFC 9728 protected resource metadata
- not observed
- Authorization servers
- not observed
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- not observed
- Client ID metadata documents
- not observed
- WarnThe whole server
The endpoint asks for credentials (HTTP 401) but publishes no RFC 9728 protected resource metadata: no resource_metadata in WWW-Authenticate and no document at /.well-known/oauth-protected-resource.
What this check looks forMatched text
https://api.basis1.tech/mcp: initialize answered HTTP 401, without a WWW-Authenticate header
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.2.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http basis1 https://api.basis1.tech/mcp --header 'Authorization: <your-authorization>'claude mcp add --transport http basis1 https://api.basis1.tech/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__basis1__get_job_status",
"mcp__basis1__stream_job",
"mcp__basis1__diff_workbooks",
"mcp__basis1__list_sessions",
"mcp__basis1__get_outputs",
"mcp__basis1__inspect_model",
"mcp__basis1__snapshot_session",
"mcp__basis1__export_workbook",
"mcp__basis1__get_formula_range",
"mcp__basis1__get_cell_formula"
],
"ask": [
"mcp__basis1__parse_workbook",
"mcp__basis1__submit_job",
"mcp__basis1__evaluate_formula",
"mcp__basis1__create_session",
"mcp__basis1__close_session",
"mcp__basis1__add_sheet",
"mcp__basis1__rename_sheet",
"mcp__basis1__set_inputs",
"mcp__basis1__set_calc_settings",
"mcp__basis1__define_variable",
"mcp__basis1__recalc_workbook",
"mcp__basis1__commit_session",
"mcp__basis1__restore_session",
"mcp__basis1__trace_dependencies",
"mcp__basis1__audit_workbook",
"mcp__basis1__save_to_library"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as basis1. Review it before you use it.
Capability tags behind 6 rules
- mcp__basis1__parse_workbook outbound
- mcp__basis1__submit_job outbound
- mcp__basis1__create_session outbound
- mcp__basis1__export_workbook private-data
- mcp__basis1__recalc_workbook outbound
- mcp__basis1__get_formula_range private-data
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/tech.basis1/mcp/verify?hash=9c5f2d22ce446d7979c37db2c92a48a43f32a4cc566a132582beebc01918d626" | jq -e '.changed == false'Pinned hash 9c5f2d22ce44, from Nov 5, 2026, 18:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/tech.basis1/mcp/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/tech.basis1/mcp)Source: MCP Registry · repository. Synced Nov 5, 2026, 18:18 UTC.
Basis MCP server: questions and answers
Answered from the scan above, not from the publisher's description.
Is the Basis MCP server safe?
- No scan can promise that. What its definitions show: 26 tools, 16 of which can change, send or delete something, and 0 findings from fixed checks. Allow the reads, ask before each change, and deny the deletes; the permissions block on this page does that.
Can the Basis MCP server delete data?
- No tool is classed as destructive: going by their definitions, none of them deletes, cancels or revokes anything.
Can the Basis MCP server do things that cannot be undone?
- No tool is classed as irreversible: none of them sends, pays, publishes or merges, going by their definitions.
What tools does the Basis MCP server have?
- 26 tools: 16 write, 10 read. parse_workbook, submit_job, evaluate_formula, create_session, close_session, add_sheet, rename_sheet, set_inputs and 18 more.
Does the Basis MCP server need sign-in or OAuth?
- Yes. Its remote endpoint answered 401 without credentials, and no OAuth protected resource metadata was found.
Does the Basis MCP server send data to outside services?
- 4 tools can carry data out (it sends, posts or publishes, or takes a recipient, channel or URL): parse_workbook, submit_job, create_session and recalc_workbook.
Has the Basis MCP server changed its tools?
- Not since anlyon.dev started tracking it. Last scanned Nov 5, 2026.