import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import config from "./config"; import { CollectionsApi, Configuration, DocumentsApi } from "./gen/api/outline"; import { registerCollectionTools } from "./tools/collection"; import { registerDocumentTools } from "./tools/document"; import type { Logger } from "pino"; const createOutlineClient = (baseUrl: string, apiKey: string, logger: Logger) => { const config = new Configuration({ basePath: baseUrl, accessToken: () => Promise.resolve(apiKey), middleware: [ { pre: async (request) => { logger.debug({ request }, "Request"); return request; }, post: async (context) => { logger.debug({ context }, "Response"); }, }, ], }); return { documents: new DocumentsApi(config), collections: new CollectionsApi(config), }; }; export const outlineMcpFactory = (logger: Logger) => { const server = new McpServer({ name: "outline-mcp", version: "1.0.0", }); const client = createOutlineClient(config.baseUrl, config.apiKey, logger); registerDocumentTools(server, client.documents, logger); registerCollectionTools(server, client.collections, logger); return server; };