Bilig WorkPaper
Bilig WorkPaper is an MCP server for discovering, reading, editing, recalculating, verifying, and exporting a headless WorkPaper/JSON workbook without Excel or a browser grid.
Discover sheet names, IDs, used dimensions, writability, and source path.
Read A1 ranges or single cells, returning calculated values plus serialized raw contents/formulas.
Get the formatted display string a user would see for one cell.
Set one cell’s literal or formula content, recalculate dependents, persist the JSON atomically when writable, and return before/after/restored readback checks.
Export the current WorkPaper JSON document for review, persistence, or agent handoff.
Validate formula syntax before writing it to a cell.
Support verified mutation workflows with persistence and restore-match evidence.
Run locally against a specified private WorkPaper file; hosted use is request-local and intended for stateless discovery/smoke tests.
Provides tools for integrating spreadsheet formula evaluation into LangChain agents, enabling agent tool-calling for workbook operations such as reading and writing cells.
Enables serverless API routes that use headless spreadsheet formulas, with integration examples for Vercel AI SDK and serverless deployment.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
Bilig
Keep the workbook model. Run the rule in Node.
Bilig is a TypeScript-native, headless WorkPaper runtime for Node.js services, tests, and AI agents. Set inputs, recalculate formulas, read computed outputs, persist WorkPaper JSON, restore it, and verify the result—without driving Excel or a browser grid.
Docs · Quick start · TypeScript API · MCP · Examples · Discussions
Bilig is a headless workbook runtime, not a visual spreadsheet app or a claim
of full Excel compatibility. If an.xlsx file is your contract, start with
the compatibility report.
Quick Start
Node runtime
Prove the published package before installing it:
npm exec --yes --package @bilig/workpaper@latest -- bilig-evaluate --door workpaper-service --jsonThe evaluator edits Inputs!B2, recalculates Summary!B2, saves the WorkPaper,
restores it, and compares the restored value:
{
"schemaVersion": "bilig-evaluator.v1",
"door": "workpaper-service",
"evidence": {
"editedCell": "Inputs!B2",
"dependentCell": "Summary!B2",
"before": 24000,
"after": 38400,
"afterRestore": 38400
},
"verified": true
}verified: true means the write, formula readback, JSON export, and restored
readback all passed. It is stronger evidence than a successful write call.
Related MCP server: animus-document-engine
Use It From TypeScript
npm install @bilig/workpaperimport { buildA1WorkPaper } from '@bilig/workpaper'
const pricing = buildA1WorkPaper({
Inputs: [
['Metric', 'Value'],
['Units', 20],
['Price', 1200],
],
Summary: [
['Metric', 'Value'],
['Revenue', '=Inputs!B2*Inputs!B3'],
],
})
const proof = pricing.editAndReadback('Inputs!B2', 32, {
readbackRange: 'Summary!B2',
})
console.log(proof.afterReadback.displayValues[0]?.[0]) // 38400
console.log(proof.verified) // true
pricing.dispose()For ordinary operations, use set(), setMany(), readMany(), display(),
and saveJson(). Use editManyAndReadback() when multiple inputs must be
committed and verified as one edit. The complete public API is documented in
packages/workpaper/README.md.
The lifecycle is deliberately small:
inputs → formula recalculation → typed readback → JSON persistence → restore verification
Why Bilig
Capability | What it gives you |
Workbook-shaped models | Sheets, A1 addresses, formulas, ranges, and named expressions without a spreadsheet UI. |
Verified mutations | Before/after computed values plus persistence and restore checks. |
Service-owned state | Portable WorkPaper JSON for routes, queues, tests, tools, and audit trails. |
Agent-safe tools | Narrow read/write tools with exact cells, computed readback, and writable-sheet boundaries. |
Explicit file boundaries | Separate XLSX import, export, risk inspection, and Excel-oracle workflows. |
Use Bilig for pricing, quote approval, payouts, forecasts, validation rules, formula-backed workflows, and tests where a service or tool should own the model. Choose a spreadsheet application or hosted spreadsheet API when you need visual editing, collaboration, macros, interactive pivots or charts, or desktop fidelity.
Agents And MCP
Agents should first ask which system owns state, then run the smallest matching proof. For a tool host or MCP client:
npm exec --yes --package @bilig/workpaper@latest -- bilig-agent-start --json
npm exec --yes --package @bilig/workpaper@latest -- bilig-evaluate --door agent-mcp --jsonThe MCP evaluator proves tool discovery, mutation, recalculated readback, JSON export, disk persistence, process restart, and restored readback. For a local, writable WorkPaper:
npm exec --yes --package @bilig/workpaper@latest -- bilig-workpaper-mcp --workpaper ./pricing.workpaper.json --init-demo-workpaper --writableUse that local stdio path for private or persistent project state. The hosted
https://bilig.proompteng.ai/mcp endpoint is request-local and only intended
for stateless connector discovery and smoke tests; do not send private workbook
data to it.
The server exposes list_sheets, read_range, read_cell,
set_cell_contents, set_cell_contents_and_readback,
get_cell_display_value, export_workpaper_document, and validate_formula.
It also publishes MCP resources and prompts so capable hosts can discover the
workflow before editing cells.
Machine-readable entry points:
Need | Entry point |
A compact routing card | |
A concise model index | |
Full agent documentation | |
Installation context | |
Structured capabilities | |
Reusable skill | |
Proof and host matrix |
The published package also carries AGENTS.md and SKILL.md, so an agent can
discover the same proof contract from node_modules. Install or inspect the
public skill with either source:
npx --yes skills@latest add https://bilig.proompteng.ai --list
npx --yes skills@latest add proompteng/bilig --skill bilig-workpaper --listUse the agent rule chooser or the
host handoff prompt.
The repository includes CLAUDE.md,
.claude/skills/bilig-workpaper/SKILL.md,
.claude/commands/bilig-workpaper-proof.md,
.cursor/rules/bilig-workpaper.mdc, .devin/rules/bilig-workpaper.md,
.windsurf/rules/bilig-workpaper.md, .clinerules/bilig-workpaper.md,
.continue/rules/bilig-workpaper.md, .zed/settings.json, opencode.jsonc,
and .opencode/agents/bilig-workpaper.md.
Integration Recipes After The Proof
Run an evaluator first, then use the recipe owned by your host:
OpenAI Agents SDK: direct tools,
MCPServerStdio, andMCPServerStreamableHttp.OpenAI Responses API: function-call readback with explicit before/after evidence.
Vercel AI SDK:
generateText()andstreamText()tool loops.Open WebUI: local or hosted MCP discovery.
n8n: the
@bilig/n8n-nodes-workpapercommunity node.
Choose An Evaluation Path
Your state owner | Start here | Evidence to require |
TypeScript application |
| direct A1 API and focused application tests |
Node service, route, queue, or test |
| edit, recalculation, JSON export, restore, |
MCP client or tool host |
| discovery, readback, disk persistence, restart |
Imported |
| unsupported formulas and workbook risk reasons for that file |
Cached |
| stale-cache diagnosis, recalculation, and readback for that file |
The workbook-compatibility and xlsx-cache evaluator doors use bundled demo
workbooks to smoke-test the published package; they do not inspect your file.
Do not treat any evaluator as proof of desktop Excel parity.
Examples And Deeper Guides
Start with one maintained example, not the whole monorepo:
examples/headless-workpaper: pricing, invoice, budget, fulfillment, subscription, persistence, and agent examples.examples/serverless-workpaper-api: quote approval through Hono, Next.js, and persistence adapters.examples/xlsx-recalculation-node: import, recalculate, export, reimport, and verify an XLSX workbook.examples/recalc-bridge-workflows: focused bridges for existing SheetJS, xlsx-populate, and ExcelJS workflows.
Useful decision guides:
pnpm --dir examples/headless-workpaper run agent:ai-sdk-generate-text
pnpm --dir examples/headless-workpaper run agent:ai-sdk-stream-text
pnpm --dir examples/headless-workpaper run agent:openai-responses
pnpm --dir examples/headless-workpaper run agent:mcp-xlsx-risk-preflight
pnpm --dir examples/serverless-workpaper-api run hono-route
pnpm --dir examples/serverless-workpaper-api run next-server-action
pnpm --dir examples/serverless-workpaper-api run next-server-action-formdataThe AI SDK generateText() smoke lives at
ai-sdk-generate-text-tool-smoke.ts.
The OpenAI example is documented in
openai-responses-workpaper-tool-call.
For a reduced formula or import bug:
npm exec --yes --package @bilig/workpaper@latest -- bilig-formula-clinic ./reduced.xlsx --cells "Summary!B7,Inputs!B2"XLSX And Excel Compatibility
Bilig can import and export workbook files, but cached formula values inside an
.xlsx are diagnostics—not an accuracy oracle. Inspect the file before trusting
it:
npm exec --yes --package @bilig/xlsx-formula-recalc@latest -- bilig-evaluate --door workbook-compatibility --json
npm exec --yes --package @bilig/xlsx-formula-recalc@latest -- workbook-compatibility-report workbook.xlsx --json
npm exec --yes --package @bilig/xlsx-formula-recalc@latest -- xlsx-cache-doctor workbook.xlsx --jsonThe first command is a package smoke test over a bundled demo. The next two inspect the named file. The compatibility report identifies unsupported functions, external links, macros, pivots, volatile formulas, and other risks; it does not certify Excel compatibility. When correctness matters, compare against a workbook freshly recalculated by Excel. See the compatibility limits and Excel oracle walkthrough.
Packages And Repository Map
Path | Role |
Recommended | |
Real-file compatibility and stale-cache diagnostics. | |
Formula parser, binder, compiler, and evaluator. | |
Workbook state, mutations, snapshots, and scheduling. | |
Browser spreadsheet shell. | |
Full-stack runtime, APIs, and static site host. |
The public WorkPaper package requires Node.js >=24. Local monorepo development uses
Node.js 24+, Bun, and pnpm@10.32.1.
Published releases include npm registry signatures and provenance attestations:
npm view @bilig/workpaper version dist.attestations dist.signatures --json
npm audit signaturesDevelopment
Choose one long-running development server:
pnpm dev:web
pnpm dev:web-localInstall and validate the repository with:
pnpm install
pnpm build
pnpm lint
pnpm typecheck
pnpm test
pnpm run ciArchitecture lives in docs/architecture.md. Read
CONTRIBUTING.md before opening a pull request; first-time
contributors can start with the new contributor guide
and starter issues. All participation follows the
CODE_OF_CONDUCT.md.
Support And Security
Ask adoption and design questions in Discussions.
Follow versioned changes through GitHub Releases.
Report reproducible bugs through Issues; reduced workbooks can use the formula bug clinic and fixture form.
Read
SUPPORT.mdfor the evidence that makes a report actionable.Follow
SECURITY.mdfor private vulnerability reporting. Never attach private workbook data, credentials, or tokens to a public issue.
If Bilig fits one of your services or agent workflows, star the repository to follow releases and help other Node developers find it. Tell us what proof or formula is still missing.
License
Available Tools
7 toolsexport_workpaper_documentExport WorkPaper DocumentARead-onlyIdempotentInspect
Export the current WorkPaper JSON document for persistence, review, or handoff to another agent. Does not write files by itself.
Inputs: includeConfig. Returns: document, sourcePath, serializedBytes
get_cell_display_valueGet WorkPaper Cell Display ValueARead-onlyIdempotentInspect
Return the formatted display string for one cell. Use when an agent needs what a user would see, not the raw numeric value.
Inputs: address (required), sheetName (required). Returns: address, displayValue
list_sheetsList WorkPaper SheetsARead-onlyIdempotentInspect
Discover sheet names and used dimensions before reading or editing a WorkPaper. Returns metadata only; use read_range or read_cell for values.
Returns: sheets, writable, sourcePath
read_cellRead WorkPaper CellARead-onlyIdempotentInspect
Read one cell with calculated value, display text, formula text, and serialized content. Use after set_cell_contents to verify readback.
Inputs: address (required), sheetName (required). Returns: value, address, formula, serialized, +1 more
read_rangeRead WorkPaper RangeARead-onlyIdempotentInspect
Read calculated values plus serialized formulas/inputs for an A1 range. Use for audit readback after edits; use read_cell for one address.
Inputs: range (required), sheetName. Returns: range, values, serialized
set_cell_contentsSet WorkPaper Cell ContentsADestructiveIdempotentInspect
Write raw content to one cell, recalculate dependents, atomically persist the WorkPaper JSON file, and return before/after/restored readback.
Inputs: value (required), address (required), sheetName (required). Returns: after, before, checks, restored, +2 more
validate_formulaValidate WorkPaper FormulaARead-onlyIdempotentInspect
Validate formula syntax with the WorkPaper parser before writing it to a cell. This checks syntax only; use set_cell_contents plus readback to evaluate.
Inputs: formula (required). Returns: valid, formula
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Tools are mostly distinct, but read_cell and read_range overlap somewhat; descriptions help differentiate them. get_cell_display_value and read_cell both retrieve cell content, albeit different aspects.
All tool names follow a consistent verb_noun pattern in snake_case, making them predictable and easy to understand.
7 tools is appropriate for a WorkPaper server, covering essential operations without being overwhelming or insufficient.
The tool set covers basic read/write and validation, but lacks batch operations (e.g., write range), sheet management (add/delete), or formatting, leaving notable gaps for complex workflows.
Maintenance
Related MCP Connectors
Fillo MCP server — provision, scaffold, publish, and query forms from your coding agent.
Document conversion MCP server: PDF to Markdown, image OCR, spreadsheet parsing.
Headless CAD engine & MCP server for 2D/3D drafting, solids, DXF/SVG export, and automation.
MCP server for StyleKit styles, tokens, recipes, lint and repair over stdio or HTTP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for Excel-compatible formula evaluation and workbook operations, enabling agents to open, inspect, mutate, recalculate, and save .xlsx files in-memory over stdio.83 npmApache 2.0
- AlicenseAqualityDmaintenanceMCP server for rendering, parsing, converting, and editing Office documents (Excel, PowerPoint, Word) from a structured JSON spec, using LibreOffice WASM for conversion and preview.51ISC
- AlicenseNot gradedqualityDmaintenanceProvides full read and write access to Excel workbooks (sheets, cell ranges, tables, formulas, formatting, and cross-workbook references) via MCP, running locally or as an HTTP/SSE service.17 npmMIT
- AlicenseCqualityCmaintenanceMCP server for regulated financial reporting on Workiva, enabling agents to search, read, and write to Workiva workbooks with policy-gated mutations, readback verification, and immutable receipts. Supports both a compact 3-tool facade and a full 117-tool catalog, plus a credential-free mock mode.100MIT