Airtable
Acesso de leitura e escrita a bancos de dados do Airtable.
Documentação
airtable-mcp-server
Um servidor Model Context Protocol que fornece acesso de leitura e escrita a bancos de dados Airtable. Este servidor permite que LLMs inspecionem esquemas de banco de dados e, em seguida, leiam e escrevam registros.
https://github.com/user-attachments/assets/c8285e76-d0ed-4018-94c7-20535db6c944
Instalação
Siga as instruções em install-mcp, que gera a configuração correta para o seu cliente MCP (Claude Code, Claude Desktop, Cursor, Cline, VS Code e outros).
Você precisará de um token de acesso pessoal do Airtable — crie um aqui com os escopos schema.bases:read e data.records:read (e opcionalmente schema.bases:write, data.records:write, data.recordComments:read, data.recordComments:write) e acesso às bases que deseja usar. Ele se parece com algo como pat123.abc123 (mas mais longo). Defina-o como AIRTABLE_API_KEY (substituindo o espaço reservado na configuração gerada).
Componentes
Ferramentas
-
list_records
- Lista registros de uma tabela Airtable especificada
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabela a ser consultadamaxRecords(number, opcional): Número máximo de registros a retornar. O padrão é 100.filterByFormula(string, opcional): Fórmula Airtable para filtrar registros
-
search_records
- Pesquisa registros que contenham texto específico
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabela a ser consultadasearchTerm(string, obrigatório): Texto a ser pesquisado nos registrosfieldIds(array, opcional): IDs de campos específicos para pesquisar. Se não for fornecido, pesquisa todos os campos baseados em texto.maxRecords(number, opcional): Número máximo de registros a retornar. O padrão é 100.
-
list_bases
- Lista todas as bases Airtable acessíveis
- Nenhum parâmetro de entrada necessário
- Retorna o ID da base, o nome e o nível de permissão
-
list_tables
- Lista todas as tabelas em uma base específica
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabledetailLevel(string, opcional): A quantidade de detalhes a obter sobre as tabelas (tableIdentifiersOnly,identifiersOnlyoufull)
- Retorna o ID da tabela, nome, descrição, campos e visualizações (até o
detailLevelfornecido)
-
describe_table
- Obtém informações detalhadas sobre uma tabela específica
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabela a ser descritadetailLevel(string, opcional): A quantidade de detalhes a obter sobre a tabela (tableIdentifiersOnly,identifiersOnlyoufull)
- Retorna o mesmo formato que list_tables, mas para uma única tabela
- Útil para obter detalhes sobre uma tabela específica sem buscar informações sobre todas as tabelas na base
-
get_record
- Obtém um registro específico pelo ID
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelarecordId(string, obrigatório): O ID do registro a ser recuperado
-
create_record
- Cria um novo registro em uma tabela
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelafields(object, obrigatório): Os campos e valores para o novo registro
-
update_records
- Atualiza um ou mais registros em uma tabela
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelarecords(array, obrigatório): Matriz de objetos contendo o ID do registro e os campos a atualizar
-
delete_records
- Exclui um ou mais registros de uma tabela
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelarecordIds(array, obrigatório): Matriz de IDs de registros a excluir
-
create_table
- Cria uma nova tabela em uma base
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base Airtablename(string, obrigatório): Nome da nova tabeladescription(string, opcional): Descrição da tabelafields(array, obrigatório): Matriz de definições de campo (nome, tipo, descrição, opções)
-
update_table
- Atualiza o nome ou a descrição de uma tabela
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelaname(string, opcional): Novo nome para a tabeladescription(string, opcional): Nova descrição para a tabela
-
create_field
- Cria um novo campo em uma tabela
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelaname(string, obrigatório): Nome do novo campotype(string, obrigatório): Tipo do campodescription(string, opcional): Descrição do campooptions(object, opcional): Opções específicas do campo
-
update_field
- Atualiza o nome ou a descrição de um campo
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelafieldId(string, obrigatório): O ID do camponame(string, opcional): Novo nome para o campodescription(string, opcional): Nova descrição para o campo
-
create_comment
- Cria um comentário em um registro
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelarecordId(string, obrigatório): O ID do registrotext(string, obrigatório): O texto do comentárioparentCommentId(string, opcional): ID do comentário pai para respostas em thread
- Retorna o comentário criado com ID, autor, hora de criação e texto
-
list_comments
- Lista comentários em um registro
- Parâmetros de entrada:
baseId(string, obrigatório): O ID da base AirtabletableId(string, obrigatório): O ID da tabelarecordId(string, obrigatório): O ID do registropageSize(number, opcional): Número de comentários a retornar (máx. 100, padrão 100)offset(string, opcional): Deslocamento de paginação para recuperar comentários adicionais
- Retorna uma matriz de comentários com autor, texto, carimbos de data/hora, reações e menções
- Os comentários são retornados do mais novo para o mais antigo
Transporte HTTP
O servidor também pode ser executado em modo HTTP para uso com clientes MCP remotos:
MCP_TRANSPORT=http PORT=3000 npx airtable-mcp-server
Isso inicia um servidor HTTP sem estado em http://localhost:3000/mcp.
[!WARNING] O transporte HTTP não possui autenticação integrada, e a vinculação a localhost ou a uma rede privada não é uma fronteira de segurança contra navegadores: um site malicioso pode usar DNS rebinding para fazer o navegador de um visitante enviar solicitações para
http://localhost:3000/mcpe invocar ferramentas — incluindo leitura, escrita e exclusão de registros — usando o token Airtable deste servidor.Execute o modo HTTP apenas onde chamadores não confiáveis (incluindo navegadores na mesma máquina ou rede) não possam alcançar
/mcpsem autenticação. Na prática, isso significa colocá-lo atrás de um proxy reverso ou gateway que exija uma credencial que um navegador não anexará entre origens, como um cabeçalhoAuthorization.Se você apenas deseja usar este servidor com um cliente MCP na mesma máquina, use o transporte stdio padrão — ele não abre uma porta.
Contribuindo
Pull requests são bem-vindos no GitHub! Para começar:
- Instale Git e Node.js
- Clone o repositório
- Instale as dependências com
npm install - Execute
npm run testpara executar os testes - Compile com
npm run build
- Você pode usar
npm run build:watchpara compilar automaticamente após editarsrc/index.ts. Isso significa que você pode salvar, recarregar o Claude Desktop (com Ctrl/Cmd+R) e as alterações serão aplicadas.
Lançamentos
As versões seguem a especificação de versionamento semântico.
Para lançar:
- Use
npm version <major | minor | patch>para aumentar a versão - Execute
git push --follow-tagspara enviar com tags - Aguarde o GitHub Actions publicar no registro NPM.