Skip to main content
Glama
JDJR2024

Markdownify MCP Server - UTF-8 Enhanced

by JDJR2024

bing-search-to-markdown

Convert Bing search results into Markdown format for easy documentation and sharing, using the Markdownify MCP Server with enhanced UTF-8 support.

Instructions

Convert a Bing search results page to markdown

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the Bing search results page

Implementation Reference

  • Handler logic for the 'bing-search-to-markdown' tool. It is grouped with other URL-based tools (YouTube, webpage). Validates the URL input and calls Markdownify.toMarkdown to perform the 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");
      }
      result = await Markdownify.toMarkdown({
        url: validatedArgs.url,
        projectRoot: validatedArgs.projectRoot,
        uvPath: validatedArgs.uvPath || process.env.UV_PATH,
      });
      break;
  • Defines the ToolSchema for 'bing-search-to-markdown', including name, description, and input schema requiring a 'url' parameter for the Bing search results page.
    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:31-35 (registration)
    Registers all tools from the tools module (including bing-search-to-markdown) in the MCP server's listTools request handler.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: Object.values(tools),
      };
    });
  • Core helper function that handles URL inputs by fetching HTML content, saving to a temporary file, converting it to markdown using the markitdown tool, and returning the markdown text and output path.
    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);
          const content = await response.text();
          inputPath = await this.saveToTempFile(content);
          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");
        }
      }
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Convert') but doesn't explain what the conversion entails (e.g., formatting, extraction of specific elements), potential errors (e.g., invalid URLs), or output characteristics (e.g., markdown structure). This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly without unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't address key aspects like what the markdown output includes (e.g., search results, metadata), error handling, or how it differs from sibling tools, leaving the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the parameter 'url' clearly documented in the input schema. The description doesn't add any additional meaning beyond this, such as URL format requirements or examples, but the schema provides adequate baseline information, justifying a score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Convert') and resource ('Bing search results page'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'webpage-to-markdown' or 'get-markdown-file', which could cause confusion about when to use this specific tool versus similar alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With siblings like 'webpage-to-markdown' that might handle general webpages, the description lacks context on prerequisites (e.g., requiring a Bing search URL) or exclusions, leaving the agent to guess based on the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

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/JDJR2024/markdownify-mcp-utf8'

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