Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
METRICS_PORTNoPrometheus metrics port (default: 9090, HTTP mode only).9090
SEATABLE_MOCKNoEnable mock mode for offline testing (set to 'true').false
SEATABLE_MODENoOperation mode: 'selfhosted' (default) or 'managed' (multi-tenant HTTP with per-client auth).selfhosted
SEATABLE_BASESNoMulti-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_TOKENNoSingle-base API token. Required in self-hosted mode if SEATABLE_BASES is not provided.
SEATABLE_SERVER_URLYesYour SeaTable server URL (e.g., https://cloud.seatable.io or your own instance)
CORS_ALLOWED_ORIGINSNoComma-separated list of allowed origins for CORS (HTTP mode only, disabled if unset).

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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:

  • Quote table/column names with backticks: Table Name, Column Name (not double quotes). Required for names with spaces, hyphens, or names matching function names.

  • SELECT returns max 100 rows by default. Use LIMIT to get more (up to 10,000).

  • Aliases (AS) can be used in GROUP BY, HAVING, ORDER BY — but NOT in WHERE.

  • ORDER BY columns must appear in the SELECT field list.

  • No JOIN keyword. Use implicit joins: FROM T1, T2 WHERE T1.col = T2.col. Only inner joins are supported.

  • No subqueries, no UNION/UNION ALL.

  • Empty strings are treated as NULL. Use IS NULL / IS NOT NULL instead of = "".

  • Use ILIKE for case-insensitive matching (LIKE is case-sensitive).

  • For multi-select/collaborator columns use: HAS ANY OF, HAS ALL OF, HAS NONE OF, IS EXACTLY (values in parentheses like IN).

UPDATE limitations:

  • SET only accepts literal values (strings, numbers, booleans). No functions (date(), now(), upper()…) and no expressions (Amount + 10) allowed.

  • Columns not updatable via SQL: image, file, formula, link, link-formula, geolocation, auto-number, digital-sign, button.

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:

  • "text": file content returned as text (.txt, .csv, .md, .json, .xml, .html, .yaml, .sql, and common programming languages)

  • "pdf_text": extracted text from PDF files

  • "binary_url": non-text files, files >1 MB, or external URLs — content contains a message, download_link contains the URL

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seatable/seatable-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server