51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
import { AirtableServer } from './server.js';
|
|
|
|
async function main() {
|
|
const apiKey = process.env.AIRTABLE_API_KEY;
|
|
|
|
if (!apiKey) {
|
|
console.error('Error: AIRTABLE_API_KEY environment variable is required');
|
|
console.error('Please set your Airtable API key:');
|
|
console.error(' export AIRTABLE_API_KEY=your_api_key_here');
|
|
process.exit(1);
|
|
}
|
|
|
|
const server = new AirtableServer({
|
|
apiKey,
|
|
serverName: '@mcpengine/airtable',
|
|
serverVersion: '1.0.0',
|
|
});
|
|
|
|
const transport = new StdioServerTransport();
|
|
|
|
// Graceful shutdown
|
|
const cleanup = async () => {
|
|
console.error('Shutting down Airtable MCP server...');
|
|
process.exit(0);
|
|
};
|
|
|
|
process.on('SIGINT', cleanup);
|
|
process.on('SIGTERM', cleanup);
|
|
|
|
process.on('uncaughtException', (error) => {
|
|
console.error('Uncaught exception:', error);
|
|
process.exit(1);
|
|
});
|
|
|
|
process.on('unhandledRejection', (reason, promise) => {
|
|
console.error('Unhandled rejection at:', promise, 'reason:', reason);
|
|
process.exit(1);
|
|
});
|
|
|
|
await server.connect(transport);
|
|
console.error('Airtable MCP server running on stdio');
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error('Fatal error:', error);
|
|
process.exit(1);
|
|
});
|