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

mcp-server-dev-docs

v1.1.0

Published

MCP server providing live, clean fullstack tech documentation for React, Next.js, TypeScript, Tailwind, Zustand, and custom URLs.

Readme

mcp-server-dev-docs

An MCP server that provides live, clean, LLM-ready markdown documentation for popular fullstack technologies — and any custom documentation URL.

It fetches pages through https://r.jina.ai/ under the hood to strip navigation, ads, and boilerplate, returning clean markdown. No API key or authentication required.

Features

  • Built-in presets for React 19, Next.js, TypeScript, Tailwind CSS, Zustand, TanStack Query v5, Node.js, Prisma, and Express.
  • Fetch any arbitrary documentation URL as clean markdown.
  • Search live docs by technology (and optional version) via DuckDuckGo, then return clean markdown for the top results through Jina Reader.
  • Detect dependency versions from the current project's package.json.
  • Automatic truncation of very large pages (> 25,000 characters) to keep responses LLM-friendly.
  • Zero configuration and no API keys.

Tools

list_supported_presets

Lists the built-in preset keys, their target URLs, and descriptions. Takes no arguments.

get_fullstack_docs

Fetches clean markdown documentation. Provide exactly one of:

| Argument | Type | Description | | ------------ | -------- | ----------------------------------------------------------------- | | preset | string | A built-in preset key (see below), e.g. react. | | customUrl | string | Any documentation URL to fetch as clean markdown. |

detect_project_versions

Reads package.json from the current working directory (process.cwd()) and returns a JSON summary of dependencies and devDependencies with their declared versions. Takes no arguments.

search_docs

Searches documentation for a technology and returns clean markdown for up to the top 2 DuckDuckGo results (fetched in parallel via Jina Reader).

| Argument | Type | Required | Description | | -------------- | -------- | -------- | -------------------------------------------------------- | | query | string | yes | Search terms, e.g. useActionState or app router. | | technology | string | yes | Technology name, e.g. react, nextjs, tailwind. | | version | string | no | Optional version scope, e.g. 19 or 15. |

Search behavior:

  1. Primary query (when the technology has a known docs domain):
    site:<domain> <technology> <version?> <query>
    Example: site:react.dev react 19 useActionState
  2. Fallback if the primary search returns no links:
    <technology> <version?> docs <query>
  3. Extract up to two result URLs, fetch markdown for both with Promise.all, and return them as:
--- Result 1: <url> ---

...

--- Result 2: <url> ---

...

Mapped domains include reactreact.dev, nextjs/nextnextjs.org, tailwind/tailwindcsstailwindcss.com, and zustandzustand-demo.pmnd.rs.

Note: DuckDuckGo may rate-limit or challenge automated HTML searches after many requests. If searches fail intermittently, wait and retry, or use get_fullstack_docs with a preset/customUrl.

Supported presets

| Key | Documentation | | ---------------- | ------------------------------------------------- | | react | React 19 reference | | nextjs | Next.js docs (App Router, rendering, routing) | | typescript | TypeScript handbook | | tailwind | Tailwind CSS docs | | zustand | Zustand state management | | tanstack-query | TanStack Query v5 (React) | | nodejs | Node.js API | | prisma | Prisma ORM | | express | Express 4.x API reference |

Installation & Usage

The server runs over stdio and is intended to be launched by an MCP client. The easiest way is via npx (no global install needed):

npx mcp-server-dev-docs

Cursor

Add the server to your Cursor MCP config at ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project):

{
  "mcpServers": {
    "dev-docs": {
      "command": "npx",
      "args": ["-y", "mcp-server-dev-docs"]
    }
  }
}

Then reload Cursor. The tools list_supported_presets, get_fullstack_docs, detect_project_versions, and search_docs will be available to the agent.

Claude Desktop

Add the server to claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "dev-docs": {
      "command": "npx",
      "args": ["-y", "mcp-server-dev-docs"]
    }
  }
}

Restart Claude Desktop to load the server.

Local Development

Requires Node.js >= 18 and Yarn.

git clone https://github.com/Orel-Toledano/mcp-server-dev-docs.git
cd mcp-server-dev-docs
yarn install
yarn build      # compiles TypeScript to ./build and marks the entry executable
yarn start      # runs the compiled server over stdio

To point an MCP client at your local build, use an absolute path:

{
  "mcpServers": {
    "dev-docs": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-dev-docs/build/index.js"]
    }
  }
}

Smoke test

You can exercise the JSON-RPC handshake without a full client:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
  | node build/index.js

Or use the MCP Inspector:

npx @modelcontextprotocol/inspector node build/index.js

Publishing

This package builds automatically before publish via the prepare script.

# Inspect the tarball contents first (dry run)
yarn pack

# Authenticate with the npm registry
yarn login

# Publish (public access for unscoped/public packages)
yarn publish --access public

Only the compiled build/ directory is published (see the files field in package.json).

How it works

  • get_fullstack_docs resolves a target URL (from a preset or customUrl) and requests https://r.jina.ai/<target-url> with X-Return-Format: markdown.
  • search_docs finds candidate URLs via DuckDuckGo HTML search, then fetches each through the same Jina Reader path.
  • Large pages are truncated at 25,000 characters to keep responses LLM-friendly.

Project structure

src/
  index.ts                 # MCP server entry (stdio)
  presets.ts               # Built-in documentation presets
  fetchDocs.ts             # Jina Reader fetch + truncation
  search.ts                # Domain map, DDG query/parse helpers
  tools/
    index.ts               # Registers all tools
    listSupportedPresets.ts
    getFullstackDocs.ts
    detectProjectVersions.ts
    searchDocs.ts

License

MIT