mcp-mautic-server
Version:
MCP server for Mautic marketing automation platform integration
71 lines (70 loc) • 2.53 kB
JavaScript
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
import { MauticClient } from './client.js';
import { MauticTools } from './tools.js';
// Configuration from environment variables
const config = {
url: process.env.MAUTIC_URL || '',
clientId: process.env.MAUTIC_CLIENT_ID || '',
clientSecret: process.env.MAUTIC_CLIENT_SECRET || '',
};
// Validate configuration
if (!config.url || !config.clientId || !config.clientSecret) {
console.error('Missing required environment variables:');
console.error('- MAUTIC_URL: Your Mautic instance URL');
console.error('- MAUTIC_CLIENT_ID: OAuth2 client ID');
console.error('- MAUTIC_CLIENT_SECRET: OAuth2 client secret');
process.exit(1);
}
// Remove trailing slash from URL
config.url = config.url.replace(/\/$/, '');
// Initialize Mautic client and tools
const mauticClient = new MauticClient(config);
const mauticTools = new MauticTools(mauticClient);
// Create MCP server
const server = new Server({
name: 'mcp-mautic-server',
version: '1.0.0',
}, {
capabilities: {
tools: {},
},
});
// List available tools
server.setRequestHandler(ListToolsRequestSchema, async () => {
const tools = mauticTools.getToolDefinitions();
return { tools };
});
// Execute tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
return await mauticTools.executeTool(name, args || {});
});
// Error handling
process.on('SIGINT', async () => {
console.log('\nShutting down MCP Mautic server...');
await server.close();
process.exit(0);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
process.exit(1);
});
// Start server
async function main() {
console.log('Starting MCP Mautic server...');
console.log(`Mautic URL: ${config.url}`);
console.log(`Client ID: ${config.clientId}`);
const transport = new StdioServerTransport();
await server.connect(transport);
console.log('MCP Mautic server started successfully');
}
main().catch((error) => {
console.error('Failed to start server:', error);
process.exit(1);
});