Skip to main content
Glama
HamishLacmane

nocodb-mcp-connector

nocodb-mcp-connector (Python)

An MCP server that exposes a NocoDB base (bases, tables, records, linked records) as tools, so Claude can read/write your NocoDB data the same way it can with the built-in Airtable connector.

Python implementation of this connector. There's also a TypeScript version with the identical tool set — pick whichever fits your stack. This is the primary/maintained one.

Built as a self-serve open-source template: you deploy your own instance with your own NocoDB account and your own auth secret. There's no shared hosted service — each user runs their own copy.

Tools

Same 13 tools as the TypeScript version: list_workspaces, list_bases, list_tables, get_table_schema, list_records, get_record, count_records, create_records, update_records, delete_records, list_linked_records, link_records, unlink_records. Create/update/delete all accept either a single record or a list for batching.

Related MCP server: Test MCP Server

1. Get a free NocoDB instance

Sign up at https://app.nocodb.com (free plan — 50,000 records, well above Airtable's 1,000-record free cap). Import your Airtable base directly (Base -> Import -> Airtable) or start empty. Get an API token: avatar (bottom left) -> Account Settings -> Tokens -> Create New Token.

2. Local setup

Requires Python 3.10+.

python -m venv .venv
.venv\Scripts\activate          # Windows
pip install -e .
cp .env.example .env            # fill in NOCODB_BASE_URL / NOCODB_API_TOKEN

3. Run locally (stdio, for Claude Desktop/Code)

nocodb-mcp-connector

Add it to your MCP client config, e.g. claude_desktop_config.json:

{
  "mcpServers": {
    "nocodb": {
      "command": "C:\\path\\to\\nocodb-mcp-connector-py\\.venv\\Scripts\\python.exe",
      "args": ["-m", "nocodb_mcp_connector.stdio"],
      "env": {
        "NOCODB_BASE_URL": "https://app.nocodb.com",
        "NOCODB_API_TOKEN": "your-token-here"
      }
    }
  }
}

4. Deploy to Render (for claude.ai custom connector)

claude.ai's custom connectors need a public HTTPS URL, so this repo ships an HTTP entry point (nocodb_mcp_connector.http) alongside the local one — a stateless Streamable HTTP server, since NocoDB itself holds all the actual state.

  1. Push this repo to GitHub.

  2. In Render: New -> Blueprint, point it at the repo (render.yaml is already set up: free plan, pip install -e ., health check on /health).

  3. Set the three env vars Render will prompt for:

    • NOCODB_BASE_URL, NOCODB_API_TOKEN — your NocoDB credentials.

    • MCP_AUTH_TOKEN — a secret you generate yourself (openssl rand -hex 32 or similar). This is what stops random people on the internet from hitting your NocoDB data through the public URL — it's checked with a constant-time comparison against the Authorization: Bearer <token> header on every /mcp request.

  4. Deploy. Render's free tier sleeps after 15 min idle — expect a ~30-60s cold start on the first request after a gap.

  5. In claude.ai: Settings -> Connectors -> Add custom connector.

    • URL: https://<your-app>.onrender.com/mcp

    • Auth: Request headers -> Authorization: Bearer <the same MCP_AUTH_TOKEN>

/health is intentionally left unauthenticated (Render's health check needs to reach it) — it only ever returns "ok", no data.

Notes on the MCP SDK version

This was built against mcp 2.0.0 — the high-level server class is mcp.server.mcpserver.MCPServer (older tutorials referencing FastMCP from mcp.server.fastmcp predate this rename). If you see import errors after a pip install --upgrade mcp, check mcp's changelog for further API moves.

Verifying against your instance

The NocoDB v2 API endpoint shapes here mirror the TypeScript version — see its README for the same caveat: verified against documented behavior, not a live Swagger scrape, so double-check against a real base once you have one.

Smoke test

Stdio (requires the MCP initialize handshake before tools/list will respond — see the TS README for the exact three-line payload):

python -m nocodb_mcp_connector.stdio

HTTP, once running (nocodb-mcp-connector-http or python -m nocodb_mcp_connector.http):

curl http://localhost:3000/health
# "ok"

curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'

Available Tools

13 tools
count_recordsB

Count records in a table, optionally matching a filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNo
table_idYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full behavioral disclosure burden. It states that counting is a read operation and that a filter is optional, but it does not disclose return format, edge cases, performance implications, or any limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that immediately states the core action and the optional filter. There is zero wasted text and it is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of a count operation, the description covers the basic purpose but lacks essential context: with no output schema, it should specify the return type (e.g., an integer count) and any relevant behavior such as how counts handle empty results. It is minimally complete but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the schema's lack of explanatory text. It only loosely maps 'table' to table_id and 'filter' to where, without explaining the filter syntax or format. This is insufficient for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Count' and identifies the resource as 'records in a table', clearly distinguishing it from siblings like list_records or get_record. The optional filter adds precision about scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use count_records versus alternatives such as list_records or get_record. The description does not mention exclusions, prerequisites, or alternative tools, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recordsB

Create one or more records in a table.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesSingle field-map (field name -> value, using field names from get_table_schema) to create one record, or a list of field-maps to batch-create.
table_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions batch creation ('one or more') but does not disclose potential side effects, permissions required, error behavior, or whether created records receive IDs. A mutation tool with zero annotation coverage should provide more behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler. It effectively conveys the core purpose without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutation tool with no annotations, no output schema, and an undocumented required parameter (table_id). The description does not cover return values, failure modes, or any prerequisites such as needing to call get_table_schema first. It is incomplete for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: only 'records' has a description, while 'table_id' is not described. The tool description adds no parameter-level explanation beyond the schema. With half the parameters undocumented and no description compensation, parameter semantics are weak.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create one or more records in a table' clearly states the action (create), the resource (records), and the scope (a table). It distinguishes from sibling tools like update_records and delete_records through the verb 'create' and supports both single and batch creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for inserting new records but does not explicitly state when to use this tool versus alternatives like update_records or when not to use it. No exclusions or alternative recommendations are provided, leaving the agent to infer from the verb 'create'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_recordsC

Delete one or more records by Id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesA single record Id, or a list of Ids to batch-delete.
table_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry the burden of behavioral disclosure. It only says 'Delete' without mentioning irreversibility, permissions, consequences for linked records, or batch-delete behavior, which is minimal disclosure for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words. It is concise, though the brevity sacrifices valuable contextual information, making it somewhat under-specified for a destructive tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple, but the description omits important details such as return values, batch-delete semantics, and irreversibility. With no output schema and no annotations, the description leaves the agent with only a basic understanding of the full operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents 'ids' as a single Id or list, but 'table_id' has no schema description, and schema description coverage is only 50%. The description adds no extra meaning beyond the word 'Id', failing to compensate for the undocumented 'table_id' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Delete' with resource 'records' and the selection mechanism 'by Id', which clearly distinguishes it from sibling tools like create_records, update_records, and list_records. It precisely states what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, prerequisites, or exclusion cases. The description only states the action, leaving the agent to infer when deletion is appropriate from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recordB

Get a single record by its Id.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_idYes
record_idYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must bear the full burden of behavioral disclosure. It only states that the tool performs a 'get' operation, which implies read-only behavior, but does not disclose error handling (e.g., whether a missing record throws an error or returns null), permission requirements, or rate limits. The description adds no context beyond the operation itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence that immediately conveys the core action. There is no redundant wording or filler; every word contributes to the purpose. This is appropriately sized for a simple getter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required parameters, no output schema or annotations), the description is mostly sufficient for an agent to understand its basic function. However, the lack of behavioral details (e.g., not-found behavior) and absence of any guidance on return format means the description is not fully complete, especially in the absence of annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate by explaining the parameters. It mentions 'by its Id,' which relates to record_id, but it does not clarify what table_id is for or how the two IDs interact. The parameter names are self-explanatory, but the description adds little semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get a single record by its Id' is specific with a clear verb ('get'), resource ('record'), and scope ('single by Id'). This distinguishes it from siblings like list_records (which lists multiple) and create/update/delete records, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a specific record ID is known, but it does not explicitly contrast with list_records or provide criteria for when to choose this tool over alternatives. No exclusions or alternative references are given, so usage guidance is only implicit from the verb and parameter names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_table_schemaA

Get full schema for a table: its fields/columns, types, options (e.g. select choices), and relational (Links) fields with their linkFieldId. Call this before creating/updating records so you know valid field names and link field ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_idYesTable ID, from list_tables

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the burden of behavioral disclosure. It does explain what the tool returns and notes it is used for field validation, but it does not disclose potential errors, rate limits, or confirm read-only behavior beyond the verb 'Get'. It adds meaningful context but falls short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first defines the tool's purpose with a detailed breakdown of content, and the second gives actionable usage advice. There is no redundancy or filler; it is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations and no output schema, the description provides a complete picture: what the schema contains, how to use table_id (via schema), and why to call it before mutations. This is sufficient for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description for table_id ('Table ID, from list_tables') already covers the parameter fully, giving 100% schema description coverage. The tool description does not add extra meaning about the parameter's format or usage, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Get full schema for a table' and enumerates exactly what the schema includes (fields/columns, types, options, relational fields with linkFieldId). This is a specific verb+resource formulation that distinguishes it from siblings like list_tables or get_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Call this before creating/updating records so you know valid field names and link field ids.' This provides clear contextual guidance for when to use it. It does not mention when not to use it or point to alternatives, but none are obvious for schema retrieval, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_basesA

List NocoDB bases (projects) visible to this API token. Pass workspace_id on NocoDB Cloud if you have multiple workspaces; omit it for self-hosted OSS instances.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idNoWorkspace ID, from list_workspaces (Cloud only)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It adds useful context about API token visibility and platform-specific parameter behavior, but it does not describe the return format, pagination, or potential errors. This is a modest disclosure for a simple list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and every word contributes value. No redundant or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single optional parameter and no output schema, the description covers the essential purpose and usage context. However, it leaves minor ambiguity about whether workspace_id is required on Cloud when multiple workspaces exist, and it does not hint at the return structure. These are minor gaps for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already documents the workspace_id parameter well (100% coverage), the description adds practical meaning by explaining when to pass it and when to omit it (Cloud vs. self-hosted). This goes beyond the schema's static description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List NocoDB bases (projects) visible to this API token.' It uses a specific verb and resource, and the mention of 'bases (projects)' distinguishes it from sibling tools like list_workspaces and list_tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to pass the workspace_id parameter: 'on NocoDB Cloud if you have multiple workspaces' and to omit it for self-hosted instances. It doesn't explicitly name alternative tools, but for a list operation the usage context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_linked_recordsB

List the records currently linked to a given record through a relational (Links) field.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
table_idYes
record_idYes
link_field_idYesThe link field's id, from get_table_schema

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry full behavioral burden. It does not disclose whether linked record IDs or full records are returned, does not mention pagination, and does not clarify ordering or other behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise, and front-loaded with the action. Every word is purposeful with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, no output schema, and no annotations, this tool requires more context. The description omits return shape, pagination behavior, and usage tips, leaving the agent under-informed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only link_field_id is described). The tool description adds no explicit explanations for table_id, record_id, limit, or offset, and does little to compensate for the low schema coverage beyond implying record_id from 'given record'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists records linked to a given record via a relational Links field. It uses a specific verb and resource and distinguishes from siblings like list_records or link_records by focusing on existing links.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as list_records or get_record. The description only states what it does, not the context or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recordsA

List records from a table, with optional filtering, sorting, field selection, and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoComma-separated sort fields, e.g. -CreatedAt,Name
limitNoMax records to return (default 25)
whereNoNocoDB filter expression, e.g. (Status,eq,Done)~and(Priority,eq,High)
fieldsNoComma-separated field names to return
offsetNoNumber of records to skip
view_idNoRestrict results to a specific view
table_idYesTable ID, from list_tables

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It states the core capabilities but does not explicitly confirm the operation is read-only, describe the return format, or mention any side effects. While 'list' implies a read operation, the lack of an output schema and explicit behavioral notes limits transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 14 words, efficiently conveying the primary purpose and key optional features without redundancy. It is front-loaded with the verb and resource, making it immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (7 parameters) and the absence of an output schema, the description plus the comprehensive parameter descriptions provide a fairly complete picture for an agent to invoke the tool correctly. However, explicitly stating that it returns a list of record objects or confirming the read-only nature would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides comprehensive descriptions for all 7 parameters, including examples for 'sort' and 'where', and the 'table_id' description references list_tables. The description itself adds no additional parameter semantics beyond what the schema already covers, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with the resource 'records from a table', clearly distinguishing from sibling tools like list_tables (which lists tables) and get_record (which fetches a single record). It also enumerates key optional capabilities (filtering, sorting, field selection, pagination), leaving no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving table records with flexible options, but it does not explicitly state when to choose this over alternatives like list_linked_records or count_records. No exclusions or alternative tool names are mentioned, so the agent must infer from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tablesA

List tables within a NocoDB base, including each table's id, name, and type.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_idYesBase ID, from list_bases

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions output fields but does not state that the operation is read-only, any permissions required, or behavior on invalid base_id. The word 'List' implies a read operation, but this is not explicitly confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that immediately states the action and scope, with no redundant words. It is front-loaded with the core purpose and includes the key output fields without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple, one-parameter listing tool. The description specifies the return fields (id, name, type), which is important since there is no output schema. It is complete enough for an agent to understand the scope and result, though it lacks explicit edge-case handling (e.g., invalid base_id) or read-only guarantees, which would make it truly comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter (base_id), and the description adds the context that this parameter identifies the base to list tables from. However, no additional semantic details are provided beyond what the schema's 'Base ID, from list_bases' already states, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('tables within a NocoDB base'), and specifies the output fields (id, name, type). This clearly differentiates from sibling tools like list_bases (bases) and list_records (records).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'within a NocoDB base' and the base_id parameter is described as 'from list_bases', suggesting a prerequisite. However, no explicit guidance is provided on when to choose this tool over alternatives or what exclusions apply, leaving usage context mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspacesA

List NocoDB workspaces visible to this API token. Only relevant on NocoDB Cloud; self-hosted OSS instances typically don't use workspaces — call list_bases directly instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It adds context about token-visible scoping and cloud-only deployment, which is useful. However, it does not explicitly state read-only nature or return format, leaving some gaps for a simple list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first front-loads the core action, and the second provides a critical usage caveat. No word is wasted, and the structure is clear and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (0 params, no output schema), the description covers the essential context: purpose, token scoping, deployment relevance, and an explicit alternative. It doesn't spell out the return structure, but 'List X' strongly implies an array of X, so the completeness is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline for this dimension is 4. The description doesn't need to explain parameters, and it doesn't add any conflicting or irrelevant information. It correctly implies that no arguments are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb and resource: 'List NocoDB workspaces visible to this API token.' It also differentiates from the sibling tool list_bases by noting the cloud-only relevance, making it unmistakable what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use this tool vs. alternatives: 'Only relevant on NocoDB Cloud; self-hosted OSS instances typically don't use workspaces — call list_bases directly instead.' This gives a clear context and names the alternative, satisfying the dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recordsB

Update one or more existing records. Each record object must include its Id plus the fields to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesSingle record object (must include Id, plus fields to change), or a list of such objects to batch-update.
table_idYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'update' which implies mutation, but provides no details on permissions, reversibility, error behavior, or whether updates are partial or full replacements. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, front-loaded with the primary action ('Update one or more existing records'). It is efficient, though it could have added more value with a bit more detail without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's mutation nature and lack of annotations or output schema, the description is insufficient. It does not clarify return value, idempotency, batch behavior, or failure scenarios. The provided context signals show minimal schema coverage, and the description does not compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool description repeats the Id requirement already present in the records parameter schema, adding no new meaning. It completely fails to describe table_id, which has no schema description, leaving a 50% coverage gap unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates existing records, using a specific verb ('Update') and resource ('existing records'). It distinguishes itself from sibling tools like create_records and delete_records by focusing on modification of existing data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for modifying existing records, but it does not explicitly state when to use it versus alternatives, nor does it mention any exclusions. The note about including Id is a requirement, not a usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedcount_records
    • First observedcreate_records
    • First observeddelete_records
    • First observedget_record
    • First observedget_table_schema
    • First observedlink_records
    • First observedlist_bases
    • First observedlist_linked_records
    • First observedlist_records
    • First observedlist_tables
    • First observedlist_workspaces
    • First observedunlink_records
    • First observedupdate_records

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource and action. list_bases vs list_workspaces are clearly separated by workspace vs base, and descriptions clarify usage. list_records vs get_record differ in list vs single retrieval.

Naming Consistency5/5

All tools use verb_noun snake_case (list_bases, create_records, link_records, etc.) with no mixed conventions or vague verbs. The pattern is immediately predictable.

Tool Count5/5

13 tools is appropriate for a database connector covering base/table discovery, schema introspection, record CRUD, querying, and link management. Each tool earns its place.

Completeness4/5

Core workflows are well-covered: explore bases/tables/schema, then create/update/delete/query records and manage links. Minor gaps include no create/delete base or table, but these may be outside the connector's scope.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that provides tools for programmatically managing Airtable bases, tables, fields, and records through Claude Desktop or other MCP clients.
    12
    311 npm
    75
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A dual-transport MCP server that exposes your API as tools to LLM clients, supporting both stdio transport for local clients like Claude Desktop and HTTP/SSE transport for remote clients like OpenAI's Responses API.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Remote MCP server that auto-generates tools from NocoBase OpenAPI specs to enable full CRUD operations on collections across multiple instances. Supports streamable HTTP transport and API key authentication for secure, natural language interaction with NocoBase deployments.
    -
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables AI assistants to interact with NocoBase instances for managing collections, UI schemas, flow models, and running API operations. It provides both hand-crafted tools and dynamically generated tools from NocoBase's OpenAPI specification.
    23
    5 npm
    MIT