Reviewed-on: #1 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
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;
|
|
};
|