{"id":23285257,"url":"https://github.com/domdomegg/airtable-mcp-server","last_synced_at":"2026-08-27T15:57:44.310Z","repository":{"id":267842914,"uuid":"902495626","full_name":"domdomegg/airtable-mcp-server","owner":"domdomegg","description":"🗂️🤖 Airtable Model Context Protocol Server, for allowing AI systems to interact with your Airtable bases","archived":false,"fork":false,"pushed_at":"2026-08-11T19:09:42.000Z","size":596,"stargazers_count":456,"open_issues_count":2,"forks_count":133,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-08-22T11:40:13.527Z","etag":null,"topics":["airtable","mcp-server","model-context-protocol"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/airtable-mcp-server","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/domdomegg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":"https://adamjones.me/sponsor/"}},"created_at":"2024-12-12T17:16:40.000Z","updated_at":"2026-08-20T09:50:30.000Z","dependencies_parsed_at":"2026-01-02T06:05:30.678Z","dependency_job_id":null,"html_url":"https://github.com/domdomegg/airtable-mcp-server","commit_stats":null,"previous_names":["domdomegg/airtable-mcp-server"],"tags_count":26,"template":false,"template_full_name":"domdomegg/typescript-library-template","purl":"pkg:github/domdomegg/airtable-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domdomegg%2Fairtable-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domdomegg%2Fairtable-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domdomegg%2Fairtable-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domdomegg%2Fairtable-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/domdomegg","download_url":"https://codeload.github.com/domdomegg/airtable-mcp-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domdomegg%2Fairtable-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36944064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-08-27T02:00:07.166Z","response_time":96,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["airtable","mcp-server","model-context-protocol"],"created_at":"2024-12-20T02:00:27.694Z","updated_at":"2026-08-27T15:57:44.304Z","avatar_url":"https://github.com/domdomegg.png","language":"TypeScript","funding_links":["https://adamjones.me/sponsor/"],"categories":["Databases","Database \u0026 Messaging MCP Servers","Datenbanken und Data Warehouses","サーバー実装","📚 Projects (1974 total)","Community Servers","MCP 服务器精选列表","Legend","🗄️ Database","🗄️ \u003ca name=\"databases\"\u003e\u003c/a\u003eDatabases","MCP Servers","Servers","Table of Contents","カテゴリ","Cloud Services","Data \u0026 Analytics","🗄️ Databases (68 servers)","Server Implementations","Contributing"],"sub_categories":["Spreadsheets \u0026 No-Code","Claude API","Dieselbe Konfiguration, CLI und IDE","🗄️ \u003ca name=\"databases\"\u003e\u003c/a\u003eデータベース","MCP Servers","🛠️ 效率工具与集成 (Office, Project Management, Notes, etc.)","🗄️ \u003ca name=\"databases\"\u003e\u003c/a\u003eDatabases","🗄️ Databases","Productivity","How to Submit","💾 Databases","AI Services","🛠️ \u003ca name=\"developer-tools\"\u003e\u003c/a\u003e開発ツール","Databases"],"readme":"# airtable-mcp-server\n\nA 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.\n\nhttps://github.com/user-attachments/assets/c8285e76-d0ed-4018-94c7-20535db6c944\n\n## Installation\n\nFollow the instructions on [install-mcp](https://adamjones.me/install-mcp/?config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImFpcnRhYmxlLW1jcC1zZXJ2ZXIiXSwibmFtZSI6ImFpcnRhYmxlIiwiZW52Ijp7IkFJUlRBQkxFX0FQSV9LRVkiOiJwYXQxMjMuYWJjMTIzIn19), which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).\n\nYou'll need an Airtable personal access token — [create one here](https://airtable.com/create/tokens/new) 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).\n\n## Components\n\n### Tools\n\n- **list_records**\n  - Lists records from a specified Airtable table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table to query\n    - `maxRecords` (number, optional): Maximum number of records to return. Defaults to 100.\n    - `filterByFormula` (string, optional): Airtable formula to filter records\n\n- **search_records**\n  - Search for records containing specific text\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table to query\n    - `searchTerm` (string, required): Text to search for in records\n    - `fieldIds` (array, optional): Specific field IDs to search in. If not provided, searches all text-based fields.\n    - `maxRecords` (number, optional): Maximum number of records to return. Defaults to 100.\n\n- **list_bases**\n  - Lists all accessible Airtable bases\n  - No input parameters required\n  - Returns base ID, name, and permission level\n\n- **list_tables**\n  - Lists all tables in a specific base\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `detailLevel` (string, optional): The amount of detail to get about the tables (`tableIdentifiersOnly`, `identifiersOnly`, or `full`)\n  - Returns table ID, name, description, fields, and views (to the given `detailLevel`)\n\n- **describe_table**\n  - Gets detailed information about a specific table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table to describe\n    - `detailLevel` (string, optional): The amount of detail to get about the table (`tableIdentifiersOnly`, `identifiersOnly`, or `full`)\n  - Returns the same format as list_tables but for a single table\n  - Useful for getting details about a specific table without fetching information about all tables in the base\n\n- **get_record**\n  - Gets a specific record by ID\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `recordId` (string, required): The ID of the record to retrieve\n\n- **create_record**\n  - Creates a new record in a table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `fields` (object, required): The fields and values for the new record\n\n- **update_records**\n  - Updates one or more records in a table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `records` (array, required): Array of objects containing record ID and fields to update\n\n- **delete_records**\n  - Deletes one or more records from a table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `recordIds` (array, required): Array of record IDs to delete\n\n- **create_table**\n  - Creates a new table in a base\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `name` (string, required): Name of the new table\n    - `description` (string, optional): Description of the table\n    - `fields` (array, required): Array of field definitions (name, type, description, options)\n\n- **update_table**\n  - Updates a table's name or description\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `name` (string, optional): New name for the table\n    - `description` (string, optional): New description for the table\n\n- **create_field**\n  - Creates a new field in a table\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `name` (string, required): Name of the new field\n    - `type` (string, required): Type of the field\n    - `description` (string, optional): Description of the field\n    - `options` (object, optional): Field-specific options\n\n- **update_field**\n  - Updates a field's name or description\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `fieldId` (string, required): The ID of the field\n    - `name` (string, optional): New name for the field\n    - `description` (string, optional): New description for the field\n\n- **create_comment**\n  - Creates a comment on a record\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `recordId` (string, required): The ID of the record\n    - `text` (string, required): The comment text\n    - `parentCommentId` (string, optional): Parent comment ID for threaded replies\n  - Returns the created comment with ID, author, creation time, and text\n\n- **list_comments**\n  - Lists comments on a record\n  - Input parameters:\n    - `baseId` (string, required): The ID of the Airtable base\n    - `tableId` (string, required): The ID of the table\n    - `recordId` (string, required): The ID of the record\n    - `pageSize` (number, optional): Number of comments to return (max 100, default 100)\n    - `offset` (string, optional): Pagination offset for retrieving additional comments\n  - Returns comments array with author, text, timestamps, reactions, and mentions\n  - Comments are returned from newest to oldest\n\n### HTTP Transport\n\nThe server can also run in HTTP mode for use with remote MCP clients:\n\n```bash\nMCP_TRANSPORT=http PORT=3000 npx airtable-mcp-server\n```\n\nThis starts a stateless HTTP server at `http://localhost:3000/mcp`.\n\n\u003e [!WARNING]\n\u003e The HTTP transport has no built-in authentication, and binding to\n\u003e localhost or a private network is **not** a security boundary against\n\u003e browsers: a malicious website can use [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding)\n\u003e to make a visitor's browser send requests to `http://localhost:3000/mcp`\n\u003e and invoke tools — including reading, writing and deleting records —\n\u003e using this server's Airtable token.\n\u003e\n\u003e Only run HTTP mode where untrusted callers (including browsers on the\n\u003e same machine or network) cannot reach `/mcp` without authenticating.\n\u003e In practice that means putting it behind a reverse proxy or gateway\n\u003e that requires a credential a browser won't attach cross-origin, such\n\u003e as an `Authorization` header.\n\u003e\n\u003e If you just want to use this server with an MCP client on the same\n\u003e machine, use the default stdio transport instead — it doesn't open a\n\u003e port at all.\n\n## Contributing\n\nPull requests are welcomed on GitHub! To get started:\n\n1. Install Git and Node.js\n2. Clone the repository\n3. Install dependencies with `npm install`\n4. Run `npm run test` to run tests\n5. Build with `npm run build`\n  - You can use `npm run build:watch` to automatically build after editing [`src/index.ts`](./src/index.ts). This means you can hit save, reload Claude Desktop (with Ctrl/Cmd+R), and the changes apply.\n\n## Releases\n\nVersions follow the [semantic versioning spec](https://semver.org/).\n\nTo release:\n\n1. Use `npm version \u003cmajor | minor | patch\u003e` to bump the version\n2. Run `git push --follow-tags` to push with tags\n3. Wait for GitHub Actions to publish to the NPM registry.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomdomegg%2Fairtable-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdomdomegg%2Fairtable-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomdomegg%2Fairtable-mcp-server/lists"}