SeaTable MCP

SeaTable MCP

The official Model Context Protocol (MCP) server for SeaTable, built and maintained by SeaTable GmbH. It lets AI agents interact with data in your bases — reading, writing, searching, linking, and querying rows through a focused set of tools. The server intentionally focuses on data operations, not schema management (creating/deleting tables or columns), keeping the tool set lean and safe for auto

Category
访问服务器

README

SeaTable MCP

The official Model Context Protocol (MCP) server for SeaTable, built and maintained by SeaTable GmbH. It lets AI agents interact with data in your bases — reading, writing, searching, linking, and querying rows through a focused set of tools. The server intentionally focuses on data operations, not schema management (creating/deleting tables or columns), keeping the tool set lean and safe for autonomous agent use.

Quick Start

The fastest way to get started depends on your setup:

  • SeaTable Cloud — Use the hosted MCP server at mcp.seatable.com, no installation needed
  • Self-hosted SeaTable — Run the MCP server locally via npx in your IDE

SeaTable Cloud (hosted MCP server)

If you use SeaTable Cloud, there is a hosted MCP server ready to use — no installation required. Configure your MCP client with the Streamable HTTP endpoint:

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "seatable": {
      "type": "streamable-http",
      "url": "https://mcp.seatable.com/mcp",
      "headers": {
        "Authorization": "Bearer your-api-token"
      }
    }
  }
}

Cursor / VSCode — add to your MCP settings (JSON):

{
  "mcp.servers": {
    "seatable": {
      "type": "streamable-http",
      "url": "https://mcp.seatable.com/mcp",
      "headers": {
        "Authorization": "Bearer your-api-token"
      }
    }
  }
}

Self-hosted SeaTable

For self-hosted SeaTable instances, run the MCP server locally via npx. Your IDE starts and manages the process automatically.

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "seatable": {
      "command": "npx",
      "args": ["-y", "@seatable/mcp-seatable"],
      "env": {
        "SEATABLE_SERVER_URL": "https://your-seatable-server.com",
        "SEATABLE_API_TOKEN": "your-api-token"
      }
    }
  }
}

Cursor / VSCode — add to your MCP settings (JSON):

{
  "mcp.servers": {
    "seatable": {
      "command": "npx",
      "args": ["-y", "@seatable/mcp-seatable"],
      "env": {
        "SEATABLE_SERVER_URL": "https://your-seatable-server.com",
        "SEATABLE_API_TOKEN": "your-api-token"
      }
    }
  }
}

Deployment Options

If you need to run your own server instance — for example on your own infrastructure, with multi-base support, or in multi-tenant mode — use one of the options below.

HTTP Server (Network Access)

Run a local HTTP server with Streamable HTTP transport:

PORT=3001 npx -y @seatable/mcp-seatable --sse

# Health check
curl http://localhost:3001/health

# MCP endpoint: POST/GET/DELETE http://localhost:3001/mcp

Multi-Base (Selfhosted)

Serve multiple bases from a single process:

SEATABLE_SERVER_URL=https://your-seatable-server.com \
SEATABLE_BASES='[{"base_name":"CRM","api_token":"token_abc"},{"base_name":"Projects","api_token":"token_def"}]' \
npx -y @seatable/mcp-seatable

Each tool automatically gets a base parameter. Use list_bases to see available bases.

Managed Mode (Multi-Tenant HTTP)

For hosting an MCP endpoint where each client authenticates with their own SeaTable API token:

SEATABLE_MODE=managed \
SEATABLE_SERVER_URL=https://your-seatable-server.com \
PORT=3000 npx -y @seatable/mcp-seatable --sse

Clients pass their API token via Authorization: Bearer <token> on session initialization. The server validates the token against SeaTable and applies rate limits (60 req/min per token, 120/min per IP, 5 concurrent connections per token).

Docker

docker run -d --name seatable-mcp \
  -p 3000:3000 \
  -e SEATABLE_SERVER_URL=https://your-seatable-server.com \
  -e SEATABLE_API_TOKEN=your-api-token \
  seatable/seatable-mcp:latest

# Health check
curl http://localhost:3000/health

Security Model

The security characteristics differ significantly between transport modes:

stdio (default) Selfhosted HTTP Managed HTTP
Network exposure None (local process) TCP port, no auth TCP port, Bearer auth
Authentication Not needed (local) None Per-session token validated against SeaTable
Rate limiting None None Per-token, per-IP, global
Connection limits N/A None 5 concurrent sessions per token
Data scope All configured bases All configured bases One base per client token

⚠️ Warning: Selfhosted HTTP mode (--sse / --http) has no authentication. Anyone who can reach the port gets full access to all configured bases, including write and delete operations. Only run it in trusted networks (localhost, Docker-internal) or behind a reverse proxy that handles authentication. For untrusted networks, use managed mode instead.

Environment Variables

Required:

  • SEATABLE_SERVER_URL — Your SeaTable server URL

Authentication (one of these is required in selfhosted mode):

  • SEATABLE_API_TOKEN — Single-base API token
  • SEATABLE_BASES — Multi-base: JSON array (e.g. '[{"base_name":"CRM","api_token":"..."}]')

Optional:

  • SEATABLE_MODEselfhosted (default) or managed (multi-tenant HTTP with per-client auth)
  • SEATABLE_MOCK=true — Enable mock mode for offline testing
  • METRICS_PORT — Prometheus metrics port (default: 9090, HTTP mode only)

Monitoring

In HTTP mode, the server exposes Prometheus metrics on a separate port (default 9090):

curl http://localhost:9090/metrics

Available metrics:

Metric Type Description
mcp_tool_calls_total{tool, status} Counter Tool calls by name and result (success/error)
mcp_tool_calls_by_tool_total{tool} Counter Total calls per tool (regardless of outcome)
mcp_tool_duration_seconds{tool} Histogram Tool execution time
mcp_http_requests_total{method, status} Counter HTTP requests by method and status code
mcp_rate_limit_exceeded_total{type} Counter Rate limit rejections (global/per_ip/per_token)
mcp_auth_validations_total{result} Counter Auth validations (success/failure/cache_hit)
mcp_active_sessions Gauge Currently active HTTP sessions
mcp_active_connections Gauge Currently active connections
seatable_api_requests_total{operation, status} Counter SeaTable API calls by operation
seatable_api_duration_seconds{operation} Histogram SeaTable API latency

Plus standard Node.js metrics (memory, CPU, event loop) via prom-client.

The metrics server only starts in HTTP mode (not stdio) and binds to 0.0.0.0 — in Docker, expose the port only within your internal network.

MCP Tools

Schema Introspection

  • list_tables — Get all tables with metadata
  • get_schema — Get complete database structure
  • list_bases — List available bases (multi-base mode only)
  • list_collaborators — List users with access to the base (for collaborator columns)

Reading Data

  • list_rows — Paginated row listing with sorting
  • get_row — Retrieve specific row by ID
  • find_rows — Client-side filtering with DSL
  • search_rows — Search via SQL WHERE clauses
  • query_sql — Execute SQL queries with parameterized inputs

Writing Data

  • add_row — Add single new row
  • append_rows — Batch insert rows
  • update_rows — Batch update rows
  • upsert_rows — Insert or update rows by key columns
  • delete_rows — Remove rows by ID
  • upload_file — Upload a file or image to a row (base64-encoded)

Linking

  • link_rows — Create relationships between rows
  • unlink_rows — Remove relationships between rows

Utilities

  • add_select_options — Add new options to single-select or multi-select columns
  • ping_seatable — Health check with latency monitoring

Supported Column Types

SeaTable bases can contain many different column types. The following table shows which types can be written via the API and what format to use.

Column Type Writable Value Format
Text Yes "string"
Long Text Yes "Markdown string"
Number (incl. percent, currency) Yes 123.45
Checkbox Yes true / false
Date Yes "YYYY-MM-DD" or "YYYY-MM-DD HH:mm"
Duration Yes "h:mm" or "h:mm:ss"
Single Select Yes "option name"
Multiple Select Yes ["option a", "option b"]
Email Yes "user@example.com"
URL Yes "https://..."
Rating Yes 4 (integer)
Geolocation Yes {"lat": 52.52, "lng": 13.40}
Collaborator Yes ["0b995819003140ed8e9efe05e817b000@auth.local"] — use list_collaborators to get user IDs
Link Yes Use link_rows / unlink_rows tools
Image / File Yes Use upload_file tool with base64-encoded data
Formula / Link Formula No Read-only, computed by SeaTable
Creator / Created Time / Modified Time No Read-only, set automatically
Auto Number No Read-only, set automatically
Button / Digital Signature No Not accessible via API

Tool Examples

// List all tables
{ "tool": "list_tables", "args": {} }

// Get rows with pagination
{ "tool": "list_rows", "args": { "table": "Tasks", "page_size": 10, "order_by": "_ctime", "direction": "desc" } }

// Add rows
{ "tool": "append_rows", "args": { "table": "Tasks", "rows": [{ "Title": "New Task", "Status": "Todo" }] } }

// SQL query
{ "tool": "query_sql", "args": { "sql": "SELECT Status, COUNT(*) as count FROM Tasks GROUP BY Status" } }

Programmatic Usage

import { createMcpServer } from '@seatable/mcp-seatable'

const server = await createMcpServer({
  serverUrl: 'https://your-seatable-server.com',
  apiToken: 'your-api-token',
})

Mock Mode

SEATABLE_MOCK=true npm run dev

In-memory tables and rows for demos and tests without a live SeaTable instance.

Development

Prerequisites

  • Node.js >= 18

Setup

git clone https://github.com/seatable/seatable-mcp
cd seatable-mcp
npm install
cp .env.example .env   # Configure your SeaTable settings
npm run dev             # Start in watch mode

Scripts

  • npm run dev — Start server in watch mode (tsx)
  • npm run build — Compile TypeScript
  • npm run start — Run compiled server
  • npm test — Run tests (vitest)
  • npm run lint — Lint code
  • npm run typecheck — TypeScript type check

Testing Tools

node scripts/mcp-call.cjs ping_seatable '{}'
node scripts/mcp-call.cjs list_tables '{}'
node scripts/mcp-call.cjs list_rows '{"table": "Tasks", "page_size": 5}'

Troubleshooting

Issue Solution
Invalid API token Check SEATABLE_API_TOKEN
Base not found Check API token permissions
Connection timeout Check SEATABLE_SERVER_URL and network access
Permission denied Ensure API token has required base permissions
You don't have permission to perform this operation on this base. API token is read-only or row limit exceeded
Asset quota exceeded. Storage quota reached — delete files or upgrade plan
too many requests Rate-limited by SeaTable — requests are automatically retried with backoff (3 attempts)

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选