
Basepilot
io.github.Peterwong666由 GitHub 账号 Peterwong666 发布v0.1.1更新于 Oct 26, 2026
面向企业交付的飞书多维表格 MCP Server —— 让 Claude Code / Cursor 安全读写业务台账
概览
飞书多维表格 MCP 服务器,让助手安全读写多维表格记录,把表格当作业务台账使用。
- 可以做什么
- 读取表结构与字段类型
- 新增、修改、删除记录,删除默认走 dry-run 预演
- 按条件检索记录,并按唯一键执行幂等批量 upsert
- 用 dry_run_create 预演完整写入链路而不发出真实写请求
- 对业务环节打分,判断哪些环节值得引入 AI
- 适用场景
- 适合已用飞书多维表格承载库存、广告、差评跟进等业务台账的团队,希望 Claude Code 或 Cursor 直接读写这些记录,又不想反复踩字段编码和写冲突的坑。
- 运行要求
- 以 stdio 本地进程运行,通常通过 uvx 从 PyPI 启动,需要 Python 与 uv 环境。需要飞书企业自建应用并开通多维表格权限,配置 BASEPILOT_APP_ID 与 BASEPILOT_APP_SECRET;README 中还需配置 BASEPILOT_APP_TOKEN 与 BASEPILOT_TABLE_INVENTORY。需要能访问飞书开放平台接口。
安装
在 SourceWeft 中
- 打开 控制台中的 Basepilot,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
BasePilot
面向企业交付的飞书多维表格 MCP Server —— 用 MCP 工具把多维表格变成 Claude Code / Cursor 可安全读写的业务台账。
[CI] [PyPI] [Python] [License] [tests] [eval]
English · 简体中文
这是什么
中小企业已经在用飞书多维表格承载业务台账(库存、广告、差评跟进), 数据靠人工从 Seller Central / 广告后台导 CSV 再粘贴进去,每天 1-2 小时。 公司想上 AI,但第一件事就卡住了:
这不是技术选型问题,是没有人把多维表格的真实约束包一层。 业务等不了,AI 落地就停在这里 —— 这是很多「客户买过 AI 工具但没用起来」的真实原因。
BasePilot 就是那一层。
看图说话(全部为真实运行输出,非手绘)
1. 入口宽容,出口严格—— 适配层把 LLM 的错误输入吃掉
scripts/demo_coerce.py 把LLM 最常犯的四种错误喂给适配层,看它们被自动纠正:
2. 业务诊断:15 个环节逐条打分,明确劝退 2 个
四象限分布(7 个不需要 AI,4 个 AI 主导,2 个明确劝退):
3. 评测:9 项指标全部实算,无一手写
4. 离线全量门禁:lint + 类型 + 测试 + 评测 + 文档校验
5. cassette 重放:真实租户交互在 CI 可复现(已脱敏)
6. 交付文档链:五份「报告即代码」自动生成
排障 SOP由 errors.py 自动生成,与代码零漂移:
全部截图由
scripts/make_screenshots.py执行真实命令后渲染,不存在手绘图。 脚本内置「解释器污染」防护 —— 用错Python 环境会导致场景包静默降级, 生成数字错误的图,已加断言阻止出图。
架构
分层原则:不是把 API 包装成工具,而是把飞书的真实约束收敛到三层里。
工具层只表达业务意图(batch_upsert),约束由引擎层统一兜住 ——
否则同一条记录走不同入口会得到不同结果(见 ADR-004)。
三个适配层(核心)
不是把 API 包装成工具,而是治理飞书的真实约束。
1. 鉴权层 —— token 缓存 ✅
tenant_access_token 有效期 7200 秒。官方明确:剩余有效期小于 30 分钟时返回新 token,
大于等于 30 分钟时返回原 token。所以刷新窗口必须落在 [0, 30min] 区间内,
否则会拿到同一个 token,白白消耗配额。
实现:进程内缓存 + asyncio.Lock 单飞(并发下只换一次,其余复用)。
实测指标:100 次业务请求 → 向飞书换 token 1 次。
(tests/test_auth.py::test_100_requests_fetch_token_once,可复现)
2. 并发层 —— 单表写串行 ✅
官方错误码 1254291 的排查建议原文:「在接口与接口之间增加 0.5 或 1 秒的延迟」;
1254607 补充说明底层「基于版本维度的串行方式,不支持并发」。
实现:per-table_id 的锁(不是全局锁 —— 不同数据表之间仍可并行)+ 0.5s 请求节流,
主动规避 1254291 而不是撞上再重试。
实测指标:200 次压测下,单表最大并发写 = 1,1254291 计数 = 0。
(tests/test_client.py::test_same_table_writes_are_serialized,可复现)
3. 类型层 —— 字段编码适配 ✅
按 13 类字段自动编码为官方要求格式,并对不可写字段 fail-fast。
另有 normalize_key() 解码:API 读回的文本字段是富文本数组、URL 是对象,
upsert 唯一键提取必须归一化,否则「已存在」判为「不存在」导致重复创建
(详见 docs/adr/006-read-write-schema-asymmetry.md)。
设计原则:入口宽容,出口严格 —— 允许 LLM 传 ISO 日期、秒级时间戳、单元素数组, 适配层内部统一转成官方格式。LLM 出错的空间由适配层吃掉,而不是把 1254064 抛给客户。
实测指标:19 条黄金用例,字段编码正确率 100%,不可写拦截率 100%。
(eval/runner.py 实算,make eval 可复现)
MCP 工具(8 个)
接入 Claude Code(免克隆,经 uvx 直接从 PyPI 运行):
远程模式(HTTP / SSE)
默认 serve 走 stdio,供 Claude Code / Cursor 本地接入 —— 凭证留在本机环境变量,
这是推荐用法。需要把 Server 部署到服务器、供多人或多客户端远程接入时,
用 HTTP 传输(FastMCP 4.x,streamable-http):
--host默认127.0.0.1(仅本机);--port默认 8000;--path默认用 FastMCP 内置路径。- 鉴权注意:MCP 层没有内置鉴权 —— 能连上端口就能调用全部写工具,
等同于你的飞书 app 权限。不要把端口直接绑
0.0.0.0暴露公网: 请放内网,或在前面加带鉴权的反向代理(nginx / Caddy + Bearer Token / mTLS)。 - 飞书凭证只存在服务端环境变量(
BASEPILOT_APP_ID/BASEPILOT_APP_SECRET), 不经过客户端与网络传输。
当前进度
全部模块已完成,已在真实飞书租户跑通全链路。 每个指标都由代码实算
(make eval),未实测的不会写成已达成 —— 这是本项目的铁律。
make verify 离线全绿(309 tests,含门禁脚本自身 3 个测试);make live-smoke 连真实飞书跑通
鉴权→建表→写入→读回→清理;跨境三表 batch_upsert 幂等(第一次全新增,
第二次全更新无重复)。
判断进度的方式:uvx basepilot doctor(如实列出已实现项)。
快速开始
第 1 步:凭证从哪来
- 登录 飞书开放平台 →「创建企业自建应用」,
拿到 App ID(
cli_开头)与 App Secret (官方指引)。 - 在应用后台「权限管理」开通多维表格权限(
bitable:app),然后创建版本并发布。 - 把凭证配进环境变量,跑凭证引导向导 —— 它会真实调飞书 OpenAPI
验证凭证连通性、验证你的
app_token/table_id可达, 最后输出可直接粘贴的mcpServers配置(uvx 与本地开发两份):
非交互环境(CI / 管道)里向导不会干等输入:检测到非 TTY 会打印 完整的环境变量配置指引后以退出码 2 退出。
第 2 步:跑起来
所有脚本都用项目自己的 venv 解释器。用系统 Python 可能缺少 PyYAML 导致 场景包静默降级为fallback(4 条内置场景),跑出的数字是错的 ——
scripts/diagnose.py等已通过make verify的门禁检查,但请优先用make/uv run。
安全设计
- 删除护栏:
delete_records默认dry_run=true,须显式confirm=true才真删 —— 防 LLM 幻觉批量删库。 - 不可写字段拦截:公式 / 查找引用 / 创建时间 / 自动编号等 13 类系统字段 fail-fast 拒绝写入, 不允许静默写坏数据。
- 凭证隔离:
.env已 gitignore;cassette 里app_id / app_token / table_id / record_id 全部替换为占位符(cassette.redact_identifiers)—— 这些不是密钥,但会暴露租户身份。 - 发布前门禁:
tests/test_no_secrets_in_repo.py在 CI 里扫描仓库, 检出真实租户标识符 / 泄露的.env/ 本机绝对路径即失败;失败信息只报位置不回显值。
非目标(Non-goals)
主动划边界比假装覆盖更可信。 本项目不做:
- ❌ 删除整个多维表格(Base)—— 不可逆,风险远高于收益
- ❌ 授予/变更权限 —— 应由表owner 在界面完成
- ❌ OAuth 授权流程 —— 定位是企业内部工具 + 开源交付包
- ❌ 直接发送飞书消息 —— 外部可见副作用应由上层决策
- ❌ 事件订阅(长连接)—— 需公网与连接数管理,且不解决当前核心痛点
与官方 lark-mcp 的关系
官方 @larksuiteoapi/lark-mcp 把飞书 API 直出为 MCP 工具,覆盖度更广(40+ 工具)。
本项目不做覆盖度竞争,做交付可靠性:
详见 docs/adr/005-why-not-wrap-official-lark-mcp.md。
FDE 交付方法论五连(报告即代码)
报告即代码:数字从 diagnosis.py/cassette/eval 实算,改源数据重跑自动更新,测试锁结构。
入口从**docs/delivery/delivery_handbook.md** 进 —— 它串起五份并标注每份的数字口径。
文档
开发
技术栈:Python 3.11+ · httpx(裸客户端,不依赖官方 SDK)· FastMCP(工具层)· PyYAML(场景包)· pytest + respx(离线回放)· ruff + mypy strict。
License
MIT
English
BasePilot is a Feishu (Lark) Base MCP Server for enterprise delivery — it turns multi-dimensional tables (Base) into business ledgers that Claude Code / Cursor can safely read and write.
Why
Companies already keep inventory / ads / review tracking in Feishu Base. The moment they want AI involved, they hit these wallss:
This isn't a technology-selection problem — nobody wrapped Base's real constraints in a layer. AI adoption stalls here. BasePilot is that layer.
Three adaptation layers
- Auth — token cache with single-flight lock. Measured: 100 business requests → 1 token refresh.
- Concurrency — per-
table_idlock + 0.5s throttle, so1254291is avoided proactively. - Types — 13 field encoders, "lenient in, strict out". Refuses writes to computed/system fields.
8 MCP tools
describe_table, create_records, update_records, delete_records (dry-run by default),
search_records, batch_upsert (idempotent), dry_run_create (zero real writes),
diagnose_scenarios (which business steps deserve AI).
Verification
make verify runs lint + mypy strict + tests + eval + doc-link checks.
All 9 eval metrics are computed from real code, never hand-written.
Docs
Delivery methodology and architecture decisions live in docs/. Start with
docs/PROJECT_RETROSPECTIVE.md. All delivery docs are "reports as code" — numbers come from
real computation.
MIT licensed.
来源:README.md,提交 087b2ae
工具
0版本历史
1- v0.1.1最新Oct 20, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分