Nocodb数据库MCP服务

通过Model Context Protocol提供对Nocodb数据库的CRUD操作接口,支持表记录检索、创建、更新和删除功能。

  • by granthooks
  • Python
  • 本地部署
  • 15 星标
  • 更新于
在 GitHub 查看 granthooks/Nocodb-MCP-Server

使用说明

Nocodb MCP服务器

此MCP服务器提供了通过模型上下文协议与Nocodb数据库交互的工具,为Nocodb表提供CRUD操作(创建、读取、更新、删除)。

安装

  1. 安装所需的依赖项:
pip install -r requirements.txt
  1. 确保您安装了MCP Python SDK(它应该与上述依赖项一起安装):
pip install "mcp[cli]"

配置

此MCP服务器需要三个环境变量:

  • NOCODB_URL:您的Nocodb实例的基本URL(例如。, https://example.com/ncdb)
  • NOCODB_API_TOKEN:用于使用Nocodb进行身份验证的API令牌
  • NOCODB_BASE_ID:您的Nocodb数据库的基本ID

您可以通过以下方式从Nocodb实例获取API令牌:

  1. 登录您的Nocodb实例
  2. 前往账户设置>API代币
  3. 创建具有适当权限的新令牌

基本ID可以在您的Nocodb仪表板的URL中找到: https://your-nocodb.com/dashboard/#/nc/base/YOUR_BASE_ID/table/...

用法

使用克劳德桌面

与整合 克劳德桌面,将此配置添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "nocodb": {
      "command": "python",
      "args": [
        "path/to/nocodb_mcp_server.py"
      ],
      "env": {
        "NOCODB_URL": "https://your-nocodb-instance.com",
        "NOCODB_API_TOKEN": "your_api_token_here",
        "NOCODB_BASE_ID": "your_base_id_here"
      }
    }
  }
}

或者使用MCP CLI进行安装(推荐):

# Basic installation
mcp install nocodb_mcp_server.py

# With environment variables
mcp install nocodb_mcp_server.py -v NOCODB_URL=https://your-nocodb-instance.com -v NOCODB_API_TOKEN=your_token -v NOCODB_BASE_ID=your_base_id

# OR using an .env file
mcp install nocodb_mcp_server.py -f .env

作为独立服务器运行

# Install dependencies
pip install -r requirements.txt

# Run the server directly
python nocodb_mcp_server.py

# Or using the MCP CLI
mcp run nocodb_mcp_server.py

发展模式

使用MCP检查员进行测试和调试:

# Run in development mode
mcp dev nocodb_mcp_server.py

光标位于Windows上

对于Windows上的光标,请在您的 mcp.json 配置文件:

{
  "mcpServers": {
    "nocodb": {
      "command": "C:\\Path\\To\\Your\\Python\\Executable",
      "args": [
        "C:\\Path\\To\\Your\\nocodb_mcp_server.py"
      ],
      "env": {
        "NOCODB_URL": "http://localhost:8080",
        "NOCODB_API_TOKEN": "your_api_token_here",
        "NOCODB_BASE_ID": "your_base_id_here"
      }
    }
  }
}

可用工具

服务器提供以下工具:

1.检索记录

从Nocodb表中检索一条或多条记录。

参数:

  • table_name:要查询的表的名称
  • row_id (可选):用于检索单个记录的特定行ID
  • filters (可选):Nocodb格式的过滤条件
  • limit (可选):要返回的最大记录数(默认值:10)
  • offset (可选):分页时要跳过的记录数(默认值:0)
  • sort (可选):排序依据的列
  • fields (可选):以逗号分隔的字段列表

示例:

# Get all records from a table (limited to 10)
retrieve_records(table_name="customers")

# Get a specific record by ID
retrieve_records(table_name="customers", row_id="123")

# Filter records with conditions
retrieve_records(
    table_name="customers", 
    filters="(age,gt,30)~and(status,eq,active)"
)

2.创建记录

在Nocodb表中创建一个或多个记录。

参数:

  • table_name:要插入的表的名称
  • data:带列的字典:值对或用于批量创建的此类字典列表
  • bulk (可选):设置为True进行批量创建

示例:

# Create a single record
create_records(
    table_name="customers",
    data={"name": "John Doe", "email": "john@example.com", "age": 35}
)

# Create multiple records in bulk
create_records(
    table_name="customers",
    data=[
        {"name": "John Doe", "email": "john@example.com", "age": 35},
        {"name": "Jane Smith", "email": "jane@example.com", "age": 28}
    ],
    bulk=True
)

3.更新记录

更新Nocodb表中的一条或多条记录。

参数:

  • table_name:要更新的表的名称
  • row_id:要更新的记录的ID(单个记录更新时需要)
  • data:带列的词典:要更新的值对
  • bulk (可选):设置为True进行批量更新
  • bulk_ids (可选):批量=True时要更新的记录ID列表

示例:

# Update a single record by ID
update_records(
    table_name="customers",
    row_id="123",
    data={"name": "John Smith", "status": "inactive"}
)

# Update multiple records in bulk by IDs
update_records(
    table_name="customers",
    data={"status": "inactive"},  # Same update applied to all records
    bulk=True,
    bulk_ids=["123", "456", "789"]
)

4.删除记录

从Nocodb表中删除一条或多条记录。

参数:

  • table_name:要从中删除的表的名称
  • row_id:要删除的记录的ID(删除单个记录时需要)
  • bulk (可选):设置为True进行批量删除
  • bulk_ids (可选):批量=True时要删除的记录ID列表

示例:

# Delete a single record by ID
delete_records(
    table_name="customers",
    row_id="123"
)

# Delete multiple records in bulk by IDs
delete_records(
    table_name="customers",
    bulk=True,
    bulk_ids=["123", "456", "789"]
)

5.get_schema

检索Nocodb表的架构(列)。

参数:

  • table_name:要获取架构的表的名称

退货:

  • 包含表架构或错误信息的字典。模式详细信息,包括列列表,通常嵌套在响应中。

例子:

# Get the schema for the "products" table
get_schema(table_name="products")

关于Nocodb API的说明

此MCP服务器与Nocodb v2 REST API交互,如 Nocodb API文件.

关键实施细节:

  • 对所有操作使用v2 API终结点
  • 从NOCODEB_base_ID环境变量获取基ID
  • 从表名自动解析表ID
  • 身份验证是通过 xc-token 标头(Nocodb v2 API要求)
  • 提供全面的错误处理和响应

REST API参考:

  • https://docs.nocodb.com/developer-resources/rest-APIs/overview
  • 特定端点: /api/v2/tables/{tableId}/records/... 和 /api/v2/meta/tables/{tableId}

认证

身份验证是通过 xc-token header,使用自动填充 NOCODB_API_TOKEN 环境变量。这是Nocodb v2 API所需的身份验证机制。

日志记录

服务器包括用于调试目的的日志记录。默认情况下,MCP服务器的日志级别设置为 ERROR 在……里面 nocodb_mcp_server.py ( mcp = FastMCP("Nocodb MCP Server", log_level="ERROR") )为了避免在标准操作期间产生过多的输出,例如 mcp list。如果需要更详细的日志进行故障排除,您可以取消注释 logging.basicConfig 分段并调整级别(例如。, level=logging.INFO 或 level=logging.DEBUG).

错误处理

如果操作失败,所有工具都会返回包含错误信息的结构化响应。这使得确定操作是否成功以及排除任何问题变得容易。

安全考虑

  • 使用专用的API令牌 您的操作只需要最小的权限。
  • 永远不要共享API令牌 在公共存储库或不安全的位置。
  • 限制数据库访问 仅通过Nocodb的许可系统进行必要的操作。
  • 启用日志记录和审核 在您的Nocodb实例中进行安全监控。
  • 定期审查和轮换API代币 以尽量减少安全风险。
  • 安全地存储环境变量尤其是在生产环境中。

安全最佳实践

对于安全设置:

  1. 创建专用的API令牌 在Nocodb中具有受限权限。
  2. 避免硬编码凭据--始终使用环境变量。
  3. 设置适当的表级权限 在Nocodb中限制访问。
  4. 启用审核日志 如果在您的Nocodb实例中可用。
  5. 定期检查数据库访问 以防止未经授权的访问。

⚠️ 重要: 始终遵循 最小特权原则 当配置API令牌和数据库访问时。