表格数据自动填充服务

一个用于存储和安全自动填充表格数据的MCP服务器,提供工具让AI代理读取对象、识别空字段、收集值并写回,同时避免覆盖现有数据。

  • by popstas
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 popstas/mcp-sheet-filler

使用说明

mcp片状填料

MCP服务器,用于存储和安全自动填充表格数据。为AI代理提供工具,使其能够读取对象、识别空的自动填充字段、收集值并将其写回,而不会覆盖现有数据。

工具列表

演示表

安装

npm install
npm run build

配置

环境变量

变量 描述 默认值
OBJECT_KEY_FIELD 对象的关键字段名称 name

谷歌表格:

变量 描述 默认值
GOOGLE_SHEET_ID 谷歌表格ID --
SHEET_TAB_DATA 数据表名称 data
SHEET_TAB_FIELDS 字段架构表名称 fields
GOOGLE_SERVICE_ACCOUNT_KEY 服务帐户JSON(字符串或文件路径) --

Google表格设置

  1. 创建Google Cloud项目并启用Google Sheets API
  2. 创建服务帐户并下载JSON密钥
  3. 使用服务帐户电子邮件共享您的Google表格(具有编辑权限)
  4. 集 GOOGLE_SERVICE_ACCOUNT_KEY 到JSON内容或文件路径

板材结构:

  • fields 图纸:列 name, description, auto, instructions, type, example
  • data sheet:第一行是标题(字段名),第一列是对象键,每一行都是一个对象

用法

使用克劳德桌面

添加 claude_desktop_config.json:

{
  "mcpServers": {
    "sheet-filler": {
      "command": "node",
      "args": ["/path/to/mcp-sheet-filler/dist/index.js"],
      "env": {
        "GOOGLE_SHEET_ID": "your-google-sheet-id",
        "GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/service-account.json"
      }
    }
  }
}

发展

npm run dev    # Run with tsx
npm run build  # Build TypeScript
npm start      # Run built version
npm test       # Run tests

数据模型

领域

对象字段的架构,存储在 fields 表/表:

列 类型 描述
name string 唯一字段名(必填)
description string 字段描述
auto boolean 自动填充标志
instructions string 自动填充说明
type string 用于验证的数据类型
example string 示例值

对象

存储在中的数据对象 data 桌子/床单。每一行是一个对象,每一列是一个字段。对象由其关键字段标识(OBJECT_KEY_FIELD,默认值: name).

支持的类型

  • string (默认)
  • number
  • date (ISO-8601: YYYY-MM-DD)
  • datetime (ISO-8601)
  • url
  • email
  • json
  • enum:val1|val2|val3

空值规则

如果一个值满足以下条件,则被视为空: null, undefined、空字符串或仅空白。

价值观,如 0, false, "0" 是 不 空的。

MCP工具

filler_init

通过创建来初始化当前电子表格 data 和 fields 带有标题行的选项卡。如果任一选项卡已存在,则出现错误。无需参数。

{}

退货 { success, fieldsTab, dataTab, keyField }.

filler_list_fields

列出所有字段或子集。

{ "names": ["field1", "field2"], "include_instructions": true }

filler_add_fields

添加新字段(批处理)。

{
  "fields": [
    {
      "name": "website",
      "description": "Company website",
      "auto": true,
      "type": "url",
      "instructions": "Find the official website"
    }
  ]
}

退货 { results: { [name]: { created: true } | { error: "..." } } }.

filler_get_objects_by_name

按名称获取对象(批处理)。

{ "names": ["Acme Corp", "Globex"] }

退货 { objects: [{ found, object?, missing? } | { found: false, name }] }.

filler_add_objects_by_name

创建新对象(批处理)。

{ "names": ["Acme Corp", "Globex"] }

退货 { results: { [name]: { created: true } | { error: "..." } } }.

filler_save_objects_nooverwrite

保存多个对象的字段值,而不覆盖非空字段。

{
  "objects": [
    {
      "name": "Acme Corp",
      "values": {
        "website": "https://acme.com",
        "founded": "1990"
      }
    }
  ]
}

返回每个对象的每个字段的状态:

  • saved --价值已保存
  • skipped_already_set --字段已具有值
  • rejected_unknown_field --字段不在架构中
  • rejected_invalid_type --值类型验证失败

filler_get_next_缺少字段_对象

获取缺少自动填充字段的对象(默认限制1)。

{ "limit": 1, "include_field_meta": true, "skip_filled_fields": false }
  • skip_filled_fields --何时 true,从中省略已填充的字段值 object.values (返回 {}),减小宽表的响应大小

退货 { found, objects, count, remain } --使用此功能逐个或分批处理对象。

工作流示例

  1. 客服电话 filler_list_fields 理解模式
  2. 客服电话 filler_get_next_missing_fields_objects 获取缺少字段的对象
  3. 代理使用字段元数据中的指令收集值
  4. 客服电话 filler_save_objects_no_overwrite 安全保存值

错误代码

代码 描述
backend_not_configured 未配置存储后端
field_already_exists 具有此名称的字段已存在
field_not_found 未找到字段
object_already_exists 同名对象已存在
object_not_found 未找到对象
invalid_argument 提供的参数无效
storage_error 存储操作失败

经过测试

  • ChatGPT应用程序(开发人员模式)
  • 克劳德连接器(定制连接器)
  • 光标
  • 反重力
  • VSCode
  • 克劳德爪
  • 电报功能机器人

许可证

ISC