
给你的AI代理一个它能真正思考的电子表格:确定性兼容Excel的数学+结构化内存(块),实际.xlsx输出。开源,自托管。
概览
Excel兼容的公式无需在脑中操作,表格按名称而非坐标处理,还有一个真正的.xlsx,用户可以打开、审计并持续使用。 一个基于LogiSheets的MCP服务器,LogiSheets是一个用Rust写成的电子表格引擎。MIT运行在你的机器上,不开任何套接字。 问一个模型五年预测,它写出二十个公式,每个公式的行号都经过人工调整。这就是无声错误所在:其中一个公式读成B7,原本是B8,总数看起来合理,且没有错误。 然后表格移动。有人在顶部插入一行,删除年份,添加一列。模型持有的每个坐标都偏差了一,无法察觉,接下来的回合只能反复读取单元格,弄清楚内容去了哪里,而不是你问的问题。 每一个“如果”都需要往返——写输入、重新计算、读取输出,然后放回去。
概述(AI 翻译)
一个真正的电子表格引擎,你的经纪人可以用来思考。 Excel兼容公式
它不必在脑中做,比如用名称来呼应表,而不是用
协调,并且在结尾有一个真实的.xlsx,用户可以打开、审计和
继续使用。
一个MCP服务器 LogiSheets,一个编写的电子表格引擎 在Rust里。麻省理工,运行在你的机器上,不能打开任何插槽。
网格的麻烦
问一个模型五年预测,它写出二十个公式,每个公式都包括
手动调整的行号。这就是无声错误所在:其中之一
它们的读数为B7,其中表示B8],总数看起来合理,且无
会引发错误。
然后表格移动。有人在顶部插入一行,删除一个年份,添加一个 列。模型持有的每个坐标现在都偏离一,且没有 注意得很好,所以它接下来的回合会反复读取单元格,找出所在位置 事情不是围绕你问的问题展开的。
每一个“如果”都需要往返——写入输入,重新计算,读取 输出,放回去。十六种场景就是十六种,还有一个扫描会死 一半时模型中会留下一个场景。
方块
块是表上的命名表。
本页由 AI 翻译,技术细节请以原文为准。
README
以下为原文 README 节选,完整内容请查看原文。
logisheets-mcp
A real spreadsheet engine your agent can think in. Excel-compatible formulas
it doesn’t have to do in its head, a table it addresses by name instead of by
coordinate, and a genuine .xlsx at the end that a person can open, audit and
keep using.
An MCP server over LogiSheets, a spreadsheet engine written in Rust. MIT, runs on your machine, opens no sockets.
The trouble with a grid
Ask a model for a five-year projection and it writes twenty formulas, each with
the row number adjusted by hand. That is where the silent mistake lives: one of
them reads B7 where it meant B8, the total looks plausible, and nothing
raises an error.
Then the sheet moves. Someone inserts a row at the top, deletes a year, adds a column. Every coordinate the model was holding is now off by one and it has no way to notice, so it spends the next turns re-reading cells to work out where things went instead of on the question you asked.
And every “what if” costs a round trip — write the input, recalculate, read the output, put it back. Sixteen scenarios is sixteen of those, and a scan that dies half way leaves a scenario behind in your model.
Blocks
A block is a named table on the sheet. Rows have keys, columns have names, and everything is addressed by those rather than by position.
- A field’s formula is stated once, for the whole column — not per cell. Add a row and it computes. There is no twentieth formula to get wrong.
- A reference names what it means: the
pvfield of the row keyedY3. Insert a row above it and the reference still says the same thing, because it never said “row 8”. - The engine owns computed values. A formula field cannot be overwritten with a number the model worked out itself.
create_block proj fields: year, fcf, df, pv
set_field_rule proj.pv = fcf × df ← once, for the column
add_block_rows Y1 … Y5
describe_block proj
→ Y1 147.2727 Y2 144.5950 Y3 141.9660 Y4 139.3848 Y5 136.8506
… the sheet is then reshaped: two rows inserted at the top, a column at the left …
describe_block proj
→ Y3 141.9660 ← same answer, same address, nothing re-derived
Blocks are created by the agent as it works, so nothing needs preparing. Point it
at a blank workbook or at a spreadsheet someone emailed you — convert_to_block
adopts a table that is already in ordinary cells, reading the field names off the
header row and working out which column is the key.
The second session
The conversation that builds a spreadsheet is almost never the conversation that has to answer a question about it. A week later there is a new session, with none of the context, holding only the file — and what the file records is what
安装
npx -y logisheets-mcp配置
{
"mcpServers": {
"logisheets": {
"command": "npx",
"args": ["-y", "logisheets-mcp"]
}
}
}