🚀 Airtable OAuth MCP 服务器
Airtable OAuth MCP 服务器是一个具备安全 OAuth 2.0 认证的模型上下文协议 (MCP) 服务器,可用于生产环境。该服务器使 AI 助手和应用程序能够通过标准化的 MCP 接口与 Airtable 数据库进行交互,为所有 Airtable 操作提供完整的 API 覆盖。
🚀 快速开始
1. 安装
克隆仓库并安装依赖项:
git clone https://github.com/onimsha/airtable-mcp-server-oauth.git
cd airtable-mcp-server-oauth
uv sync
2. Airtable OAuth 设置
- 创建 Airtable OAuth 应用程序:
- 访问 Airtable 开发者中心。
- 创建一个新的 OAuth 集成。
- 记录下
Client ID
和 Client Secret
。
- 将重定向 URI 设置为
http://localhost:8000/oauth/callback
。
3. 环境配置
复制环境模板并配置凭证:
cp .env.example .env
编辑 .env
文件并填入相应的值:
AIRTABLE_CLIENT_ID="your_airtable_client_id_here"
AIRTABLE_CLIENT_SECRET="your_airtable_client_secret_here"
AIRTABLE_REDIRECT_URI="http://localhost:8000/oauth/callback"
HOST="0.0.0.0"
PORT=8000
LOG_LEVEL="INFO"
4. 使用 MCP 检查器进行测试
使用官方 MCP 检查器来测试并与服务器进行交互:
- 启动服务器:
uv run python -m airtable_mcp http
- 打开 MCP 检查器:
访问 https://modelcontextprotocol.io/docs/tools/inspector。
- 连接到服务器:
- 选择 "HTTP Streaming" 传输协议。
- 输入 URL:
http://localhost:8000/mcp
。
- 点击 "Connect"。
- 使用 Airtable 进行身份验证:
- 服务器将引导你完成 OAuth 身份验证。
- 使用检查器测试可用的 MCP 工具。
5. 运行服务器
STDIO 传输(默认):
uv run python -m airtable_mcp
uv run airtable-oauth-mcp
HTTP 传输:
uv run python -m airtable_mcp http
uv run python -m airtable_mcp http localhost 8001
其他选项:
uv run python -m airtable_mcp --log-level DEBUG
uv run python -m airtable_mcp --help
uv run python -m airtable_mcp --version
HTTP 服务器将在 http://localhost:8000/
(或自定义主机:端口)上可用,并带有用于 Web 集成的 OAuth 端点。
✨ 主要特性
核心功能
- 🔐 OAuth 2.0 认证:与 Airtable 进行基于安全令牌的身份验证。
- 📊 完整的 Airtable API 覆盖:10 个全面的 MCP 工具,涵盖所有操作。
- ⚡ FastMCP 框架:基于高性能的 FastMCP 框架构建。
- ☁️ 支持云部署:支持生产环境部署。
- 🔄 双传输协议:支持 STDIO 和 HTTP 传输协议。
安全性和可靠性
- 🔑 基于环境的配置:安全的凭证管理。
- ✅ 类型安全:使用 Pydantic 提供完整的类型提示和验证。
- 🧪 全面测试:使用 pytest 进行单元测试并提供覆盖率报告。
- 📝 代码质量:使用 Ruff 进行代码检查,使用 MyPy 进行类型检查。
开发者体验
- 📚 丰富的文档:提供全面的设置和使用指南。
- 🔧 易于设置:使用 uv 包管理器进行简单安装。
- 🎯 类型化参数:清晰的类型化工具参数,提供更好的 IDE 支持。
- 🔍 灵活查询:具备高级过滤、排序和搜索功能。
📦 安装指南
前提条件
- Python 3.11+:使用最新的 Python 版本以获得最佳性能。
- uv:快速 Python 包管理器(安装指南)。
- Airtable 开发者账户:用于创建 OAuth 应用程序(注册)。
💻 使用示例
基础用法
records = await client.call_tool("list_records", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY"
})
new_record = await client.call_tool("create_record", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY",
"fields": {
"Name": "John Doe",
"Email": "john@example.com",
"Status": "Active"
}
})
filtered_records = await client.call_tool("search_records", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY",
"filter_by_formula": "AND({Status} = 'Active', {Email} != '')",
"fields": ["Name", "Email", "Status"]
})
高级用法
records = await client.call_tool("list_records", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY",
"view": "Grid view",
"filter_by_formula": "{Priority} = 'High'",
"sort": [
{"field": "Created", "direction": "desc"},
{"field": "Name", "direction": "asc"}
],
"fields": ["Name", "Priority", "Created", "Status"]
})
batch_create = await client.call_tool("create_records", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY",
"records": [
{"fields": {"Name": "Record 1", "Value": 100}},
{"fields": {"Name": "Record 2", "Value": 200}},
{"fields": {"Name": "Record 3", "Value": 300}}
],
"typecast": True
})
模式发现
bases = await client.call_tool("list_bases")
table_info = await client.call_tool("describe_table", {
"base_id": "appXXXXXXXXXXXXXX",
"table_id": "tblYYYYYYYYYYYYYY"
})
tables = await client.call_tool("list_tables", {
"base_id": "appXXXXXXXXXXXXXX",
"detail_level": "full"
})
📚 详细文档
可用的 MCP 工具
服务器为 Airtable 操作提供了 10 个 MCP 工具:
数据库操作:
list_bases()
- 列出所有可访问的数据库。
list_tables(base_id, detail_level?)
- 列出数据库中的表。
describe_table(base_id, table_id)
- 获取表的详细模式。
记录操作:
list_records(base_id, table_id, view?, filter_by_formula?, sort?, fields?)
- 带过滤条件列出记录。
get_record(base_id, table_id, record_id)
- 获取特定记录。
create_record(base_id, table_id, fields, typecast?)
- 创建单条记录。
create_records(base_id, table_id, records, typecast?)
- 创建多条记录。
update_records(base_id, table_id, records, typecast?)
- 更新多条记录。
delete_records(base_id, table_id, record_ids)
- 删除多条记录。
search_records(base_id, table_id, filter_by_formula, view?, fields?)
- 使用公式搜索记录。
所有工具现在使用类型化参数而非通用的 args
,这使得它们对 MCP 客户端更加透明。
参数灵活性:
fields
参数可以接受单个字段名(字符串)或字段名数组。
sort
参数期望一个对象数组:[{"field": "Name", "direction": "asc"}]
。
其他资源
🔧 技术细节
开发入门
- 分叉并克隆仓库:
git clone https://github.com/onimsha/airtable-mcp-server-oauth.git
cd airtable-mcp-server-oauth
- 设置开发环境:
uv sync --all-extras
- 运行测试:
uv run pytest
uv run pytest --cov=src/airtable_mcp --cov-report=html
代码质量
类型检查:
uv run mypy src/
代码检查:
uv run ruff check src/
uv run ruff format src/
预提交钩子:
pip install pre-commit
pre-commit install
测试
项目包含全面的测试覆盖:
- 单元测试:测试单个组件和函数。
- 集成测试:测试 OAuth 流程和 Airtable API 交互。
- 覆盖率报告:确保代码覆盖率 >90%。
uv run pytest
uv run pytest --cov=src/airtable_mcp
uv run pytest tests/test_oauth.py
uv run pytest tests/test_tools.py
项目结构
src/
├── airtable_mcp/ # 主要的 MCP 服务器包
│ ├── __init__.py # 包初始化
│ ├── __main__.py # 模块入口点
│ ├── main.py # CLI 和应用程序入口
│ ├── api/ # Airtable API 客户端
│ │ ├── __init__.py
│ │ ├── client.py # Airtable API 的 HTTP 客户端
│ │ ├── exceptions.py # API 特定的异常
│ │ └── models.py # API 响应的 Pydantic 模型
│ └── mcp/ # MCP 服务器实现
│ ├── __init__.py
│ ├── schemas.py # MCP 工具模式
│ └── server.py # 带有工具的 FastMCP 服务器
└── mcp_oauth_lib/ # 可重用的 OAuth 库
├── __init__.py # 库初始化
├── auth/ # 认证组件
│ ├── __init__.py
│ ├── context.py # 认证上下文管理
│ ├── middleware.py # OAuth 中间件
│ └── utils.py # 认证实用工具
├── core/ # 核心 OAuth 功能
│ ├── __init__.py
│ ├── config.py # OAuth 配置
│ ├── flow.py # OAuth 流程实现
│ └── server.py # OAuth 服务器端点
├── providers/ # OAuth 提供商实现
│ ├── __init__.py
│ ├── airtable.py # Airtable OAuth 提供商
│ └── base.py # 基础提供商接口
└── utils/ # OAuth 实用工具
├── __init__.py
├── pkce.py # PKCE 实现
└── state.py # 状态管理
配置
所有配置通过环境变量(从 .env
文件加载)进行处理:
必需变量
AIRTABLE_CLIENT_ID
- 来自 Airtable 的 OAuth 客户端 ID。
AIRTABLE_CLIENT_SECRET
- OAuth 客户端密钥。
AIRTABLE_REDIRECT_URI
- OAuth 回调 URL。
可选变量
HOST
- 服务器主机(默认:0.0.0.0
)。
PORT
- 服务器端口(默认:8000
)。
LOG_LEVEL
- 日志级别(默认:INFO
)。
MCP_SERVER_NAME
- 服务器名称(可选)。
MCP_SERVER_VERSION
- 服务器版本(可选)。
🤝 贡献指南
我们欢迎贡献!请遵循以下贡献指南:
- 分叉仓库并创建一个功能分支。
- 编写测试:为任何新功能编写测试。
- 确保代码质量:使用我们的代码检查和格式化工具。
- 更新文档:为任何 API 更改更新文档。
- 提交拉取请求:并提供清晰的描述。
贡献领域
- 🐛 修复 bug:帮助我们解决问题。
- ✨ 新功能:添加新的 Airtable API 端点。
- 📚 文档:改进设置指南和示例。
- 🧪 测试:提高测试覆盖率。
- 🚀 性能:优化 API 调用和缓存。
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
🙏 致谢
📞 支持