airtable-mcp-server
The airtable-mcp-server enables programmatic interaction with Airtable databases, providing comprehensive read and write access to Airtable data. With this server, you can:
Access base information: List all accessible Airtable bases with their IDs, names, and permission levels
Manage tables: List tables in a base, create new tables, update table names/descriptions, and access detailed schema information
Work with fields: Create new fields, update field properties, and retrieve field metadata
Manipulate records: List, search, create, retrieve, update, and delete records with optional filtering
This server serves as a complete interface for LLMs to interact with and manipulate Airtable data programmatically.
Provides read and write access to Airtable databases, allowing LLMs to inspect database schemas, read and write records. Features include listing bases and tables, searching and filtering records, creating/updating/deleting records, and managing table schemas.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@airtable-mcp-serverlist all projects from the Projects table in my main base"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
airtable-mcp-server
A Model Context Protocol server that provides read and write access to Airtable databases. This server enables LLMs to inspect database schemas, then read and write records.
https://github.com/user-attachments/assets/c8285e76-d0ed-4018-94c7-20535db6c944
Installation
Follow the instructions on install-mcp, which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).
You'll need an Airtable personal access token — create one here with scopes schema.bases:read and data.records:read (and optionally schema.bases:write, data.records:write, data.recordComments:read, data.recordComments:write), and access to the bases you want to use. It looks something like pat123.abc123 (but longer). Set it as AIRTABLE_API_KEY (replacing the placeholder in the generated config).
Related MCP server: MCP TapData Server
Components
Tools
list_records
Lists records from a specified Airtable table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the table to querymaxRecords(number, optional): Maximum number of records to return. Defaults to 100.filterByFormula(string, optional): Airtable formula to filter records
search_records
Search for records containing specific text
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the table to querysearchTerm(string, required): Text to search for in recordsfieldIds(array, optional): Specific field IDs to search in. If not provided, searches all text-based fields.maxRecords(number, optional): Maximum number of records to return. Defaults to 100.
list_bases
Lists all accessible Airtable bases
No input parameters required
Returns base ID, name, and permission level
list_tables
Lists all tables in a specific base
Input parameters:
baseId(string, required): The ID of the Airtable basedetailLevel(string, optional): The amount of detail to get about the tables (tableIdentifiersOnly,identifiersOnly, orfull)
Returns table ID, name, description, fields, and views (to the given
detailLevel)
describe_table
Gets detailed information about a specific table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the table to describedetailLevel(string, optional): The amount of detail to get about the table (tableIdentifiersOnly,identifiersOnly, orfull)
Returns the same format as list_tables but for a single table
Useful for getting details about a specific table without fetching information about all tables in the base
get_record
Gets a specific record by ID
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablerecordId(string, required): The ID of the record to retrieve
create_record
Creates a new record in a table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablefields(object, required): The fields and values for the new record
update_records
Updates one or more records in a table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablerecords(array, required): Array of objects containing record ID and fields to update
delete_records
Deletes one or more records from a table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablerecordIds(array, required): Array of record IDs to delete
create_table
Creates a new table in a base
Input parameters:
baseId(string, required): The ID of the Airtable basename(string, required): Name of the new tabledescription(string, optional): Description of the tablefields(array, required): Array of field definitions (name, type, description, options)
update_table
Updates a table's name or description
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablename(string, optional): New name for the tabledescription(string, optional): New description for the table
create_field
Creates a new field in a table
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablename(string, required): Name of the new fieldtype(string, required): Type of the fielddescription(string, optional): Description of the fieldoptions(object, optional): Field-specific options
update_field
Updates a field's name or description
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablefieldId(string, required): The ID of the fieldname(string, optional): New name for the fielddescription(string, optional): New description for the field
create_comment
Creates a comment on a record
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablerecordId(string, required): The ID of the recordtext(string, required): The comment textparentCommentId(string, optional): Parent comment ID for threaded replies
Returns the created comment with ID, author, creation time, and text
list_comments
Lists comments on a record
Input parameters:
baseId(string, required): The ID of the Airtable basetableId(string, required): The ID of the tablerecordId(string, required): The ID of the recordpageSize(number, optional): Number of comments to return (max 100, default 100)offset(string, optional): Pagination offset for retrieving additional comments
Returns comments array with author, text, timestamps, reactions, and mentions
Comments are returned from newest to oldest
HTTP Transport
The server can also run in HTTP mode for use with remote MCP clients:
MCP_TRANSPORT=http PORT=3000 npx airtable-mcp-serverThis starts a stateless HTTP server at http://localhost:3000/mcp.
The HTTP transport has no built-in authentication, and binding to
localhost or a private network isnot a security boundary against
browsers: a malicious website can use DNS rebinding
to make a visitor's browser send requests to http://localhost:3000/mcp
and invoke tools — including reading, writing and deleting records —
using this server's Airtable token.
Only run HTTP mode where untrusted callers (including browsers on the
same machine or network) cannot reach /mcp without authenticating.
In practice that means putting it behind a reverse proxy or gateway
that requires a credential a browser won't attach cross-origin, such
as an Authorization header.
If you just want to use this server with an MCP client on the same machine, use the default stdio transport instead — it doesn't open a port at all.
Contributing
Pull requests are welcomed on GitHub! To get started:
Install Git and Node.js
Clone the repository
Install dependencies with
npm installRun
npm run testto run testsBuild with
npm run build
You can use
npm run build:watchto automatically build after editingsrc/index.ts. This means you can hit save, reload Claude Desktop (with Ctrl/Cmd+R), and the changes apply.
Releases
Versions follow the semantic versioning spec.
To release:
Use
npm version <major | minor | patch>to bump the versionRun
git push --follow-tagsto push with tagsWait for GitHub Actions to publish to the NPM registry.
Available Tools
16 toolscreate_commentCreate CommentB
Create a comment on a record
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The comment text | |
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| recordId | Yes | The ID of the record | |
| parentCommentId | No | Optional parent comment ID for threaded replies |
Output Schema
| Name | Required | Description |
|---|---|---|
| comment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context such as permission requirements, the ability to create threaded replies (parentCommentId), or side effects, so it contributes almost nothing beyond what annotations already state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of waste. It is appropriately sized for a simple create operation, though it could arguably include one more useful detail without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, 100% schema coverage, output schema, and annotations, the description is nearly sufficient. The only minor gap is that it does not mention the optional threaded-reply capability (parentCommentId), but that is fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are fully documented in the schema. The description adds no additional parameter meaning, which matches the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb ('Create') and resource ('a comment on a record'), which distinguishes it from read-oriented siblings like list_comments. However, it does not explicitly name or differentiate itself from any alternative tool, so it falls short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g., list_comments or any hypothetical update/delete comment tool). The description provides only the bare action, leaving usage entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_fieldCreate FieldC
Create a new field in a table
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| nested | Yes | ||
| tableId | Yes | The ID or name of the table |
Output Schema
| Name | Required | Description |
|---|---|---|
| field | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write/non-destructive profile is covered. However the description adds no behavioral context of its own: it does not state required permissions, what happens on duplicate field names, whether the field is created empty, or what the free-form 'nested.field' definition must contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler, which is good. But the brevity is under-specification rather than economy — the one sentence carries almost no information, so it earns its place only weakly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but for a mutating tool with a nested, undocumented field-definition payload and only two shallow annotations, the description is far too thin. An agent could not construct a valid field definition from this definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema description coverage and a free-form nested field object with additionalProperties and no property documentation, the description should carry real weight for the field definition. Instead it mentions no parameters at all, leaving the field payload shape ('Field definition') opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb and a resource ('Create a new field in a table'), which is marginally more concrete than the title, but it is essentially the name expanded and adds no scope detail. It never distinguishes this from the sibling update_field, and it says nothing about what a 'field' can be beyond the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus update_field, create_table, or any other sibling, and no prerequisites or context for invocation. The agent must infer entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recordCreate RecordC
Create a new record in a table
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| fields | Yes | The fields for the new record | |
| tableId | Yes | The ID or name of the table |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that — no mention of required permissions, whether fields must match the table schema, or any side effects. For a mutation tool it is behaviorally silent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, front-loading the verb and resource. It is efficient but borders on under-specification rather than being genuinely well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a nested-object mutation tool the description should at least hint at how the fields object maps to the table schema; that gap keeps it merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (baseId, tableId, fields) are documented in the schema itself. The description adds no extra meaning about how fields should be keyed or validated, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (a new record in a table), which is enough for an agent to know what the tool does. It does not, however, distinguish itself from sibling creation tools like create_table, create_field, or create_comment beyond the word 'record'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_records or the other create_* siblings, and no stated prerequisites (e.g., that the base and table must already exist). Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tableCreate TableC
Create a new table in a base
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the table | |
| baseId | Yes | The ID of the base | |
| fields | Yes | Array of field definitions | |
| description | No | Optional description for the table |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered, but the description adds nothing beyond restating the action. It omits any mention of required permissions, whether the operation is reversible, or what side effects occur in the base.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and contains no filler. It is efficient, though it is arguably too terse to earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully documents the four parameters. However, for a mutation tool the description provides no behavioral or usage context, leaving clear gaps an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, baseId, fields, and the optional description. The description adds no extra meaning about parameter format or the structure of the fields array, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new table in a base'), which clearly separates it from siblings like update_table and list_tables. It does not, however, explicitly name those siblings or further differentiate scope beyond the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as create_field or update_table, nor any prerequisites for creating a table. An agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recordsDelete RecordsCDestructive
Delete records from a table
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| recordIds | Yes | Array of record IDs to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered by structured data. The description adds nothing on top of that – no statement about irreversibility, batch size limits, or partial-failure behavior when some recordIds are invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition of the title. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive batch-mutation tool, the description omits the context an agent most needs: whether deletion is permanent, what happens on partial failure, and whether confirmation is expected. An output schema exists, so return values need not be explained, but the operational behavior gaps remain significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseId, tableId, and recordIds are fully documented in the schema itself. The description adds no syntax, format, or constraint detail beyond that, which matches the baseline of 3 when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete records from a table'), so the operation is unambiguous. It does not differentiate itself from siblings such as update_records or create_record, but the action is clear enough on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like update_records, and no mention of prerequisites such as needing existing record IDs. The agent must infer the usage context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_tableDescribe TableCRead-only
Get detailed information about a specific table
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| detailLevel | No | Detail level for table information: - tableIdentifiersOnly: table IDs and names - identifiersOnly: table, field, and view IDs and names - full: complete details including field types, descriptions, and configurations Note for LLMs: To optimize context window usage, request the minimum detail level needed: - Use 'tableIdentifiersOnly' when you only need to list or reference tables - Use 'identifiersOnly' when you need to work with field or view references - Only use 'full' when you need field types, descriptions, or other detailed configuration If you only need detailed information on a few tables in a base with many complex tables, it might be more efficient for you to use list_tables with tableIdentifiersOnly, then describe_table with full on the specific tables you want. | full |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds nothing beyond the name: no note on what 'detailed information' contains (fields, views, configurations), no cost/rate context, no behavior of the detailLevel default. Minimal added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is appropriately sized for a simple read tool, though it is thin rather than efficient in the sense of conveying extra value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema is fully documented, so return-value and parameter gaps are covered elsewhere. What is missing is sibling differentiation and any hint of when to prefer this over list_tables, which the description leaves entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the detailLevel enum is extensively documented in the schema, including LLM-specific guidance. Baseline 3 applies since the schema carries the parameter burden and the description adds no parameter meaning of its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a specific table'), which is clearer than a tautology. However, it offers no differentiation from the sibling list_tables, so an agent must infer the boundary between listing and describing tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description itself gives no when-to-use or when-not-to-use guidance and never mentions list_tables. The routing advice ('use list_tables with tableIdentifiersOnly, then describe_table with full') lives entirely in the detailLevel schema description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordGet RecordBRead-only
Get a specific record by ID
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| recordId | Yes | The ID of the record |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile. The description repeats the basic read operation but adds no further behavioral context, such as not-found behavior, permission requirements, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, front-loaded sentence with no wasted words. The core action and lookup key appear immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with full schema parameter descriptions and an output schema, the description is nearly sufficient. It lacks only explicit routing guidance against sibling lookup tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are fully documented in the schema itself. The description mentions retrieving by ID but adds no additional format or meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a specific record by ID.' It implies single-record retrieval in contrast to sibling list/search tools, but it does not explicitly distinguish itself from list_records or search_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies the tool should be used when a specific record ID is already known. However, it does not explicitly state when not to use it or name alternatives such as search_records or list_records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_basesList BasesARead-only
List all accessible Airtable bases
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| bases | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The word 'accessible' usefully hints at permission-scoped results, but nothing is said about pagination, result limits, or ordering — and with an output schema present, return-value detail is rightly omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-formed sentence with no waste, front-loading the verb and resource. Optimal size for a parameterless list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema, and readOnlyHint coverage, the description is nearly complete. The only minor gap is the absence of any hint about result cardinality or pagination for accounts with many bases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing in the parameter space for the description to compensate for, and it adds no misleading signature details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('List') and resource ('Airtable bases') with scope ('accessible'). Distinguishes from siblings by resource level (bases vs. tables vs. records), though it doesn't explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The name and description imply this is the top-level discovery call before working with tables or records, but there is no explicit when-to-use or when-not-to-use guidance. Usage is inferable from context rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsList CommentsBRead-only
List comments on a record
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| offset | No | Offset for pagination | |
| tableId | Yes | The ID or name of the table | |
| pageSize | No | Number of comments to return (max 100, default 100) | |
| recordId | Yes | The ID of the record |
Output Schema
| Name | Required | Description |
|---|---|---|
| offset | Yes | |
| comments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this as a safe read operation. The description adds no behavioral context beyond that, such as pagination defaults, ordering, or permission requirements, so it contributes little beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. For a simple read-only list tool, this is appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, full schema coverage, readOnlyHint, and an output schema, the terse description is minimally sufficient for correct invocation. However, it lacks usage context and any behavioral detail, so it remains only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the input schema. The description adds no additional parameter meaning, which matches the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List comments'. It also scopes the operation to 'a record', which helps distinguish it from broader list tools like list_records. However, it does not explicitly differentiate from sibling tools such as create_comment or other list_* operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, prerequisites, or mention of alternative tools. The intent is implied by the name and description, but the description provides no routing help for an agent choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recordsList RecordsCRead-only
List records from a table
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | A list of sort objects that specifies how the records will be ordered | |
| view | No | The name or ID of a view in the table | |
| baseId | Yes | The ID of the base | |
| fields | No | An array of field names or IDs to include in the response. Omit this to return all fields, which is usually what you want. Only set it if the table has many fields and you don't need most of them, AND you already know the exact field names or IDs (e.g. from describe_table) - guessing them will silently return the wrong data. | |
| tableId | Yes | The ID or name of the table | |
| maxRecords | No | The maximum total number of records that will be returned | |
| filterByFormula | No | A formula used to filter records |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this is a safe read operation. The description adds no behavioral context beyond that: it says nothing about pagination, rate limits, authentication needs, or the effect of omitting optional parameters like filterByFormula or maxRecords. With annotations covering the safety profile, the description should add at least some operational context, but it contributes nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and not verbose, but it is essentially a restatement of the tool name and title. It is appropriately sized for a minimal description, yet the sentence does not earn much value because it lacks any substantive detail for a 7-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, required IDs, and complex options like filterByFormula, sort, and view, the description is far too thin. It says nothing about filtering, sorting, or record ordering, and gives no usage context relative to siblings. Although an output schema exists and the input schema is well documented, the description fails to orient the agent about the tool's scope or capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema (including a detailed note on the 'fields' parameter). The description adds no parameter meaning beyond what the schema provides. A baseline of 3 is appropriate when the schema fully carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List records from a table'), which is clear enough to understand the operation. However, it offers no differentiation from the closely related sibling search_records, which also returns records. Without that distinction, the purpose is clear but not fully disambiguated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_records or get_record. It does not mention any conditions, prerequisites, or exclusions. An agent must infer usage entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesList TablesCRead-only
List all tables in a specific base
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| detailLevel | No | Detail level for table information: - tableIdentifiersOnly: table IDs and names - identifiersOnly: table, field, and view IDs and names - full: complete details including field types, descriptions, and configurations Note for LLMs: To optimize context window usage, request the minimum detail level needed: - Use 'tableIdentifiersOnly' when you only need to list or reference tables - Use 'identifiersOnly' when you need to work with field or view references - Only use 'full' when you need field types, descriptions, or other detailed configuration If you only need detailed information on a few tables in a base with many complex tables, it might be more efficient for you to use list_tables with tableIdentifiersOnly, then describe_table with full on the specific tables you want. | full |
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the description adds nothing further — no pagination, ordering, or scope behavior. It essentially restates the annotation-provided profile plus the name, so it does not earn credit for added 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with zero filler or redundancy. It is efficient, though it is arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the parameter schema is rich. Still, the description omits any relation to siblings such as describe_table or list_bases, leaving selection between similar tools to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the detailLevel enum is exhaustively documented in the schema, including LLM-specific context-window advice. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all tables') scoped to 'a specific base', which is unambiguous on its own. It does not, however, differentiate itself from nearby siblings like describe_table or list_bases, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains no when-to-use guidance, no prerequisites, and no mention of alternatives. The valuable routing advice (use tableIdentifiersOnly plus describe_table instead of full on large bases) lives entirely in the schema's parameter description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsSearch RecordsCRead-only
Search for records containing specific text
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | The name or ID of a view in the table | |
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| fieldIds | No | Optional array of field IDs to search in | |
| maxRecords | No | The maximum total number of records that will be returned | |
| searchTerm | Yes | The text to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a non-destructive read operation. The description adds no behavioral context beyond that, such as default search scope, case sensitivity, pagination behavior, or how maxRecords is applied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted wording. It is appropriately concise, though its brevity leaves no room for structural cues about usage or behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering read-only safety, a full schema, and an output schema, the description is adequate for basic invocation. However, it does not explain search scope or when this tool should be chosen over sibling record-listing and retrieval tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all six parameters, including searchTerm, fieldIds, view, and maxRecords. The description only restates the searchTerm concept and adds no parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching records for matching text. It is clear what the tool does, but it does not distinguish itself from siblings like list_records 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies text-search usage but gives no explicit when-to-use guidance, no prerequisites, and no comparison to alternative record-retrieval tools such as list_records or get_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_fieldUpdate FieldBDestructive
Update a field's name or description
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the field | |
| baseId | Yes | The ID of the base | |
| fieldId | Yes | The ID of the field | |
| tableId | Yes | The ID or name of the table | |
| description | No | New description for the field |
Output Schema
| Name | Required | Description |
|---|---|---|
| field | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation profile is covered, but the description adds no behavioral context beyond the schema: it doesn't state whether renaming is destructive to references, whether permissions are required, or what happens when only one of name/description is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no redundant or filler content. It is appropriately sized for the operation it names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the schema covers all parameters. Still missing for a mutation tool: whether at least one of name/description must be set, and any note on the destructive impact of renaming a field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema and the baseline is 3. The description restates the two mutable fields but adds no format, constraint, or required/optional nuance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource and identifies the two mutable fields (name, description), so the operation is unambiguous. However it offers no differentiation from close siblings like update_table, update_records, or create_field, which also touch fields/tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_field or update_table, nor any prerequisites or exclusions. An agent must infer usage purely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recordsUpdate RecordsCDestructive
Update up to 10 records in a table
| Name | Required | Description | Default |
|---|---|---|---|
| baseId | Yes | The ID of the base | |
| records | Yes | Array of records to update (max 10) | |
| tableId | Yes | The ID or name of the table |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a non-read-only, destructive write, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the update merges or replaces existing field values, whether destructiveHint means overwriting unmentioned fields, or what happens on partial failure across the 10-record batch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words and the scope constraint front-loaded. It is efficient, though the terseness shades into under-specification rather than genuine economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a destructive batch-mutation tool with three required parameters and many overlapping siblings, the description omits update semantics, failure behavior, and routing guidance. It is not complete enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseId, tableId, and records are already documented, including the max-10 constraint the description repeats. The description adds no syntax, ID-format, or field-mapping detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update), resource (records), and a scope constraint (up to 10, in a table). It is clear what the tool does, but it never distinguishes itself from siblings like update_field, create_record, or delete_records, which exist in the same family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_record for new rows or delete_records for removal. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tableUpdate TableCDestructive
Update a table's name or description
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the table | |
| baseId | Yes | The ID of the base | |
| tableId | Yes | The ID or name of the table | |
| description | No | New description for the table |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds nothing beyond the field scope: it does not say whether omitted fields are left untouched vs cleared, whether the operation is reversible, or what permissions are needed. With a mutation tool and a destructive annotation, a bare rename sentence leaves real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the scope front-loaded. It is efficient, though it is arguably too terse to carry the behavioral burden this mutation tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple rename/describe operation with fully documented params and an output schema, the description is minimally sufficient. It falls short of what a destructiveHint mutation tool should convey about side effects and reversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are documented in the schema itself; the description only echoes name/description. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds no format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (table) plus the two mutable fields (name, description). It is clear what it does, but it does not distinguish itself from siblings like update_field or update_records, and gives no cue that this is per-table metadata rather than table contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use framing, no prerequisites (baseId/tableId are required), and no mention of alternatives such as delete_records or create_table for other table lifecycle operations. The agent must infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_attachmentUpload AttachmentA
Upload a file directly to an attachment field on an existing record using Airtable's upload API. Supports files up to 5 MB. For larger files, use create_record or update_records with a public URL. The record must already exist.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Raw base64-encoded file content (no data URL prefix) | |
| baseId | Yes | The ID of the base | |
| filename | Yes | Filename for the attachment (e.g. "image.jpg") | |
| recordId | Yes | The ID of the existing record (e.g. recXXXXXXXXXXXXXX) | |
| contentType | Yes | MIME type of the file (e.g. "image/jpeg", "image/png", "application/pdf") | |
| attachmentFieldIdOrName | Yes | The ID or name of the attachment field (e.g. fldXXXXXXXXXXXXXX or "Images") |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false), so the description's size cap and existence prerequisite add real behavioral value. It does not say whether an upload appends to or replaces the existing attachments in the field, nor whether the call is synchronous — the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: capability first, limit and escape hatch second, prerequisite last. No filler, no restatement of the tool name or title, and the most important constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the size limit, the alternative path, and the record prerequisite. The one thing an agent would still want — whether the upload overwrites or adds to existing field attachments — is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the six parameters (base64 file, filename, contentType, baseId, recordId, field identifier) is already documented at the field level. The description adds only cross-cutting facts (5 MB cap, record must exist) rather than per-parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (upload), resource (file), and destination (an attachment field on an existing record), plus the underlying mechanism (Airtable's upload API). It is clearly distinguishable from create_record/update_records, which are named only as the large-file alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit constraint (files up to 5 MB), an explicit when-not with the alternative to use instead ('For larger files, use create_record or update_records with a public URL'), and a prerequisite ('The record must already exist'). Nothing about routing is left to inference.
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.
16 tool updates
v1.14.0- First observed
create_comment - First observed
create_field - First observed
create_record - First observed
create_table - First observed
delete_records - First observed
describe_table - First observed
get_record - First observed
list_bases - First observed
list_comments - First observed
list_records - First observed
list_tables - First observed
search_records - First observed
update_field - First observed
update_records - First observed
update_table - First observed
upload_attachment
TDQS
Scored across 16 tools
Each tool targets a distinct resource+action pair (bases, tables, fields, records, comments, attachments). The closest pair, list_records vs search_records, is clearly separated by 'containing specific text' filtering, and list_tables vs describe_table are distinguished by list-vs-detail semantics.
All 16 tools follow a consistent snake_case verb_noun pattern. Verb variety (list, create, update, get, describe, search, upload, delete) is meaningful rather than chaotic, and no camelCase or mixed conventions appear.
16 tools is slightly above the ideal 3-15 range but reasonable for a domain spanning bases, tables, fields, records, comments, and attachments. Each tool maps to a real Airtable operation rather than padding.
Coverage is decent for records (create/get/list/search/update/delete) and comments/attachments, but there are notable gaps: no delete_table, no delete_field, and no update/delete for comments. These missing lifecycle operations create dead ends agents may hit.
Maintenance
Related MCP Connectors
Official Airtable MCP server — database and operations layer for agents.
Hosted Airtable MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
A Model Context Protocol server for Wix AI tools
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides tools for programmatically managing Airtable bases, tables, fields, and records through Claude Desktop or other MCP clients.121,324 npm75MIT

MCP TapData Serverofficial
FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables Large Language Models to access and interact with database connections, including viewing schemas and performing CRUD operations on connected databases.-- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides LLMs with read and write access to Feishu Base (飞书多维表格) databases, enabling them to inspect schemas and manipulate records through natural language.48 npm10-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides read and write access to Airtable databases, enabling LLMs to inspect database schemas, then read and write records.3,652 npmMIT