使用说明
增强型Airtable MCP服务器
Airtable的一个强大的模型上下文协议(MCP)服务器,可以正确处理所有字段类型,包括单选、日期、公式、复选框、数字等。
特性
-
全字段类型支持:正确处理所有Airtable字段类型:
- 单选和多选
- 日期和日期时间
- 数字、货币、百分比、持续时间、评级
- 复选框(布尔值)
- 电子邮件、URL、电话号码
- 附件
- 记录链接
- 公式、汇总、查找(只读)
- 还有更多!
-
自动类型转换:根据字段类型自动将值转换为正确的格式
-
验证:根据模式验证字段值(例如,验证选择选项)
-
灵活查询:支持过滤、排序、视图和字段选择
-
模式管理:从Airtable Metadata API自动匹配表架构或手动定义
-
批量操作:高效地创建、更新或删除每个请求最多10条记录
-
发现工具:列出所有可访问的基和表以及元数据
安装
npm install
npm run build
配置
认证
此服务器使用 个人访问令牌(PAT) 用于身份验证。Airtable正在弃用传统的API密钥,转而支持PAT。
个人访问令牌:
- 从开始
pat(例如。,patXXXXXXXXXXXXXXXXXX.XXXXXXXXX...) - 可以使用单个令牌访问多个基站
- 支持细粒度权限
- 可选设置
AIRTABLE_BASE_ID作为默认基数
环境变量:
AIRTABLE_PAT(必填):您的个人访问令牌AIRTABLE_BASE_ID(可选):如果您主要使用一个基,则默认基ID
创建您的PAT: https://airtable.com/create/tokens
备注:传统API密钥(从
key)此服务器不再支持。
安全最佳实践
⚠️ 重要:永远不要将令牌提交到版本控制中!
- 使用环境变量:将凭据存储在
.env文件(已在.gitignore) - 定期旋转令牌:每90天刷新一次个人访问令牌
- 使用范围权限:创建具有最低所需权限(范围)的PAT
- 独立环境:为开发/暂存/生产使用不同的令牌
看 安全.md 获取全面的安全指南。
用法
本地运行
# Development mode with PAT only (access multiple bases)
AIRTABLE_PAT=your_pat npm run dev
# Development mode with default base
AIRTABLE_PAT=your_pat AIRTABLE_BASE_ID=your_base npm run dev
# Production mode
AIRTABLE_PAT=your_pat AIRTABLE_BASE_ID=your_base npm start
与Claude Desktop一起使用
添加到您的Claude Desktop配置文件中:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%/Claude/claude_desktop_config.json
选项1:仅PAT(多基站接入)
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["/absolute/path/to/airtable-mcp-server/build/index.js"],
"env": {
"AIRTABLE_PAT": "patXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
}
}
通过此设置,服务器可以访问您的PAT有权访问的所有库。
选项2:带默认基数的PAT(推荐)
如果你主要与一个基地合作:
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["/absolute/path/to/airtable-mcp-server/build/index.js"],
"env": {
"AIRTABLE_PAT": "patXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"AIRTABLE_BASE_ID": "appXXXXXXXXXXXXXX"
}
}
}
}
安全说明:
- ⚠️ 使用 绝对路径 仅(例如。,
/Users/you/projects/...不~/projects/...) - 🔒 保护配置文件:
chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json - 🚫 切勿使用真实凭据提交此配置文件
- ✅ Claude Desktop配置文件是用户特定的,应保持私有
可用工具
1. airtable_list_bases
列出所有可使用您的个人访问令牌访问的Airtable基地。
参数:无
示例响应:
{
"count": 3,
"bases": [
{
"id": "appXXXXXXXXXXXXXX",
"name": "My Project",
"permissionLevel": "create"
}
]
}
2. airtable_list_tables
列出Airtable库中的所有表。
参数:
baseId(可选):Airtable基ID。如果未提供,则使用配置中的默认基。
示例响应:
{
"count": 5,
"tables": [
{
"id": "tblXXXXXXXXXXXXXX",
"name": "Contacts",
"description": "Customer contact information",
"primaryFieldId": "fldXXXXXXXXXXXXXX"
}
]
}
3. airtable_get_table_schema
获取表的完整架构,包括所有字段定义、类型和选项。来自Airtable元数据API的自动提示。
参数:
baseId(可选):气垫底座IDtable(必填):表名
示例:
{
"table": "Tasks"
}
4. airtable_list_records
使用可选的筛选和排序从表中列出记录。
参数:
table(必填):表名filterByFormula(可选):空气表过滤公式maxRecords(可选):要返回的最大记录数view(可选):要使用的视图名称fields(可选):要返回的字段名数组sort(可选):排序对象数组[{field: "Name", direction: "asc"}]
示例:
{
"table": "Contacts",
"filterByFormula": "{Status} = 'Active'",
"maxRecords": 10,
"sort": [{"field": "Created", "direction": "desc"}]
}
5. airtable_get_record
按ID获取特定记录。
参数:
table(必填):表名recordId(必填):记录ID
6. airtable_create_record
使用自动字段类型转换创建新记录。
参数:
table(必填):表名fields(必填):具有字段值的对象
示例:
{
"table": "Tasks",
"fields": {
"Name": "Complete project",
"Status": "In Progress",
"Due Date": "2024-12-31",
"Priority": 5,
"Completed": false
}
}
7. airtable_update_record
更新现有记录。
参数:
table(必填):表名recordId(必填):记录IDfields(必需):具有要更新的字段值的对象
8. airtable_delete_record
删除记录。
参数:
table(必填):表名recordId(必填):记录ID
9. airtable_set_table_schema
定义表的架构,以实现正确的字段类型处理。这是可选的,但建议用于更好的类型安全和验证。
参数:
table(必填):表名fields(必填):字段定义数组
示例:
{
"table": "Tasks",
"fields": [
{
"name": "Name",
"type": "singleLineText"
},
{
"name": "Status",
"type": "singleSelect",
"options": {
"choices": [
{"id": "sel1", "name": "To Do"},
{"id": "sel2", "name": "In Progress"},
{"id": "sel3", "name": "Done"}
]
}
},
{
"name": "Due Date",
"type": "date"
},
{
"name": "Priority",
"type": "number"
},
{
"name": "Completed",
"type": "checkbox"
}
]
}
10. airtable_batch_create_records
一次创建多条记录(每个请求最多10条)。比单独创建记录要高效得多。
参数:
baseId(可选):气垫底座IDtable(必填):表名records(必填):记录对象数组(最多10个)
示例:
{
"table": "Tasks",
"records": [
{
"Name": "Task 1",
"Status": "To Do",
"Priority": 3
},
{
"Name": "Task 2",
"Status": "In Progress",
"Priority": 5
},
{
"Name": "Task 3",
"Status": "To Do",
"Priority": 1
}
]
}
11. airtable_batch_update_records
一次更新多条记录(每次请求最多10条)。比单独更新记录要高效得多。
参数:
baseId(可选):气垫底座IDtable(必填):表名updates(必填):更新对象数组id和fields(最多10个)
示例:
{
"table": "Tasks",
"updates": [
{
"id": "recXXXXXXXXXXXXXX",
"fields": {
"Status": "Completed",
"Completed": true
}
},
{
"id": "recYYYYYYYYYYYYYY",
"fields": {
"Status": "In Progress",
"Priority": 5
}
}
]
}
12. airtable_batch_delete_records
一次删除多条记录(每次请求最多10条)。比单独删除记录更有效。
参数:
baseId(可选):气垫底座IDtable(必填):表名recordIds(必填):要删除的记录ID数组(最多10个)
示例:
{
"table": "Tasks",
"recordIds": [
"recXXXXXXXXXXXXXX",
"recYYYYYYYYYYYYYY",
"recZZZZZZZZZZZZZZ"
]
}
现场类型处理
服务器根据字段类型自动转换值:
| 字段类型 | 输入格式 | 注释 |
|---|---|---|
| singleSelect | "Option Name" |
根据可用选项进行验证 |
| 多选 | ["Option1", "Option2"] |
选项名称数组 |
| 日期/日期时间 | "2024-12-31" 或ISO字符串 |
转换为ISO格式 |
| 数量/货币/百分比 | 42 或 "42" |
转换为数字 |
| 复选框 | true, false, "true", "1" |
转换为布尔值 |
| 电子邮件 | "user@example.com" |
验证电子邮件格式 |
| url | "https://example.com" |
验证URL格式 |
| 多条记录链接 | ["recXXX", "recYYY"] |
记录ID数组 |
| 附件 | [{url: "https://..."}] |
附件对象数组 |
| 公式/汇总等。 | N/A | 只读字段 |
发展
# Install dependencies
npm install
# Run in development mode with auto-reload
npm run dev
# Build TypeScript
npm run build
# Watch mode for development
npm run watch
项目结构
.
├── src/
│ ├── index.ts # Main MCP server
│ ├── types/
│ │ └── airtable.ts # Type definitions
│ ├── utils/
│ │ ├── airtable-client.ts # Airtable client wrapper
│ │ └── field-converter.ts # Field type conversion utilities
│ └── handlers/ # Future: tool handlers
├── build/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md
为什么选择此服务器?
现有的Airtable MCP服务器只能处理简单的文本字段。此服务器:
- 正确处理 单选 字段(验证选项)
- 正确格式化 日期 和 日期时间 字段
- 转换 数字, 货币, 百分比 适当的字段
- 手柄 复选框 (布尔)字段
- 支持 多选, 附件, 记录链接
- 根据架构验证字段值
- 提供有用的错误消息
安全
此MCP服务器实施了全面的安全措施:
✅ 输入验证:所有输入均已Zod模式验证
✅ 配方注射剂保护:山宁泰字段名和转义值
✅ 错误清理:从错误消息中编辑敏感数据
✅ 字段过滤:自动排除大/敏感字段
✅ 速率限制意识:遵守API Airtable限制
✅ 依赖关系扫描:常规 npm audit 检查(目前0个漏洞)
关于安全问题:请审阅 安全.md 并私下向维护人员报告漏洞(而不是通过公开问题)。
Claude Desktop的最佳实践
始终使用字段过滤来防止超时并保护敏感数据:
{
"table": "Users",
"excludeAttachments": true, // ⭐ ALWAYS use this with Claude Desktop
"maxRecords": 100
}
或者在常见场景中使用预设:
{
"table": "Contacts",
"preset": "contact", // Safe preset (no attachments/long text)
"maxRecords": 50
}
监控API使用情况
气垫床限制:
- 每个基站每秒5个请求
- 每个工作区每天100000个电话
许可证
麻省理工学院
贡献
欢迎投稿!拜托:
- 审查 安全.md 安全指南
- 跑
npm audit提交前 - 为新功能添加测试
- 遵循现有代码样式
对于安全漏洞,请遵循 安全.md.
