UNPKG

bars-mcp-server

Version:

MCP server for Bars - Library Documentation Service with up-to-date documentation and code examples

63 lines (62 loc) 2.21 kB
// Use Firebase Functions URL for the Bars API const BARS_API_BASE_URL = "https://api-h76uo622iq-uc.a.run.app"; const DEFAULT_TYPE = "txt"; /** * Searches for libraries matching the given query * @param query The search query * @returns Search results or null if the request fails */ export async function searchLibraries(query) { try { const url = new URL(`${BARS_API_BASE_URL}/v1/search`); url.searchParams.set("query", query); const response = await fetch(url); if (!response.ok) { console.error(`Failed to search libraries: ${response.status}`); return null; } return await response.json(); } catch (error) { console.error("Error searching libraries:", error); return null; } } /** * Fetches documentation context for a specific library * @param libraryId The library ID to fetch documentation for * @param options Options for the request * @returns The documentation text or null if the request fails */ export async function fetchLibraryDocumentation(libraryId, options = { userQuery: "" }) { try { if (libraryId.startsWith("/")) { libraryId = libraryId.slice(1); } const url = new URL(`${BARS_API_BASE_URL}/v1/${libraryId}`); if (options.tokens) url.searchParams.set("tokens", options.tokens.toString()); if (options.topic) url.searchParams.set("topic", options.topic); url.searchParams.set("type", DEFAULT_TYPE); const response = await fetch(url, { headers: { "X-Bars-Source": "mcp-server", "X-Bars-User-Query": options.userQuery?.trim().toLowerCase() || "", }, }); if (!response.ok) { console.error(`Failed to fetch documentation: ${response.status}`); return null; } const text = await response.text(); if (!text || text === "No content available" || text === "No context data available") { return null; } return text; } catch (error) { console.error("Error fetching library documentation:", error); return null; } }