Files
outline-mcp/src/outline.ts
Timo Behrendt e2081a19b5
All checks were successful
CD / test (push) Successful in 21s
CD / Check changes (push) Successful in 31s
CD / Build and push (amd64) (push) Successful in 47s
CD / Build and push (arm64) (push) Successful in 3m6s
CD / Create manifest (push) Successful in 55s
initial-commit (#1)
Reviewed-on: #1
Co-authored-by: Timo Behrendt <t.behrendt@t00n.de>
Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
2025-07-16 07:21:12 +02:00

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;
};