#!/usr/bin/env node
/**
* Onboarded MCP Server
*
* Provides MCP tools for interacting with the Onboarded API:
* - Discover API operations via OpenAPI spec
* - Execute authenticated API calls
* - Persist entity references for follow-up queries
*/
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 { toolDefinitions, handleToolCall } from "./tools/index.js";
import { initDb, closeDb } from "./lib/state.js";
import { ensureConfigDirs } from "./lib/config.js";
const SERVER_NAME = "onboarded-mcp";
const SERVER_VERSION = "0.1.0";
async function main() {
// Ensure config directories exist
ensureConfigDirs();
// Initialize SQLite database
initDb();
// Create MCP server
const server = new Server(
{
name: SERVER_NAME,
version: SERVER_VERSION,
},
{
capabilities: {
tools: {},
},
}
);
// Register tool handlers
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: toolDefinitions,
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
return handleToolCall(name, (args ?? {}) as Record<string, unknown>);
});
// Handle graceful shutdown
const shutdown = () => {
closeDb();
process.exit(0);
};
process.on("SIGINT", shutdown);
process.on("SIGTERM", shutdown);
// Connect via stdio transport
const transport = new StdioServerTransport();
await server.connect(transport);
console.error(`${SERVER_NAME} v${SERVER_VERSION} running on stdio`);
}
main().catch((error) => {
console.error("Fatal error:", error);
process.exit(1);
});