SeaTable MCP
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| METRICS_PORT | No | Prometheus metrics port (default: 9090, HTTP mode only). | 9090 |
| SEATABLE_MOCK | No | Enable mock mode for offline testing (set to 'true'). | false |
| SEATABLE_MODE | No | Operation mode: 'selfhosted' (default) or 'managed' (multi-tenant HTTP with per-client auth). | selfhosted |
| SEATABLE_BASES | No | Multi-base configuration as a JSON array string (e.g. '[{"base_name":"CRM","api_token":"token_abc"}]'). Required in self-hosted mode if SEATABLE_API_TOKEN is not provided. | |
| SEATABLE_API_TOKEN | No | Single-base API token. Required in self-hosted mode if SEATABLE_BASES is not provided. | |
| SEATABLE_SERVER_URL | Yes | Your SeaTable server URL (e.g., https://cloud.seatable.io or your own instance) | |
| CORS_ALLOWED_ORIGINS | No | Comma-separated list of allowed origins for CORS (HTTP mode only, disabled if unset). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_tablesA | List tables in the SeaTable base with their columns (name, type, key). Includes select options and link configuration where applicable. |
| list_rowsA | List rows from a table with pagination (defaults: page=1, page_size=100). Use find_rows for filtering/sorting or query_sql for SQL queries. |
| get_rowA | Get a row by ID from a table |
| add_rowA | Add a single row. For multiple rows, always use append_rows instead of calling add_row in a loop. Link and file/image columns cannot be set here — use link_rows and upload_file instead. |
| append_rowsA | Batch insert rows. Rejects unknown columns. Link and file/image columns cannot be set here — use link_rows and upload_file instead. Note: the response may contain column keys instead of column names due to a SeaTable API limitation. |
| update_rowsA | Batch update rows. Rejects unknown columns. Link and file/image columns cannot be modified here — use link_rows/unlink_rows and upload_file instead. |
| delete_rowsA | Delete one or more rows from a table by their IDs. |
| find_rowsA | Find rows using a predicate DSL. Filtering is performed client-side. where format: {"eq":{"field":"Name","value":"foo"}} or shorthand {"Name":"foo"}. Operators: eq, ne, in, gt, gte, lt, lte, contains, starts_with, ends_with, is_null. Combine with {"and":[...]} or {"or":[...]}. Negate with {"not":{...}}. |
| search_rowsB | Search rows with a filter object |
| upsert_rowsA | Batch upsert rows by matching on one or more key columns. If a match exists, update it; otherwise insert a new row. Rejects unknown columns. Link and file/image columns cannot be set here — use link_rows/unlink_rows and upload_file instead. |
| link_rowsA | Create links between rows via the dedicated links endpoint. This is the ONLY way to create links — link columns cannot be written via add_row or update_rows. |
| unlink_rowsA | Remove links between rows via the dedicated links endpoint. This is the ONLY way to remove links — link columns cannot be modified via update_rows. |
| get_schemaA | Returns the normalized schema for the base |
| query_sqlA | Execute SQL queries against SeaTable (SELECT, UPDATE, DELETE, INSERT). Use ? placeholders for parameters. Syntax rules:
UPDATE limitations:
INSERT only works with Big Data storage enabled (Enterprise). For non-archived tables, use append_rows instead. If a query fails, do not retry with similar syntax. Switch to an alternative tool (e.g. update_rows, find_rows) instead. |
| list_collaboratorsA | List users who have access to this base. Returns email (internal user ID) and display name. Use the email values when writing to collaborator columns. Call this once to resolve @auth.local addresses in collaborator columns before displaying them to the user. |
| upload_fileA | Upload a file or image to a row. Accepts base64-encoded file data and attaches it to the specified file or image column. By default appends to existing files; set replace=true to overwrite. |
| download_fileA | Read the content of a file attached to a row in a file or image column. Use get_row first to see available files in the column, then pass the exact file_name to select a specific file. Returns JSON with: file_name, file_size (bytes), content, content_type, and download_link (only when content_type is "binary_url"). content_type values:
|
| create_snapshotA | Create a snapshot of the current base. Requires at least one change since the last snapshot and at least 10 minutes since the last snapshot. |
| get_row_activitiesA | Get the change history of a specific row. Returns a list of activities showing who changed what and when, including old and new values. 25 activities per page. |
| add_select_optionsA | Add new options to a single-select or multi-select column. Use this before writing rows with option values that do not exist yet. |
| ping_seatableA | Health check that verifies connectivity and auth to SeaTable |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Most tools have distinct purposes (e.g., add_row vs. append_rows, find_rows vs. list_rows vs. search_rows). However, add_row and append_rows could cause confusion, though descriptions clearly advise using append_rows for multiple rows. Similarly, list_rows, find_rows, search_rows, and query_sql overlap in querying but differ in method, with clear guidance on when to use each.
Tool names follow a consistent verb_noun pattern (e.g., add_row, delete_rows, list_rows, update_rows, upload_file). Minor deviations: ping_seatable (ping is not a data operation) and query_sql (verb before the type). Overall, most tools are predictable and follow the same style.
With 21 tools, the count is slightly high but reasonable given the breadth of operations (CRUD, linking, file handling, SQL queries, snapshots). Each tool serves a specific need, and the number aligns well with a comprehensive database-like API. No obvious bloat.
The tool set covers most essential operations: CRUD for rows (add, get, update, delete, upsert), linking, file upload/download, search, schema inspection, and snapshots. Minor gaps: no tool to modify table schema directly (only add_select_options), and no bulk delete or export functionality. Overall, very thorough for a typical use case.