Bilig WorkPaper
Formula-backed WorkPaper tools for workbook readback, input edits, and JSON persistence.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"bilig-workpaper": {
"command": "npx",
"args": [
"@bilig/workpaper"
]
}
}
}Ausführbare Pakete
0.164.11stdioRemote-Endpunkte
https://bilig.proompteng.ai/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (8)
🟢list_sheets
Discover sheet names and used dimensions before reading or editing a WorkPaper. Returns metadata only; use read_range or read_cell for values.
Eingabe-Schema
{
"type": "object",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"sourcePath": {
"type": "string",
"description": "Absolute JSON file path when the server was started with --workpaper."
},
"writable": {
"type": "boolean",
"description": "Whether set_cell_contents persists edits back to the source JSON file."
},
"sheets": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"dimensions"
],
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"dimensions": {
"type": "object",
"description": "Current used rows and columns for the sheet."
}
}
}
}
},
"required": [
"writable",
"sheets"
],
"additionalProperties": false
}🟢read_range(range, sheetName)
Read calculated values plus serialized formulas/inputs for an A1 range. Use for audit readback after edits; use read_cell for one address.
Eingabe-Schema
{
"type": "object",
"properties": {
"range": {
"type": "string",
"description": "A1 range such as Summary!A1:B5. If omitted from the range, pass sheetName separately."
},
"sheetName": {
"type": "string",
"description": "Default sheet name when range omits a sheet name, for example Summary."
}
},
"required": [
"range"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"range": {
"type": "string",
"description": "Canonical A1 range including the sheet name."
},
"values": {
"type": "array",
"description": "Two-dimensional array of evaluated cell values."
},
"serialized": {
"type": "array",
"description": "Two-dimensional array of raw serialized cell contents, including formulas."
}
},
"required": [
"range",
"values",
"serialized"
],
"additionalProperties": false
}🟢read_cell(sheetName, address)
Read one cell with calculated value, display text, formula text, formula diagnostics, and serialized content. Use after set_cell_contents to verify readback.
Eingabe-Schema
{
"type": "object",
"properties": {
"sheetName": {
"type": "string",
"description": "Existing sheet name."
},
"address": {
"type": "string",
"description": "Single A1 cell address such as B3."
}
},
"required": [
"sheetName",
"address"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"additionalProperties": false
}🟡set_cell_contents(sheetName, address, value)
Write raw content to one cell and recalculate dependents in memory only. Start with --writable when the edit should persist to JSON.
Eingabe-Schema
{
"type": "object",
"properties": {
"sheetName": {
"type": "string",
"description": "Existing sheet name, for example Inputs."
},
"address": {
"type": "string",
"description": "Single A1 cell address such as B3. Ranges are not accepted."
},
"value": {
"type": "string",
"description": "Raw cell content. Formula strings must start with =; plain strings are stored as literals. Strict MCP hosts such as Semantic Kernel require a single parameter type, so pass evaluated numbers/booleans as formulas such as =0.4 or =TRUE(). The server still accepts JSON number, boolean, or null arguments from clients that support them."
}
},
"required": [
"sheetName",
"address",
"value"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"editedCell": {
"type": "string",
"description": "Canonical sheet-qualified address that was edited."
},
"before": {
"type": "object",
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"additionalProperties": false
},
"after": {
"type": "object",
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"additionalProperties": false
},
"restored": {
"type": "object",
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"additionalProperties": false
},
"persistence": {
"type": "object",
"required": [
"persisted",
"serializedBytes"
],
"properties": {
"persisted": {
"type": "boolean"
},
"path": {
"type": "string"
},
"serializedBytes": {
"type": "number"
}
}
},
"checks": {
"type": "object",
"required": [
"persisted",
"restoredMatchesAfter",
"previousSerialized",
"newSerialized"
],
"properties": {
"persisted": {
"type": "boolean"
},
"restoredMatchesAfter": {
"type": "boolean",
"description": "True when exported and re-imported JSON preserves the edited cell readback."
},
"previousSerialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"newSerialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
}
}
}
},
"required": [
"editedCell",
"before",
"after",
"restored",
"persistence",
"checks"
],
"additionalProperties": false
}🟡set_cell_contents_and_readback(sheetName, address, value, readbackRange, readbackSheetName)
Write raw content to one cell, recalculate dependents, read a dependent range in the same tool call, and return persistence proof. Use this for stateless MCP clients such as hosted Open WebUI integrations.
Eingabe-Schema
{
"type": "object",
"properties": {
"sheetName": {
"type": "string",
"description": "Existing sheet name for the cell to edit, for example Inputs."
},
"address": {
"type": "string",
"description": "Single A1 cell address to edit, such as B3. Ranges are not accepted."
},
"value": {
"type": "string",
"description": "Raw cell content. Formula strings must start with =; plain strings are stored as literals. Strict MCP hosts require a single parameter type, so pass evaluated numbers/booleans as formulas such as =0.4 or =TRUE(). The server still accepts JSON number, boolean, or null arguments from clients that support them."
},
"readbackRange": {
"type": "string",
"description": "Dependent A1 range to read before and after the edit, for example Summary!A1:B5."
},
"readbackSheetName": {
"type": "string",
"description": "Default sheet name when readbackRange omits a sheet name."
}
},
"required": [
"sheetName",
"address",
"value",
"readbackRange"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"editedCell": {
"type": "string",
"description": "Canonical sheet-qualified address that was edited."
},
"readbackRange": {
"type": "string",
"description": "Canonical sheet-qualified range read before and after the edit."
},
"before": {
"type": "object",
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"additionalProperties": false
},
"after": {
"type": "object",
"required": [
"address",
"value",
"serialized",
"formula",
"displayValue",
"formulaDiagnostics"
],
"properties": {
"address": {
"type": "string",
"description": "Canonical sheet-qualified A1 address."
},
"value": {
"description": "Calculated cell value."
},
"serialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Formula text without losing the original calculated value context, or null for literal cells."
},
"displayValue": {
"type": "string",
"description": "Formatted value as a user would see it."
},
"formulaDiagnostics": {
"type": "array",
"description": "Structured formula diagnostics. Empty when the cell has no formula error."
}
},
"additionalProperties": false
},
"beforeReadback": {
"type": "object",
"required": [
"range",
"values",
"serialized"
],
"properties": {
"range": {
"type": "string",
"description": "Canonical A1 range including the sheet name."
},
"values": {
"type": "array",
"description": "Two-dimensional array of evaluated cell values."
},
"serialized": {
"type": "array",
"description": "Two-dimensional array of raw serialized cell contents, including formulas."
}
},
"additionalProperties": false
},
"afterReadback": {
"type": "object",
"required": [
"range",
"values",
"serialized"
],
"properties": {
"range": {
"type": "string",
"description": "Canonical A1 range including the sheet name."
},
"values": {
"type": "array",
"description": "Two-dimensional array of evaluated cell values."
},
"serialized": {
"type": "array",
"description": "Two-dimensional array of raw serialized cell contents, including formulas."
}
},
"additionalProperties": false
},
"restoredReadback": {
"type": "object",
"required": [
"range",
"values",
"serialized"
],
"properties": {
"range": {
"type": "string",
"description": "Canonical A1 range including the sheet name."
},
"values": {
"type": "array",
"description": "Two-dimensional array of evaluated cell values."
},
"serialized": {
"type": "array",
"description": "Two-dimensional array of raw serialized cell contents, including formulas."
}
},
"additionalProperties": false
},
"persistence": {
"type": "object",
"required": [
"persisted",
"serializedBytes"
],
"properties": {
"persisted": {
"type": "boolean"
},
"path": {
"type": "string"
},
"serializedBytes": {
"type": "number"
}
}
},
"checks": {
"type": "object",
"required": [
"persisted",
"readbackChanged",
"restoredReadbackMatchesAfter",
"previousSerialized",
"newSerialized"
],
"properties": {
"persisted": {
"type": "boolean"
},
"readbackChanged": {
"type": "boolean",
"description": "True when the dependent readback values differ after the edit."
},
"restoredReadbackMatchesAfter": {
"type": "boolean",
"description": "True when exported and re-imported JSON preserves the dependent readback range."
},
"previousSerialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
},
"newSerialized": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Raw serialized cell content; formulas are strings that start with =."
}
}
}
},
"required": [
"editedCell",
"readbackRange",
"before",
"after",
"beforeReadback",
"afterReadback",
"restoredReadback",
"persistence",
"checks"
],
"additionalProperties": false
}🟢get_cell_display_value(sheetName, address)
Return the formatted display string for one cell. Use when an agent needs what a user would see, not the raw numeric value.
Eingabe-Schema
{
"type": "object",
"properties": {
"sheetName": {
"type": "string",
"description": "Existing sheet name."
},
"address": {
"type": "string",
"description": "Single A1 cell address such as B3."
}
},
"required": [
"sheetName",
"address"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"address": {
"type": "string"
},
"displayValue": {
"type": "string"
}
},
"required": [
"address",
"displayValue"
],
"additionalProperties": false
}🟢export_workpaper_document(includeConfig)
Export the current WorkPaper JSON document for persistence, review, or handoff to another agent. Does not write files by itself.
Eingabe-Schema
{
"type": "object",
"properties": {
"includeConfig": {
"type": "boolean",
"default": true,
"description": "Include workbook configuration metadata in the exported JSON. Defaults to true."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"sourcePath": {
"type": "string"
},
"document": {
"type": "object",
"description": "Persisted WorkPaper JSON document."
},
"serializedBytes": {
"type": "number"
}
},
"required": [
"document",
"serializedBytes"
],
"additionalProperties": false
}🟢validate_formula(formula)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"formula": {
"type": "string",
"description": "Formula string including the leading =, for example =SUM(Inputs!B2:B4)."
}
},
"required": [
"formula"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"formula": {
"type": "string"
},
"valid": {
"type": "boolean"
}
},
"required": [
"formula",
"valid"
],
"additionalProperties": false
}Community
Nachweis