npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

multifetch-mcp

v0.2.0

Published

MCP server for fetching URLs and searching the web via Jina Reader with markdown.new and defuddle.md fallbacks. Zero config, works for Claude Code and Claude Desktop.

Readme

multifetch-mcp

A zero-config MCP server that lets Claude fetch any URL and search the web, with content returned as clean Markdown.

  • Primary backend: Jina Reader (r.jina.ai + s.jina.ai)
  • Automatic fallback: markdown.new (URL → Markdown) and markdown.new/search (web search via Serper.dev)
  • Second fallback for fetch: defuddle.md (URL → Markdown with YAML frontmatter)
  • No API key required for fetch (r.jina.ai is free). search uses the free markdown.new provider by default; set JINA_API_KEY to route search through Jina too and to raise fetch rate limits.
  • Distributed via npm — runs with a single npx command.

Install

Claude Desktop

Open claude_desktop_config.json and add:

{
  "mcpServers": {
    "multifetch": {
      "command": "npx",
      "args": ["-y", "multifetch-mcp"]
    }
  }
}

Then restart Claude Desktop. That's it.

Claude Code

Bash / zsh / Git Bash:

claude mcp add multifetch -- npx -y multifetch-mcp

PowerShell (needs the --% stop-parsing token, otherwise PowerShell consumes the -- separator before it reaches claude):

claude mcp add multifetch --% -- npx -y multifetch-mcp

Windows CMD:

claude mcp add multifetch -- npx -y multifetch-mcp

If both forms fail in your shell, edit ~/.claude.json directly (see Manual config below).

Manual config

If the claude mcp add command misbehaves in your shell, you can edit ~/.claude.json directly. Find the mcpServers object (create it if missing) and add:

"mcpServers": {
  "multifetch": {
    "type": "stdio",
    "command": "npx",
    "args": ["-y", "multifetch-mcp"]
  }
}

Optional: higher rate limits

Set JINA_API_KEY (get a free one at jina.ai) to bypass the anonymous rate limit:

{
  "mcpServers": {
    "multifetch": {
      "command": "npx",
      "args": ["-y", "multifetch-mcp"],
      "env": {
        "JINA_API_KEY": "jina_..."
      }
    }
  }
}

Tools

fetch

Convert any URL to clean Markdown.

| Param | Type | Description | |---|---|---| | url | string (required) | Absolute URL to fetch | | format | markdown | frontmatter | html | text | Output format (Jina only). Default markdown | | no_cache | boolean | Bypass cached version | | target_selector | string | CSS selector to extract content from (Jina only) | | timeout | integer (1–180) | Max seconds to wait (Jina only) | | max_tokens | integer (≥500) | Truncate response to N tokens (Jina only) | | engine | auto | browser | Force a fetching engine. Use browser for JS-heavy sites |

Behavior: tries r.jina.ai first. If it fails (network / 4xx / 5xx / rate limit), falls back to markdown.new/<url>, then to defuddle.md/<url>. Returns a clear error only if all three providers fail.

search

Search the web and get the top results as Markdown.

| Param | Type | Description | |---|---|---| | query | string (required) | Search query | | site | string[] | Restrict to specific domains (Jina only) | | n | integer (1–5) | Number of results (markdown.new fallback). Default 3 | | no_cache | boolean | Bypass cached SERP (Jina only) |

Behavior: Jina's search endpoint (s.jina.ai) requires JINA_API_KEY — without one it returns 401. So by default (no key) search goes straight to markdown.new/search/<query> (powered by Serper.dev, top N pages) without a wasted Jina round-trip. When a key is set, it tries s.jina.ai first and falls back to markdown.new on any error.


Example prompts

Fetch https://example.com and summarize it.

Search the web for "MCP protocol" and give me the highlights from the top results.

Fetch https://news.ycombinator.com using the browser engine (JS-heavy site).


Develop locally

npm install
npm run build
node dist/index.js   # starts MCP server on stdio

To wire your local build into Claude Desktop, point the command at the absolute path of dist/index.js:

{
  "mcpServers": {
    "multifetch": {
      "command": "node",
      "args": ["C:\\path\\to\\multifetch\\dist\\index.js"]
    }
  }
}

Smoke-test with the official MCP inspector:

npx @modelcontextprotocol/inspector node dist/index.js

License

MIT