Integrations
Airtable
Manage Airtable bases, tables, and records
The Airtable integration provides access to Airtable's API through the Integrate MCP server.
Installation
The Airtable integration is included with the SDK:
import { airtableIntegration } from "integrate-sdk/server";Setup
1. Create an Airtable OAuth App
- Go to Airtable Developer Hub
- Create a new OAuth integration
- Configure your redirect URI
- Note your Client ID and Client Secret
2. Configure the Integration on Your Server
Add the Airtable integration to your server configuration. The integration automatically reads AIRTABLE_CLIENT_ID and AIRTABLE_CLIENT_SECRET from your environment variables:
import { createMCPServer, airtableIntegration } from "integrate-sdk/server";
export const { client: serverClient } = createMCPServer({
apiKey: process.env.INTEGRATE_API_KEY,
integrations: [
airtableIntegration({
scopes: ["data.records:read", "data.records:write", "schema.bases:read"], // Optional
}),
],
});You can override the environment variables by passing explicit values:
airtableIntegration({
clientId: process.env.CUSTOM_AIRTABLE_ID,
clientSecret: process.env.CUSTOM_AIRTABLE_SECRET,
scopes: ["data.records:read", "data.records:write", "schema.bases:read"],
});3. Client-Side Usage
The default client automatically includes all integrations. You can use it directly:
import { client } from "integrate-sdk";
await client.authorize("airtable");
const bases = await client.airtable.listBases({});If you're using a custom client, add the integration to the integrations array:
import { createMCPClient, airtableIntegration } from "integrate-sdk";
const customClient = createMCPClient({
integrations: [airtableIntegration()],
});Configuration Options
Prop
Type
Available Tools
Bases
airtable_list_bases- List all accessible basesairtable_get_base- Get details of a specific base
Tables
airtable_list_tables- List tables in a baseairtable_get_table- Get table schema
Records
airtable_list_records- List records in a tableairtable_get_record- Get a specific recordairtable_create_record- Create a new recordairtable_update_record- Update an existing recordairtable_search_records- Search records with filters
Examples
List Bases
const result = await client.airtable.listBases({});
console.log("Bases:", result);Create a Record
const result = await client.airtable.createRecord({
baseId: "appXXXXXXXXXXXXXX",
tableId: "tblYYYYYYYYYYYYYY",
fields: {
Name: "New Task",
Status: "In Progress",
Priority: "High",
},
});
console.log("Record created:", result);Search Records
const result = await client.airtable.searchRecords({
baseId: "appXXXXXXXXXXXXXX",
tableId: "tblYYYYYYYYYYYYYY",
filterByFormula: "{Status} = 'In Progress'",
maxRecords: 100,
});
console.log("Matching records:", result);OAuth Scopes
The default scopes are ['data.records:read', 'data.records:write', 'schema.bases:read']. You may need different scopes depending on your use case:
data.records:read- Read records from tablesdata.records:write- Create, update, and delete recordsschema.bases:read- Read base and table schemasschema.bases:write- Modify base and table schemas
Error Handling
try {
const result = await client.airtable.createRecord({
baseId: "appXXXXXXXXXXXXXX",
tableId: "tblYYYYYYYYYYYYYY",
fields: { Name: "New Record" },
});
} catch (error) {
if (error.message.includes("not found")) {
console.error("Base or table not found");
} else if (error.message.includes("authentication")) {
console.error("Authentication failed");
} else {
console.error("Unexpected error:", error);
}
}Next Steps
- Explore the Linear Integration
- Explore the Notion Integration
- See Advanced Usage for more examples