mcpField
T
tablestakes

tablestakes

本地服务
github.com/oborchers生产力14 天前更新

关于 tablestakes

tablestakes 是面向 LLM 的 MCP 服务,用于读取和编辑 Markdown 文档中的表格,尤其适合 GitBook 同步产生的 HTML 表格。它将表格转换为紧凑的管道格式供读取,并在写回时保留原有格式和属性。

主要功能

  1. 01扫描文档并列出表格
  2. 02以管道格式读取表格
  3. 03按单元格批量修改
  4. 04插入或删除行列
  5. 05按版本哈希防止过期写入
  6. 06保留 HTML 格式与内联样式

适用场景

  1. 01检查 GitBook 同步文档中的表格
  2. 02更新 Markdown 表格中的指定单元格
  3. 03编辑含 HTML 表格的 CMS 或 Notion 导出文件

MCP 相关

该 MCP 服务向客户端提供表格发现、读取及编辑工具,可处理 GFM、GitBook 折叠 HTML 和一般 HTML 表格。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"oborchers-tablestakes": {
"command": "uvx",
"args": [
"tablestakes"
]
}
}
}
启动命令uvx tablestakes

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypitablestakes1.1.0

工具

11

收录的工具列表 · 更新于 2 周前

参数类型必填说明
updatesarray是由 {row: int, column: str, value: str} 对象组成的列表。
versionstring是read_table 返回的 12 位十六进制哈希(位于 "v:" 后,例如 "a1b2c3d4e5f6")。
file_pathstring是Markdown 文件的绝对路径。
table_indexinteger是来自 list_tables 的从 0 开始的表格索引。

详细介绍

tablestakes

PyPI version Python versions CI License

一个 MCP 服务,为大模型提供对杂乱 HTML 中表格的清晰、精准访问。

问题

GitBook、Notion 导出文件和 CMS 平台等工具在将内容同步到 Markdown 文件时,会把表格压缩成单行 HTML。结果在编辑器中看起来是这样的:

<table><thead><tr><th width="520.11">Requirement</th><th width="122.07">Priority</th><th>Priority 1-2-3</th></tr></thead><tbody><tr><td><strong>1.1</strong> Agent sees only their Salesforce-assigned cases <strong>in the currently selected organization</strong> (case is "assigned" when SF <code>Case.OwnerId</code> matches the agent's linked SF user ID)...</td><td>Must</td><td>1</td></tr></tbody></table>

这对人类来说难以阅读,对大模型来说也不可靠。模型难以解析压缩后的 HTML 表格,经常会幻觉出错误的单元格边界,而且无法在不破坏结构的情况下编辑它们。

tablestakes 可以解决这个问题。 它位于大模型与文件之间,读取时将表格转换为清晰的管道格式,保存时再以原始格式写回,同时保留 GitBook 兼容性、HTML 属性和内联格式。

大模型看到的内容

发现 — 一次调用即可扫描包含 26 个表格的文档:

26 tables

T0 pipe 5r 3c v:485f65f7b470 [Cross-Domain Dependencies]
  A:Integration | B:Source | C:Requirements

T2 gitbook 18r 3c v:77a9495fd328 [Case List]
  A:Requirement | B:Priority | C:Priority 1-2-3

T7 gitbook 3r 4c v:d9a9a45a370f [Attachments]
  A:Requirement | B:Priority | C:Dependency | D:Priority 1-2-3

读取 — 压缩后的 HTML 会变成清晰的管道表格:

v:d9a9a45a370f gitbook 3r 4c [Attachments]
A:Requirement | B:Priority | C:Dependency | D:Priority 1-2-3
| Requirement | Priority | Dependency | Priority 1-2-3 |
| --- | --- | --- | --- |
| **5.1** View inbound attachments in-app... | Must | — | 1 |
| **5.2** Send outbound attachments... | Must | Blocked on SF API | 1 |
| **5.3** Attachment file size limits... | Should | — |  |

写入 — 经过版本检查的精准单元格编辑:

v:5749c94ffb1f

14 个字符。文件已更新,GitBook HTML 格式得到保留,width 属性也完好无损。

令牌效率

基准:Claude Code 内置的 Read + Edit 工具对同一文件进行操作。使用一个合成表格进行测量,该表格包含 18 行、4 列,并含有符合真实需求文档风格的内容(粗体 ID、行内强调、长度不一的单元格)。

操作Read + Edittablestakes节省
list_tables(26 个 HTML 表格)~28,400 个令牌~2,500 个令牌91%
read_table(18 行 HTML)~1,100 个令牌~690 个令牌39%
read_table(18 行 GFM)~780 个令牌~690 个令牌11%
单元格编辑(18 行 HTML)~35 个令牌~27 个令牌23%
单元格编辑(18 行 GFM)~99 个令牌~27 个令牌73%
10 次编辑工作流(HTML)~1,470 个令牌~960 个令牌35%

节省来自以下方面:

  • 读取(HTML):折叠后的 HTML 标签(<td>、<tr>、<th>、<strong>、width="...")都是纯粹的额外开销。管道表格无需标记即可承载相同信息。Read 工具还会添加 cat -n 行号前缀。

  • 读取(GFM):移除行号前缀和周围文档上下文可带来适度的节省。表格内容本身已经很简洁。

  • 写入:Edit 工具要求提供 old_string(足够的上下文,以确保其在文件中唯一)和 new_string(修改后的版本),两者都会作为输出令牌生成。对于 GFM,old_string 是整行(约 190 个字符)。tablestakes 只需 {"row": 0, "column": "B", "value": "Should"}(约 18 个令牌)。

  • 发现:如果没有 tablestakes,大模型需要读取整个文件才能找到表格。list_tables 会返回紧凑索引——元数据加上每个表格的 1 行预览。

  • 紧凑管道表格不填充列宽。根据 ImprovingAgents 基准测试,GFM 管道表格的令牌与准确率比最佳:成本为 CSV 的 1.24 倍,QA 准确率为 51.9%;优于 JSON(2.08 倍,52.3%)和 YAML(1.88 倍,54.7%)。

实验详情

分词器:tiktoken cl100k_base(GPT-4)。Claude 使用不同的分词器,但相对比较结果仍然成立。基准测试脚本(script.py)以编程方式构建表格,并使用实际转换器代码生成 tablestakes 输出,没有硬编码字符串。

读取基准:simulate_read_tool() 将文件内容包装为 cat -n 格式(每行带有行号前缀),与 Claude Code 的 Read 工具返回内容一致。整个文件(文档文本 + 表格)都会进入大模型上下文。

写入基准:对于每次单元格编辑,脚本都会从目标 <td> 向左扩展,计算能确保子字符串在文件中唯一的最短 old_string。new_string 是替换了单元格值的相同上下文。这是 Edit 工具的最佳情况——实际使用者可能会包含比最低要求更多的上下文。

list_tables 基准:Markdown 文档中包含 26 个 18 行 GitBook HTML 表格的副本。朴素方式 = 读取整个文件(约 28k 个令牌)。tablestakes = list_tables 输出,其中 preview_rows=0..3:

preview_rows令牌数节省
0(仅元数据)~1,23096%
1(默认)~2,53091%
2~3,51088%
3~4,42084%

复现方式:uv run --with tiktoken python scripts/script.py

快速开始

Claude Code:

claude mcp add tablestakes -- uvx tablestakes

Codex CLI:

codex mcp add tablestakes -- uvx tablestakes

Gemini CLI:

gemini mcp add tablestakes -- uvx tablestakes

也可以直接从 PyPI 安装:pip install tablestakes

其他客户端(Cursor、Windsurf、Claude Desktop)

将以下 JSON 添加到客户端的 MCP 配置文件中:

{
  "mcpServers": {
    "tablestakes": {
      "command": "uvx",
      "args": ["tablestakes"]
    }
  }
}
客户端配置文件
Cursor.cursor/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
Claude Desktopclaude_desktop_config.json

工具

发现与读取
工具用途
list_tables(file_path, preview_rows=1)扫描文件,返回所有表格的元数据和预览
read_table(file_path, table_index)将完整表格规范化为管道格式,并返回版本哈希
单元格、行和列操作
工具用途
update_cells(file_path, table_index, version, updates)批量应用 {row, column, value} 补丁
insert_row(file_path, table_index, version, position, values)在指定位置插入行(-1 表示追加)
delete_row(file_path, table_index, version, row_index)按索引删除行
insert_column(file_path, table_index, version, name, ...)插入带默认值的列
delete_column(file_path, table_index, version, column)删除列
rename_column(file_path, table_index, version, old_name, new_name)重命名表头
replace_table(file_path, table_index, version, new_content)根据管道输入完整替换表格
create_table(file_path, content, position, format)根据管道输入创建新表格(默认:HTML)

所有写入工具都需要从 read_table 获取 version 哈希值——乐观并发机制无需锁定即可防止基于过时数据覆盖内容。

支持的表格格式

格式读取写入往返转换
GFM 管道表格原样传递原地编辑无损
GitBook 折叠 HTMLHTML → 管道管道 → 折叠 HTML保留 width、data-*、内联格式
通用 HTML 表格HTML → 管道或美化后的 HTML重建 HTML保留结构

虽然 GitBook 是该项目的主要开发动机,但 tablestakes 适用于任何包含 HTML 表格的 Markdown 文档,包括 CMS 导出文件、Notion 转储、wiki 迁移内容,或 .md 文件中手写的 HTML。

列寻址

列可以通过以下方式引用:

  • 字母:"A"、"B"、"AA"(双射 26 进制,类似 Excel)
  • 名称:"Priority"(必须唯一)
  • 组合形式:"B:Priority"(用于消除歧义)
  • 索引:"0"、"1"(从 0 开始)

开发

make init      # First-time setup: venv + deps + pre-commit hooks
make check     # All checks: format + lint + typecheck + test
make test      # Run tests only
make test-cov  # Tests with coverage report

作者

由 Dr. Oliver Borchers 构建。他是 IU Group 的执行级 AI 与自动化合作伙伴兼 AI 工程负责人。

许可证

Apache-2.0


mcp-name: io.github.oborchers/tablestakes

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。