UNPKG

@runbook-docs/mcp-server

Version:
83 lines (82 loc) 3.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resourceHandlers = void 0; const client_1 = __importDefault(require("@runbook-docs/client")); const getArticle_1 = __importDefault(require("../queries/getArticle")); const getBook_1 = __importDefault(require("../queries/getBook")); const RESOURCE_PREFIX = 'runbook://'; const BOOK_REGEX = /^runbook:\/\/books\/(.+)$/; const ARTICLE_REGEX = /^runbook:\/\/articles\/(.+)$/; const resourceHandlers = function (state) { const runbook = new client_1.default({ baseUrl: state.baseUrl, apiToken: state.accessToken }); return { listResourceTemplates: () => ({ resourceTemplates: [ { uriTemplate: `${RESOURCE_PREFIX}articles/{articleUid}`, name: 'Article', description: 'Retrieve an article by its UID', mimeType: 'application/json' } ] }), listResources: async () => { const data = await runbook.query('getBooks', { first: 100 }); const books = data.organization.books.nodes; return books.map((book) => ({ uri: `${RESOURCE_PREFIX}books/${book.uid}`, name: book.name, description: book.description || `Book: ${book.name}`, mimeType: 'application/json' })); }, readResource: async (uri) => { const bookMatch = uri.match(BOOK_REGEX); const articleMatch = uri.match(ARTICLE_REGEX); if (bookMatch) { const bookUid = bookMatch[1]; const data = await runbook.graphql({ query: getBook_1.default, variables: { bookUid } }); const book = data.node; if (!book) { throw new Error(`Book not found: ${bookUid}`); } return JSON.stringify({ application: 'Runbook', type: 'Book', ...book, url: `${state.baseUrl}/books/${bookUid}` }, null, 2); } if (articleMatch) { const articleUid = articleMatch[1]; const data = await runbook.graphql({ query: getArticle_1.default, variables: { articleUid } }); return JSON.stringify({ application: 'Runbook', type: 'Article', ...data.node, url: `${state.baseUrl}/articles/${articleUid}` }, null, 2); } throw new Error(`Invalid URI: ${uri}`); } }; }; exports.resourceHandlers = resourceHandlers;