{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_gsff7tjbf8e7","handle":"tech-basis1-basis","url":"https://wellknown.network/agents/tech-basis1-basis","links":{"self":"https://wellknown.network/agents/tech-basis1-basis/record.json","html":"https://wellknown.network/agents/tech-basis1-basis","markdown":"https://wellknown.network/agents/tech-basis1-basis/record.md","api":"https://wellknown.network/api/v1/agents/tech-basis1-basis","status":"https://wellknown.network/api/v1/agents/tech-basis1-basis/status","claim":"https://wellknown.network/agents/tech-basis1-basis/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/tech-basis1-basis/claim.json","badge":"https://wellknown.network/agents/tech-basis1-basis/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/tech-basis1-basis/history","tools":"https://wellknown.network/api/v1/agents/tech-basis1-basis/tools"},"ard":{"identifier":"urn:air:api.basis1.tech:server:tech-basis1-basis","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Basis","summary":"Parse Excel workbooks, evaluate formulas, trace dependencies and edit workbook models.","description":"Parse Excel workbooks, evaluate formulas, trace dependencies and edit workbook models.","publisher":{"name":"tech.basis1","url":null},"homepage":"https://basis1.tech","repository":"https://github.com/brandonkrull/basis","version":"0.1.0","license":"Apache-2.0","protocols":["mcp"],"tags":["mcp","model-context-protocol","mcp-server","excel","xlsx","spreadsheet","workbook","formulas","basis"],"pricing":null,"endpoints":[{"url":"https://api.basis1.tech/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@basis1/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-11-04T00:38:31.950753Z","npmKeywords":["mcp","model-context-protocol","mcp-server","excel","xlsx","spreadsheet","workbook","formulas","basis"],"publishedAt":"2026-11-04T00:38:31.950753Z","registryName":"tech.basis1/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","license":"npm","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":1,"provenance":"declared"},{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":1,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"}],"categories":["content","dev","documents"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 1h ago.","lastOkAt":"2026-11-07T05:28:38.401Z","lastProbedAt":"2026-11-07T05:28:38.401Z","statusComputedAt":"2026-11-07T05:32:40.871Z","reliability30d":{"probes":9,"successRate":1,"p50Ms":420,"basis":"mixed","measures":{"availability":"availability (some checks stopped at authentication)","latency":"response time (mixed)","tools":"partially observed","summary":"Some successful checks reached the service and some stopped at an authentication response; figures combine both."},"checks":{"total":9,"ok":9,"authBoundaryOk":5,"serviceOk":4,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-07T05:28:38.401Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":425,"error":null,"detail":{"tools":[{"name":"parse_workbook","description":"Parse an .xlsx workbook in one call and return its full semantic NDJSON: one JSON record per line (workbook_meta, sheet, cell, edge, image, image_summary, audit"},{"name":"submit_job","description":"Start an async parse of an .xlsx workbook and return at once with a job handle {job_id, status: \"processing\", status_url, stream_url}. Use it instead of parse_w"},{"name":"stream_job","description":"Check on or read a parse job started by submit_job. By default it returns the job's NDJSON records once it has completed: the same output parse_workbook returns"},{"name":"diff_workbooks","description":"Compare two .xlsx files cell by cell and return the differences as JSON: {summary, added, removed, changed, format_changed}. Cells are matched on (sheet title, "},{"name":"evaluate_formula","description":"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 work"},{"name":"create_session","description":"Open a workbook in a session that the other workbook tools then use by session_id: the starting point for reading, editing, recalculating and exporting a model."},{"name":"close_session","description":"End a session and discard its workbook: the session_id stops working and the session can't be reopened. Edits not saved with save_to_library (or downloaded with"},{"name":"list_sessions","description":"List the sessions open for this API key, to recover a session_id you've lost or to see how many are open before create_session. Returns {sessions: [{id, documen"},{"name":"add_sheet","description":"Add an empty sheet at the end of a session's workbook and make it the active sheet (the one unqualified refs like \"B4\" point to). Only for sessions created blan"},{"name":"rename_sheet","description":"Rename a sheet in a session's workbook, found by its 0-based index (see the sheets list from create_session or inspect_model). Formulas, named ranges and valida"},{"name":"set_inputs","description":"Write values or formulas into cells of a session and recalculate: the way to run a scenario on a model (\"what if Revenue is 1.2M?\"). Keys are defined names (e.g"},{"name":"set_calc_settings","description":"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, whi"},{"name":"get_outputs","description":"Read computed values from a session by defined name, cell or range: the way to check what a model's formulas return, e.g. after set_inputs. Pass names as define"},{"name":"define_variable","description":"Create a defined name for a cell, or repoint an existing one, so set_inputs and get_outputs can use a readable key (\"Revenue\") instead of a cell ref. A name tha"},{"name":"delete_variable","description":"Delete a defined name from a session's workbook, e.g. one you made with define_variable and no longer need. Only the name goes; the cell it pointed to keeps its"},{"name":"inspect_model","description":"Summarize a session's structure: each sheet's index, name and used rows and columns, every defined name with its target, the iterative-calc settings, and counts"},{"name":"export_workbook","description":"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 "},{"name":"recalc_workbook","description":"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 "},{"name":"get_formula_range","description":"Read the formulas and computed values of one cell or a rectangular range in a session: the way to check what a cell or a block of cells computes. Pass a single "},{"name":"commit_session","description":"Create a named checkpoint of the session's current state, e.g. before a risky edit. Returns {commit_id, message, total_commits}; pass commit_id to restore_sessi"},{"name":"restore_session","description":"Roll a session back to a checkpoint from commit_session: every cell edit made after it is undone, calc settings included, and the workbook is recalculated. Use "},{"name":"trace_dependencies","description":"Follow formula references from one cell in a session, breadth first, up to depth levels (1-5): direction \"precedents\" walks to the cells it reads, \"dependents\" "},{"name":"audit_workbook","description":"Check a session's whole workbook for modeling problems and return a JSON report: broken references, circular references and whether they converge, hardcoded plu"},{"name":"save_to_library","description":"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 ve"},{"name":"list_library_files","description":"List the workbooks in the user's Library: the files this account owns, newest-updated first, including everything save_to_library saved. Use it to find a librar"}],"toolCount":25,"toolsHash":"a068819c7360a8307b33061a2765c2a6ede070c1557875860fc16a46a5337d67","serverName":"basis-mcp","capabilities":["tools"],"serverVersion":"0.0.1","protocolVersion":"2025-06-18"}},{"at":"2026-11-06T20:25:04.102Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":126,"error":null,"detail":{"tools":[{"name":"parse_workbook","description":"Parse an .xlsx workbook and return the full semantic NDJSON output (workbook_meta, sheet, cell, edge, image, image_summary, audit records)."},{"name":"submit_job","description":"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."},{"name":"get_job_status","description":"Check the status of a parse job submitted via submit_job."},{"name":"stream_job","description":"Fetch the NDJSON output of a completed parse job. Pass `since` to resume from a record index."},{"name":"diff_workbooks","description":"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 c"},{"name":"evaluate_formula","description":"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 work"},{"name":"create_session","description":"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 om"},{"name":"close_session","description":"Close a computation session and release its resources."},{"name":"list_sessions","description":"List all active computation sessions for the current user."},{"name":"add_sheet","description":"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)."},{"name":"rename_sheet","description":"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. "},{"name":"set_inputs","description":"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 \"=\""},{"name":"set_calc_settings","description":"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, whi"},{"name":"get_outputs","description":"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!"},{"name":"define_variable","description":"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."},{"name":"inspect_model","description":"Inspect a session's model structure: sheets, defined names, cell/formula counts, and optionally the full dependency edge graph."},{"name":"snapshot_session","description":"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 err"},{"name":"export_workbook","description":"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 "},{"name":"recalc_workbook","description":"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 "},{"name":"get_formula_range","description":"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, v"},{"name":"commit_session","description":"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 ses"},{"name":"restore_session","description":"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."},{"name":"get_cell_formula","description":"Return the formula text and computed value for a single cell. If the cell has no formula (constant or empty), formula will be null."},{"name":"trace_dependencies","description":"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"},{"name":"audit_workbook","description":"Run a structural audit on the session's workbook. Returns formula errors, broken references, circular dependencies, hardcoded plugs, and verification mismatches"},{"name":"save_to_library","description":"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 ve"}],"toolCount":26,"toolsHash":"7b68f01843e01576e38ba7aab668b3c70b9df8e969c30999088aa01dadc5102b","serverName":"basis-mcp","capabilities":["tools"],"serverVersion":"0.0.1","protocolVersion":"2025-06-18"}},{"at":"2026-11-06T11:29:59.122Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":136,"error":null,"detail":{"tools":[{"name":"parse_workbook","description":"Parse an .xlsx workbook and return the full semantic NDJSON output (workbook_meta, sheet, cell, edge, image, image_summary, audit records)."},{"name":"submit_job","description":"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."},{"name":"get_job_status","description":"Check the status of a parse job submitted via submit_job."},{"name":"stream_job","description":"Fetch the NDJSON output of a completed parse job. Pass `since` to resume from a record index."},{"name":"diff_workbooks","description":"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 c"},{"name":"evaluate_formula","description":"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 work"},{"name":"create_session","description":"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 om"},{"name":"close_session","description":"Close a computation session and release its resources."},{"name":"list_sessions","description":"List all active computation sessions for the current user."},{"name":"add_sheet","description":"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)."},{"name":"rename_sheet","description":"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. "},{"name":"set_inputs","description":"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 \"=\""},{"name":"set_calc_settings","description":"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, whi"},{"name":"get_outputs","description":"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!"},{"name":"define_variable","description":"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."},{"name":"inspect_model","description":"Inspect a session's model structure: sheets, defined names, cell/formula counts, and optionally the full dependency edge graph."},{"name":"snapshot_session","description":"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 err"},{"name":"export_workbook","description":"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 "},{"name":"recalc_workbook","description":"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 "},{"name":"get_formula_range","description":"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, v"},{"name":"commit_session","description":"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 ses"},{"name":"restore_session","description":"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."},{"name":"get_cell_formula","description":"Return the formula text and computed value for a single cell. If the cell has no formula (constant or empty), formula will be null."},{"name":"trace_dependencies","description":"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"},{"name":"audit_workbook","description":"Run a structural audit on the session's workbook. Returns formula errors, broken references, circular dependencies, hardcoded plugs, and verification mismatches"},{"name":"save_to_library","description":"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 ve"}],"toolCount":26,"toolsHash":"7b68f01843e01576e38ba7aab668b3c70b9df8e969c30999088aa01dadc5102b","serverName":"basis-mcp","capabilities":["tools"],"serverVersion":"0.0.1","protocolVersion":"2025-06-18"}},{"at":"2026-11-06T02:28:53.959Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":124,"error":null,"detail":{"tools":[{"name":"parse_workbook","description":"Parse an .xlsx workbook and return the full semantic NDJSON output (workbook_meta, sheet, cell, edge, image, image_summary, audit records)."},{"name":"submit_job","description":"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."},{"name":"get_job_status","description":"Check the status of a parse job submitted via submit_job."},{"name":"stream_job","description":"Fetch the NDJSON output of a completed parse job. Pass `since` to resume from a record index."},{"name":"diff_workbooks","description":"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 c"},{"name":"evaluate_formula","description":"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 work"},{"name":"create_session","description":"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 om"},{"name":"close_session","description":"Close a computation session and release its resources."},{"name":"list_sessions","description":"List all active computation sessions for the current user."},{"name":"add_sheet","description":"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)."},{"name":"rename_sheet","description":"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. "},{"name":"set_inputs","description":"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 \"=\""},{"name":"set_calc_settings","description":"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, whi"},{"name":"get_outputs","description":"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!"},{"name":"define_variable","description":"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."},{"name":"inspect_model","description":"Inspect a session's model structure: sheets, defined names, cell/formula counts, and optionally the full dependency edge graph."},{"name":"snapshot_session","description":"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 err"},{"name":"export_workbook","description":"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 "},{"name":"recalc_workbook","description":"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 "},{"name":"get_formula_range","description":"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, v"},{"name":"commit_session","description":"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 ses"},{"name":"restore_session","description":"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."},{"name":"get_cell_formula","description":"Return the formula text and computed value for a single cell. If the cell has no formula (constant or empty), formula will be null."},{"name":"trace_dependencies","description":"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"},{"name":"audit_workbook","description":"Run a structural audit on the session's workbook. Returns formula errors, broken references, circular dependencies, hardcoded plugs, and verification mismatches"},{"name":"save_to_library","description":"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 ve"}],"toolCount":26,"toolsHash":"7b68f01843e01576e38ba7aab668b3c70b9df8e969c30999088aa01dadc5102b","serverName":"basis-mcp","capabilities":["tools"],"serverVersion":"0.0.1","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T17:27:29.623Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":426,"error":null,"detail":{"authRequired":true}},{"at":"2026-11-05T09:27:29.602Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":415,"error":null,"detail":{"authRequired":true}},{"at":"2026-11-05T01:26:51.551Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":444,"error":null,"detail":{"authRequired":true}},{"at":"2026-11-04T16:22:51.819Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":420,"error":null,"detail":{"authRequired":true}},{"at":"2026-11-04T07:26:20.919Z","kind":"mcp_initialize","ok":true,"httpStatus":401,"latencyMs":455,"error":null,"detail":{"authRequired":true}}],"tools":[{"name":"parse_workbook","description":"Parse an .xlsx workbook in one call and return its full semantic NDJSON: one JSON record per line (workbook_meta, sheet, cell, edge, image, image_summary, audit"},{"name":"submit_job","description":"Start an async parse of an .xlsx workbook and return at once with a job handle {job_id, status: \"processing\", status_url, stream_url}. Use it instead of parse_w"},{"name":"stream_job","description":"Check on or read a parse job started by submit_job. By default it returns the job's NDJSON records once it has completed: the same output parse_workbook returns"},{"name":"diff_workbooks","description":"Compare two .xlsx files cell by cell and return the differences as JSON: {summary, added, removed, changed, format_changed}. Cells are matched on (sheet title, "},{"name":"evaluate_formula","description":"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 work"},{"name":"create_session","description":"Open a workbook in a session that the other workbook tools then use by session_id: the starting point for reading, editing, recalculating and exporting a model."},{"name":"close_session","description":"End a session and discard its workbook: the session_id stops working and the session can't be reopened. Edits not saved with save_to_library (or downloaded with"},{"name":"list_sessions","description":"List the sessions open for this API key, to recover a session_id you've lost or to see how many are open before create_session. Returns {sessions: [{id, documen"},{"name":"add_sheet","description":"Add an empty sheet at the end of a session's workbook and make it the active sheet (the one unqualified refs like \"B4\" point to). Only for sessions created blan"},{"name":"rename_sheet","description":"Rename a sheet in a session's workbook, found by its 0-based index (see the sheets list from create_session or inspect_model). Formulas, named ranges and valida"},{"name":"set_inputs","description":"Write values or formulas into cells of a session and recalculate: the way to run a scenario on a model (\"what if Revenue is 1.2M?\"). Keys are defined names (e.g"},{"name":"set_calc_settings","description":"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, whi"},{"name":"get_outputs","description":"Read computed values from a session by defined name, cell or range: the way to check what a model's formulas return, e.g. after set_inputs. Pass names as define"},{"name":"define_variable","description":"Create a defined name for a cell, or repoint an existing one, so set_inputs and get_outputs can use a readable key (\"Revenue\") instead of a cell ref. A name tha"},{"name":"delete_variable","description":"Delete a defined name from a session's workbook, e.g. one you made with define_variable and no longer need. Only the name goes; the cell it pointed to keeps its"},{"name":"inspect_model","description":"Summarize a session's structure: each sheet's index, name and used rows and columns, every defined name with its target, the iterative-calc settings, and counts"},{"name":"export_workbook","description":"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 "},{"name":"recalc_workbook","description":"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 "},{"name":"get_formula_range","description":"Read the formulas and computed values of one cell or a rectangular range in a session: the way to check what a cell or a block of cells computes. Pass a single "},{"name":"commit_session","description":"Create a named checkpoint of the session's current state, e.g. before a risky edit. Returns {commit_id, message, total_commits}; pass commit_id to restore_sessi"},{"name":"restore_session","description":"Roll a session back to a checkpoint from commit_session: every cell edit made after it is undone, calc settings included, and the workbook is recalculated. Use "},{"name":"trace_dependencies","description":"Follow formula references from one cell in a session, breadth first, up to depth levels (1-5): direction \"precedents\" walks to the cells it reads, \"dependents\" "},{"name":"audit_workbook","description":"Check a session's whole workbook for modeling problems and return a JSON report: broken references, circular references and whether they converge, hardcoded plu"},{"name":"save_to_library","description":"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 ve"},{"name":"list_library_files","description":"List the workbooks in the user's Library: the files this account owns, newest-updated first, including everything save_to_library saved. Use it to find a librar"}],"package":{"name":"@basis1/mcp","registry":"npm","observedAt":"2026-11-07T05:34:29.267Z","publishedAt":"2026-11-07T02:39:43.804Z","latestVersion":"0.3.0","weeklyDownloads":870},"toolSurface":{"id":"ts_vh44um899g3p","endpointId":"ep_x87rxhm9em7z","hash":"a068819c7360a8307b33061a2765c2a6ede070c1557875860fc16a46a5337d67","toolCount":25,"serverName":"basis-mcp","serverVersion":"0.0.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-07T05:28:38.411Z","lastSeenAt":"2026-11-07T05:28:38.411Z","observations":1,"hiddenText":{"level":"none","total":0,"tools":0,"kinds":[],"findings":[]},"toolNames":["parse_workbook","submit_job","stream_job","diff_workbooks","evaluate_formula","create_session","close_session","list_sessions","add_sheet","rename_sheet","set_inputs","set_calc_settings","get_outputs","define_variable","delete_variable","inspect_model","export_workbook","recalc_workbook","get_formula_range","commit_session","restore_session","trace_dependencies","audit_workbook","save_to_library","list_library_files"],"distinctSurfaces":2,"surfacesWithHiddenText":0},"endpointFacts":[{"id":"ep_x87rxhm9em7z","url":"https://api.basis1.tech/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-11-06T20:25:04.219Z","auth":{"observedAt":"2026-11-06T20:25:04.636Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-11-06T20:25:04.655Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"api.basis1.tech","issuer":{"commonName":"WR3","organization":"Google Trust Services"},"validFrom":"2026-10-30T04:37:16.000Z","validTo":"2027-01-28T05:31:30.000Z","daysToExpiry":81,"sanCount":1,"fingerprint256":"B4:D0:71:EF:C6:48:0F:5B:CE:24:A4:E0:A3:89:AE:30:38:CC:C8:53:2C:5A:10:B6:64:E8:C7:EE:06:5A:6B:50"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"tech.basis1/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/tech.basis1%2Fmcp","firstSeenAt":"2026-11-04T05:19:10.421Z","fetchedAt":"2026-11-04T05:19:10.421Z","normalizedAt":"2026-11-04T05:19:10.421Z"},{"source":"npm","key":"@basis1/mcp","url":"https://www.npmjs.com/package/@basis1/mcp","firstSeenAt":"2026-11-06T06:21:38.619Z","fetchedAt":"2026-11-07T03:20:12.244Z","normalizedAt":"2026-11-07T03:20:12.244Z"}]},"firstSeenAt":"2026-11-04T05:19:10.421Z","updatedAt":"2026-11-07T05:34:29.267Z"}