ScriptMaster Labs docs/context MCP server — real npm/PyPI docs + OSV.dev vulnerability data for AI coding agents. No fake data.
git clone https://github.com/Timwal78/scriptdocs-mcp-server{
"mcpServers": {
"scriptdocs": {
"command": "node",
"args": ["/path/to/scriptdocs-mcp-server/dist/index.js"]
}
}
}MCP Servers overview
# ScriptDocs MCP Server
A Model Context Protocol (MCP) server that gives AI coding agents **real,
live, source-cited documentation** for npm and PyPI packages — pulled
directly from `registry.npmjs.org` and `pypi.org` at call time.
Built by ScriptMaster Labs.
## What this actually does (and doesn't)
Every tool call makes a real HTTP request to the actual registry. There is
no cached demo data, no fabricated example output, and no guessing. If a
package or its docs can't be found, the tool returns an explicit error —
never a plausible-looking made-up answer. Every successful response
includes `source_url` and `fetched_at` so the caller can verify exactly
where the data came from and how fresh it is.
**Not yet built** (honest status, not hype):
- Payment/licensing (Stripe, API keys, usage tiers) — this is scaffolding
work that needs your real Stripe account and pricing decisions. Nothing
in this repo simulates a working payment system.
- GitHub-source doc fetching beyond README/long-description (e.g. specific
guide pages, versioned doc sites) — README/long-description only in v0.1.
## Tools
| Tool | What it does |
|---|---|
| `docs_get_package_info` | Live metadata: latest version, description, homepage, repo — npm, PyPI, or Cargo (crates.io), right now. |
| `docs_get_readme` | The verbatim README (npm), long description (PyPI), or README-derived text (Cargo — see note below) for a package/version. |
| `docs_search_docs` | Keyword search inside a package's real docs (any of the 3 ecosystems, optionally a specific version), returns verbatim matching snippets with context — not a summary. |
| `docs_check_vulnerabilities` | Checks a specific package+version against OSV.dev. When a fix exists, **automatically fetches that fixed version's README in the same call** — "here's what's wrong" and "here's what upgrading looks like," one round trip. |
| `docs_resolve_library` | Fuzzy name → real candidates, via npm's and crates.io's actual search APIs. PyPI has no official search API (confirmed: XML-RPC search was killed in 2022, never replaced) — calling this for PyPI returns an honest explanation, not a scraped or fabricated result. |
**Note on Cargo READMEs**: crates.io stores READMEs pre-rendered as HTML, not the original markdown source — there's no raw-source endpoint. `docs_get_readme`/`docs_search_docs` return that HTML converted to plain text (tags stripped, entities decoded) — a mechanical transformation, not a summary; no content is invented or dropped.
## Project layout
```
scriptdocs-mcp-server/
├── package.json
├── tsconfig.json
├── Dockerfile
├── src/
│ ├── index.ts # server entry point, transport selection
│ ├── constants.ts
│ ├── types.ts
│ ├── services/
│ │ ├── npm.ts # real npm registry client
│ │ ├── npmSearch.ts # real npm search API (fuzzy resolution)
│ │ ├── pypi.ts # real PyPI registry client (supports version pinning)
│ │ ├── cargo.ts # real crates.io client (metadata, readme, search)
│ │ ├── osv.ts # real OSV.dev vulnerability database client
│ │ ├── versionCompare.ts # best-effort numeric version comparator
│ │ ├── access.ts # founder always-free guarantee
│ │ └── docSearch.ts # keyword/snippet extraction over fetched text
│ └── tools/
│ ├── getPackageInfo.ts
│ ├── getReadme.ts
│ ├── searchDocs.ts
│ ├── checkVulnerabilities.ts
│ └── resolveLibrary.ts
└── dist/ # build output (git-ignored)
```
## Run it locally (stdio — for Claude Desktop / Cursor)
```bash
npm install
npm run build
node dist/index.js
```
To wire it into Claude Desktop or Cursor, point their MCP config at:
```json
{
"mcpServers": {
"scriptdocs": {
"command": "node",
"args": ["/absolute/path/to/scriptdocs-mcp-server/dist/index.js"]
}
}
}
```
## Run it as a remote server (HTTP — for Render, same pattern as your other services)
```bash
npm install
npm run build
TRANSPORT=http PORT=3000 node dist/index.js
```
- Health check: `GET /health`
- MCP endpoint: `POST /mcp`
### Deploy to Render
The included `Dockerfile` builds and runs the HTTP transport. Point a
Render Web Service at this repo with:
- **Environment**: Docker
- **Health check path**: `/health`
This mirrors how `mcp-x402` and `squeezeos-api` are already deployed.
## Verified working (tested against live registries and APIs)
- **v0.3.1 fixed a real published-package bug**: `dist/index.js` had no
`#!/usr/bin/env node` shebang and wasn't marked executable, so running
it as a bin (exactly what `npx`/Claude Code do) failed — on Linux with
a shell syntax error, and this was very likely the cause of the
"Failed to connect" a real Windows user hit via Claude Code. Root
cause confirmed by directly executing the packed tarball's bin file
before and after the fix, not assumed. `postbuild` now runs
`chmod +x dist/index.js` so this can't silently regress.
- `docs_get_package_info` → `express` (npm), `serde` (cargo) returned real
current metadata straight from their respective registries.
- `docs_get_readme` → `zod` (npm, jsDelivr fallback), `requests` (PyPI,
latest + version-pinned), and `serde` (cargo) all returned real README
content. The cargo path hit a real bug during testing — crates.io's
README endpoint varies its response by `Accept` header and was
returning a JSON pointer instead of HTML — caught and fixed, verified
again after the fix.
- `docs_search_docs` → keyword search over real docs verified across
npm and cargo.
- `docs_check_vulnerabilities` → `express@4.17.1` correctly returned 2
real advisories (incl. CVE-2024-43796) *and* automatically fetched the
real README for `4.20.0` (the fixed version) in the same call — the
vuln-to-fix bridge, verified working end-to-end.
- `docs_resolve_library` → real fuzzy search verified for npm ("react"
→ react, react-is, ...) and cargo ("http client" → real candidates).
PyPI correctly returns an honest limitation message instead of a
fabricated result (verified: PyPI has had no official search API
since 2022).
- Nonexistent package name → correctly returns an explicit
`isError: true` response instead of fabricating a plausible answer.
- Both `stdio` and `TRANSPORT=http` modes verified against the actual
MCP JSON-RPC protocol (`initialize`, `tools/list`, `tools/call`).
## Founder always-free guarantee
ScriptMaster Labs (you) always gets full, unmetered, free access to every
tool this server exposes — no matter what paid tiers get built later.
This is baked into the architecture now, before any billing exists, not
retrofitted after the fact:
- `src/services/access.ts` exports `isOwnerRequest()`, checked against a
secret in the `SCRIPTDOCS_OWNER_KEY` environment variable (never
hardcoded — this repo is public, so a hardcoded bypass would give
everyone free access, not just you).
- The HTTP transport already tags every request with an
`x-scriptdocs-access-tier` response header (`owner-unlimited` or
`standard`) — verified working, not just written.
- **Rule for any future billing/rate-limit code**: call
`isOwnerRequest()` first and skip all limits/charges when it returns
true.
To use it once deployed: set `SCRIPTDOCS_OWNER_KEY` as an environment
variable on your Render service, then send requests with header
`x-scriptdocs-owner-key: <that value>`. Keep the value secret — it's
not in this repo, and shouldn't be.
## Getting listed as a real alternative (not hype — the actual mechanics)
There's no "beat Context7's ranking" button. There's one source-of-truth
feed and a handful of directories that read from it. This is the real,
current (as of July 2026) process, verified against the official docs at
`modelcontextprotocol.io/registry`:
1. **The official MCP Registry** (`registry.modelcontextprotocol.io`) is
what a growing number of AI clients read to discover servers. There's
no review queue — you publish a `server.json` record under a namespace
you prove you own, and it's live.
2. **Discovery directories** — Smithery, Glama, PulseMCP, mcp.so — crawl
GitHub and the registry on their own. You may already show up there
unclaimed once this is public; claiming ownership is what lets you
control the description instead of a bot's guess.
### What's already prepped in this repo
- `package.json` has `"mcpName": "io.github.Timwal78/scriptdocs-mcp-server"`
and is renamed to the scoped package `@scriptmasterlabs/scriptdocs-mcp-server`
(under the existing `@scriptmasterlabs` org scope — same one publishing
`mcp-x402` and `mcp-x402-sdk` — rather than a personal scope, since this
sits alongside your other MCP infrastructure)
- `server.json` is written and **validated against the real, live official
schema** (`static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json`)
— not guessed at.
- `.github/workflows/publish-mcp.yml` auto-publishes to npm **and** the MCP
Registry every time you push a `v*` tag, using the official OIDC flow
(no registry secret needed — just an `NPM_TOKEN`).
- License changed from `UNLICENSED` to `MIT` — a package meant for
strangers to install needs a license that actually lets them use it.
### What only you can do (needs your accounts/credentials — I don't have them)
1. **Push this to a public GitHub repo** at `github.com/Timwal78/scriptdocs-mcp-server`
(or wherever you want it — update `repository` in `package.json` and
`server.json` to match if the path differs).
2. **Add an `NPM_TOKEN` secret** to that repo (Settings → Secrets → Actions)
from an npm access token tied to your npm account.
3. **Tag and push a release**: `git tag v0.2.0 && git push origin v0.2.0` —
the workflow handles npm publish + MCP Registry publish automatically
from there.
4. **Claim your listing** on [Smithery](https://smithery.ai),
[Glama](https://glama.ai/mcp), and [PulseMCP](https://pulsemcp.com) once
the registry record is live — they crawl and ofteWhat people ask about scriptdocs-mcp-server
What is Timwal78/scriptdocs-mcp-server?
+
Timwal78/scriptdocs-mcp-server is mcp servers for the Claude AI ecosystem. ScriptMaster Labs docs/context MCP server — real npm/PyPI docs + OSV.dev vulnerability data for AI coding agents. No fake data. It has 0 GitHub stars and was last updated today.
How do I install scriptdocs-mcp-server?
+
You can install scriptdocs-mcp-server by cloning the repository (https://github.com/Timwal78/scriptdocs-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is Timwal78/scriptdocs-mcp-server safe to use?
+
Timwal78/scriptdocs-mcp-server has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains Timwal78/scriptdocs-mcp-server?
+
Timwal78/scriptdocs-mcp-server is maintained by Timwal78. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to scriptdocs-mcp-server?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy scriptdocs-mcp-server to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/timwal78-scriptdocs-mcp-server)<a href="https://claudewave.com/repo/timwal78-scriptdocs-mcp-server"><img src="https://claudewave.com/api/badge/timwal78-scriptdocs-mcp-server" alt="Featured on ClaudeWave: Timwal78/scriptdocs-mcp-server" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!