bing-search-to-markdown
Convert Bing search results into Markdown format for easy readability and sharing. Use the tool by providing the search page URL to transform results into structured Markdown text.
Instructions
Convert a Bing search results page to markdown
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the Bing search results page |
Implementation Reference
- src/server.ts:49-70 (handler)Handler logic for executing 'bing-search-to-markdown' tool (shared with similar URL-based tools): validates the input URL for safety (protocol and private IP), then delegates to Markdownify.toMarkdown for conversion.case tools.YouTubeToMarkdownTool.name: case tools.BingSearchResultToMarkdownTool.name: case tools.WebpageToMarkdownTool.name: if (!validatedArgs.url) { throw new Error("URL is required for this tool"); } const parsedUrl = new URL(validatedArgs.url); if (!["http:", "https:"].includes(parsedUrl.protocol)) { throw new Error("Only http: and https: schemes are allowed."); } if (is_ip_private(parsedUrl.hostname)) { throw new Error(`Fetching ${validatedArgs.url} is potentially dangerous, aborting.`); } result = await Markdownify.toMarkdown({ url: validatedArgs.url, projectRoot: validatedArgs.projectRoot, uvPath: validatedArgs.uvPath || process.env.UV_PATH, }); break;
- src/tools.ts:34-47 (schema)Tool schema defining name, description, and input schema (url: string) for 'bing-search-to-markdown'.export const BingSearchResultToMarkdownTool = ToolSchema.parse({ name: "bing-search-to-markdown", description: "Convert a Bing search results page to markdown", inputSchema: { type: "object", properties: { url: { type: "string", description: "URL of the Bing search results page", }, }, required: ["url"], }, });
- src/server.ts:33-37 (registration)Registers the tool as part of all tools from tools.ts in the ListToolsRequest handler.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: Object.values(tools), }; });
- src/Markdownify.ts:74-124 (helper)Helper function that implements the core markdown conversion: fetches URL content, saves to temporary file, executes 'markitdown' via 'uv run' to convert to markdown, saves output.static async toMarkdown({ filePath, url, projectRoot = path.resolve(__dirname, ".."), uvPath = "~/.local/bin/uv", }: { filePath?: string; url?: string; projectRoot?: string; uvPath?: string; }): Promise<MarkdownResult> { try { let inputPath: string; let isTemporary = false; if (url) { const response = await fetch(url); let extension = null; if (url.endsWith(".pdf")) { extension = "pdf"; } const arrayBuffer = await response.arrayBuffer(); const content = Buffer.from(arrayBuffer); inputPath = await this.saveToTempFile(content, extension); isTemporary = true; } else if (filePath) { inputPath = filePath; } else { throw new Error("Either filePath or url must be provided"); } const text = await this._markitdown(inputPath, projectRoot, uvPath); const outputPath = await this.saveToTempFile(text); if (isTemporary) { fs.unlinkSync(inputPath); } return { path: outputPath, text }; } catch (e: unknown) { if (e instanceof Error) { throw new Error(`Error processing to Markdown: ${e.message}`); } else { throw new Error("Error processing to Markdown: Unknown error occurred"); } } }