Skip to main content
Glama
formatting.js2.64 kB
/** * Formatting utilities for search results to match official Kagi MCP output */ import { resolveToken } from "./auth.js"; /** * Format search results from kagi-ken to match official MCP format * @param {Array<string>} queries - The search queries * @param {Array<Object>} responses - The search responses from kagi-ken * @returns {string} Formatted search results string */ export function formatSearchResults(queries, responses) { const resultTemplate = (resultNumber, title, url, published, snippet) => `${resultNumber}: ${title} ${url} Published Date: ${published} ${snippet}`; const queryResponseTemplate = (query, formattedSearchResults) => `----- Results for search query "${query}": ----- ${formattedSearchResults}`; const perQueryResponseStrs = []; let startIndex = 1; for (let i = 0; i < queries.length; i++) { const query = queries[i]; const response = responses[i]; // Filter for search results (assuming kagi-ken returns similar structure) const results = response?.results || response?.data || []; const formattedResultsList = results.map((result, index) => { const resultNumber = startIndex + index; return resultTemplate( resultNumber, result.title || "No Title", result.url || "", result.published || result.publishedDate || "Not Available", result.snippet || result.description || "No snippet available", ); }); startIndex += results.length; const formattedResultsStr = formattedResultsList.join("\n\n"); const queryResponseStr = queryResponseTemplate(query, formattedResultsStr); perQueryResponseStrs.push(queryResponseStr); } return perQueryResponseStrs.join("\n\n"); } /** * Handle errors consistently across tools * @param {Error|string} error - The error to format * @returns {string} Formatted error message */ export function formatError(error) { if (error instanceof Error) { return `Error: ${error.message || error.toString()}`; } return `Error: ${error || "Unknown error occurred"}`; } /** * Get configuration with token resolution and environment variables * Uses the same token resolution as kagi-ken-cli: * 1. Environment variable KAGI_SESSION_TOKEN * 2. Token file ~/.kagi_session_token * * @returns {Object} Environment configuration */ export function getEnvironmentConfig() { const token = resolveToken(); // Note: kagi-ken might not support engine selection like the official API // We'll keep this for compatibility but may not use it const engine = process.env.KAGI_SUMMARIZER_ENGINE || "default"; return { token, engine }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/czottmann/kagi-ken-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server