使用说明
Airtable MCP服务器
用于Airtable集成的模型上下文协议(MCP)服务器,允许AI助手从Airtable库中检索记录。
🚀 快速开始
先决条件
- Node.js 18+
- Airtable 个人访问令牌
- 带无障碍桌子的Airtable基座
安装
-
克隆并设置项目:
git clone <repository-url> cd airtable-mcp-server npm install -
获取您的Airtable个人访问令牌:
- 访问https://airtable.com/create/tokens
- 为目标库创建具有读取权限的新令牌
- 复制令牌(格式:
patXXXXXXXXXXXXXX.xxxxxxxxxx...)
-
配置环境:
cp .env.example .env # Edit .env and set your AIRTABLE_PERSONAL_ACCESS_TOKEN -
构建和测试:
npm run build npm start
🔧 用法
服务器提供了一个工具: getAirtableRecord
刀具参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
recordId |
string | Yes | Airtable记录ID(格式: recXXXXXXXXXXXXXX) |
baseId |
string | 是 | Airtable基ID(格式: appXXXXXXXXXXXXXX) |
tableName |
string | Yes | 包含记录的表的名称 |
示例用法
输入:
{
"recordId": "recABC123DEF456",
"baseId": "appXYZ789ABC123",
"tableName": "Artists"
}
输出:
{
"content": [
{
"type": "text",
"text": "{\"id\":\"recABC123DEF456\",\"fields\":{\"Name\":\"Vincent van Gogh\",\"Bio\":\"Dutch painter...\",\"Genre\":[\"Post-Impressionism\"]},\"createdTime\":\"2024-01-15T10:30:00.000Z\"}"
}
]
}
🔗 MCP客户端集成
克劳德桌面
添加到您的 ~/.claude/mcp.json (参见 examples/claude-desktop.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["/path/to/airtable-mcp-server/dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
}
}
}
}
光标IDE
添加到您的 .cursor/mcp.json (参见 examples/cursor-ide.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
}
}
}
}
VS代码
添加到MCP配置中(请参阅 examples/vscode.json):
{
"mcpServers": {
"airtable": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"AIRTABLE_PERSONAL_ACCESS_TOKEN": "your_token_here"
},
"transport": "stdio"
}
}
}
全球安装(NPM)
npm install -g airtable-mcp-server
# Then in your MCP client config:
{
"command": "npx",
"args": ["-y", "airtable-mcp-server@latest"]
}
🛠️ 发展
脚本
| 命令 | 描述 |
|---|---|
npm run dev |
热装开发模式 |
npm run build |
将TypeScript编译为JavaScript |
npm start |
运行已编译的服务器 |
npm run clean |
删除构建工件 |
npm test |
运行单元测试 |
npm run test:integration |
运行集成测试 |
npm run test:all |
运行所有测试 |
项目结构
airtable-mcp-server/
├── src/
│ ├── index.ts # Server entry point
│ ├── config/
│ │ ├── index.ts # Configuration management
│ │ └── validation.ts # Config validation
│ ├── tools/
│ │ ├── index.ts # Tool registry
│ │ └── getRecord.ts # Record retrieval tool
│ ├── types/
│ │ └── index.ts # Type definitions
│ └── utils/
│ ├── error.ts # Error handling
│ └── validation.ts # Input validation
├── tests/
│ ├── integration.test.ts # Integration tests
│ ├── unit/
│ │ └── tools.test.ts # Unit tests
│ └── fixtures/
│ └── sample-record.json # Test data
├── examples/
│ ├── claude-desktop.json # Claude Desktop config
│ ├── cursor-ide.json # Cursor IDE config
│ ├── vscode.json # VS Code config
│ └── usage.md # Usage examples
├── docs/
│ └── DEPLOYMENT.md # Deployment guide
├── dist/ # Compiled JavaScript (generated)
├── PRD.md # Product requirements
├── CLAUDE.md # Claude Code guidance
├── package.json
├── tsconfig.json
├── .env.example
└── README.md
🔒 安全
许可证管理
- 仅限环境:从不将令牌提交到版本控制
- 最小范围:仅对目标库使用只读权限
- 代币轮换:支持在需要时刷新令牌
输入验证
- 记录ID必须与模式匹配:
rec[A-Za-z0-9]{14} - 基本ID必须与模式匹配:
app[A-Za-z0-9]{14} - 表名经过消毒,以确保安全使用
速率限制
- 尊重Airtable的5个请求/秒/基本限制
- 对速率限制错误实施指数回退
- 可配置的重试尝试和延迟
⚙️ 配置
环境变量:
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
AIRTABLE_PERSONAL_ACCESS_TOKEN |
是 | - | 您的Airtable PAT |
AIRTABLE_TIMEOUT |
否 | 30000 | 请求超时(毫秒) |
AIRTABLE_RETRY_ATTEMPTS |
否 | 3 | 重试次数 |
AIRTABLE_RETRY_DELAY |
否 | 1000 | 重试延迟(毫秒) |
🚨 错误处理
服务器处理各种错误情况:
| 错误类型 | HTTP状态 | 描述 |
|---|---|---|
| 记录ID无效 | 404 | 找不到记录或格式无效 |
| 身份验证失败 | 401 | 令牌无效或过期 |
| 禁止访问 | 403 | 令牌缺少权限 |
| 超出速率限制 | 429 | 请求太多 |
| 无效参数 | 422 | 请求数据格式错误 |
| 服务器错误 | 500+ | Airtable服务问题 |
所有错误都会返回带有有用消息的结构化响应。
📊 演出
满足要求
- ✅ 响应时间:记录检索时间<2秒
- ✅ 内存使用:<50MB基线占用空间
- ✅ 并发请求:最多可处理Airtable的速率限制
- ✅ 错误恢复:优雅的操控,指数级回退
监控
- 请求/响应日志记录到stderr
- 启动时的配置验证
- 用于调试的结构化错误消息
🧪 测试
手动测试
-
有效记录检索:
# Replace with your actual IDs echo '{"recordId":"recYourRecordId","baseId":"appYourBaseId","tableName":"YourTable"}' | node dist/index.js -
错误场景:
- 记录ID格式无效
- 不存在记录
- 无效的基本ID
- 缺少权限
- 速率限制
测试用例
该实施包括对以下内容的全面错误处理:
- ✅ 成功检索记录
- ✅ 验证错误(ID格式无效)
- ✅ 身份验证失败(401/403)
- ✅ 未发现错误(404)
- ✅ 速率限制(429)
- ✅ 服务器错误(500+)
🔄 未来的增强功能
计划的功能
- 其他工具:创建、更新、删除操作
- 批量操作:多记录处理
- 高级查询:基于公式的过滤
- 字段选择:粒度字段检索
- HTTP传输:REST API支持
- 缓存:基于Redis的响应缓存
生产特点
- OAuth集成
- 多基地支持
- 审核日志记录
- 高可用性部署
🆘 故障排除
常见问题
服务器无法启动:
- 检查一下
AIRTABLE_PERSONAL_ACCESS_TOKEN已设置 - 验证令牌是否具有目标库的读取权限
- 确保已安装Node.js 18+
身份验证错误:
- 验证令牌是否有效且未过期
- 检查令牌是否可以访问指定的基
- 确认基本ID格式:
appXXXXXXXXXXXXXX
未找到记录:
- 验证记录ID格式:
recXXXXXXXXXXXXXX - 检查指定表中是否存在记录
- 确认表名完全正确(区分大小写)
速率限制:
- 降低请求频率
- 实现请求之间的延迟
- 监视Airtable使用限制
调试模式
启用详细日志记录:
DEBUG=* npm run dev
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件。
🤝 贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加新功能的测试
- 提交拉取请求
📚 资源
版本: 1.0.0
兼容:克劳德桌面,光标IDE,VS代码MCP扩展
Node.js:需要18+
空气表API:个人访问令牌身份验证