{
  "markdown": "# Dependency Health MCP\n\n> Package alive? Verdict with evidence: deprecated, archived, stale or active; plus runtime EOL dates. Remote MCP server over Streamable HTTP at `https://dephealth.dsh.sh/mcp`. Free, no API key. Tools: `package_health`, `deps_audit`, `runtime_eol`. The tool list is fixed per version.\n\nOne call answers whether a package is still alive: a verdict (deprecated, archived, stale, active or unknown) with the evidence behind it — registry deprecation (per-version on npm, go.mod Deprecated/retract for Go, NuGet deprecation, Packagist abandoned), yanked releases, repository archived and last-push dates, maintainer and dependent counts, known advisories for the exact version, and what replaced it. Covers npm, PyPI, crates.io, RubyGems, Go modules, Maven, NuGet and Packagist through ecosyste.ms, the native registries and deps.dev, all keyless. deps_audit takes a whole package.json or requirements.txt (up to 25 packages) and runtime_eol reports endoflife.date support and EOL dates for runtimes and OSes. Free, no key, no account; every response lists the upstream calls it made.\n\nUse when: Before pinning, upgrading or auditing a dependency: package_health returns whether it is deprecated, archived, stale or active with the raw registry evidence, advisories for the version you use and the replacement if there is one; deps_audit does the same for a whole manifest; runtime_eol says whether a Node, Python, OS or database version is still supported and when it dies.\n\nNot for: Not a vulnerability scanner (advisory ids only, no CVSS triage or reachability), not license compliance, not a popularity ranking, and it cannot see private registries or vendored code.\n\nQuick install (Claude Code): `claude mcp add --transport http dephealth https://dephealth.dsh.sh/mcp -s user`\n\nLive server: https://dephealth.dsh.sh\n\n## Docs\n\n- [Full reference](https://dephealth.dsh.sh/llms-full.txt): every tool with its JSON input schema and an example\n- [Install for any client](https://dephealth.dsh.sh/install): Claude Code, Cursor, VS Code, Claude Desktop, ChatGPT, Codex, Gemini CLI, Windsurf, Cline, Continue, Zed\n- [OpenAPI twin](https://dephealth.dsh.sh/openapi.json): the same tools as plain HTTP POST endpoints\n- [Registry server.json](https://dephealth.dsh.sh/.well-known/mcp/server.json): machine-readable server record\n- [Server card](https://dephealth.dsh.sh/.well-known/mcp/server-card.json): transport + tool card (also at https://dephealth.dsh.sh/.well-known/mcp.json, SEP-1960)\n- [ARD manifest](https://dephealth.dsh.sh/.well-known/ard.json): Agentic Resource Discovery entry (also at https://dephealth.dsh.sh/.well-known/ai-catalog.json)\n\n## Upstreams\n\n- [ecosyste.ms packages API](https://packages.ecosyste.ms/api/v1): keyless\n- [deps.dev v3](https://api.deps.dev/v3): keyless\n- [npm registry](https://registry.npmjs.org): keyless\n- [PyPI JSON API](https://pypi.org/pypi): keyless\n- [crates.io API](https://crates.io/api/v1): keyless\n- [RubyGems API](https://rubygems.org/api/v1): keyless\n- [Go module proxy](https://proxy.golang.org): keyless\n- [NuGet registration index](https://api.nuget.org/v3): keyless\n- [Packagist p2](https://repo.packagist.org/p2): keyless\n- [GitHub REST (fallback only)](https://api.github.com): keyless\n- [endoflife.date API](https://endoflife.date/api): keyless\n\n## Optional\n\n- [Health](https://dephealth.dsh.sh/healthz): liveness JSON\n- [Owner](https://github.com/ux-xd/dephealth-mcp): ux-xd\n\n## Tools\n\n| Tool | Purpose | Effects |\n| --- | --- | --- |\n| `package_health` | Is this package alive? One verdict — deprecated, archived, stale, active or unknown — with the evidence: per-version deprecation from the native registry, yanked/retracted latest release, repository archived and last-push dates, maintainer and dependent counts, advisory ids for the exact version, and what replaced it. Use when choosing, pinning or upgrading a dependency in npm, PyPI, crates.io, RubyGems, Go, Maven, NuGet or Packagist. | read-only, open-world, idempotent |\n| `deps_audit` | Health verdict for every package in a manifest or a list, in one call (≤25 packages): deprecated / archived / stale / active / unknown per package with the latest version, release and push ages, advisory counts and replacements, plus a summary. Use when reviewing a repository's package.json or requirements.txt before an upgrade, an audit or a fork decision. | read-only, open-world, idempotent |\n| `runtime_eol` | Support and end-of-life dates for a runtime, OS, database or framework version from endoflife.date (470+ products): each cycle with a verdict — supported, security-only or eol — the latest patch, LTS flag and days to EOL. Use when deciding which Node, Python, Ubuntu, PostgreSQL, Java, Django… version to target or whether a deployed one is still safe. | read-only, open-world, idempotent |\n\nEvery tool takes `task_context`: one sentence on what the user is trying to do. It is required.\n\n### `package_health`\n\nIs this package alive? One verdict — deprecated, archived, stale, active or unknown — with the evidence: per-version deprecation from the native registry, yanked/retracted latest release, repository archived and last-push dates, maintainer and dependent counts, advisory ids for the exact version, and what replaced it. Use when choosing, pinning or upgrading a dependency in npm, PyPI, crates.io, RubyGems, Go, Maven, NuGet or Packagist.\n\nInput schema:\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"ecosystem\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"npm\",\n        \"pypi\",\n        \"cargo\",\n        \"rubygems\",\n        \"go\",\n        \"maven\",\n        \"nuget\",\n        \"packagist\"\n      ],\n      \"description\": \"npm | pypi | cargo (crates.io) | rubygems | go (module path) | maven (group:artifact) | nuget | packagist (vendor/package)\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200,\n      \"description\": \"Package name as the registry spells it: \\\"@scope/name\\\", \\\"requests\\\", \\\"serde\\\", \\\"rails\\\", \\\"github.com/gorilla/mux\\\", \\\"org.apache.commons:commons-lang3\\\", \\\"Newtonsoft.Json\\\", \\\"monolog/monolog\\\"\"\n    },\n    \"version\": {\n      \"description\": \"The exact version you use or intend to pin; enables per-version advisories and deprecation. Omit for the latest.\",\n      \"type\": \"string\",\n      \"maxLength\": 80\n    },\n    \"task_context\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 500,\n      \"description\": \"One sentence on what the user is ultimately trying to do (the task this call serves). Required; it tunes the result and is how this free service learns what agents need.\"\n    }\n  },\n  \"required\": [\n    \"ecosystem\",\n    \"name\",\n    \"task_context\"\n  ],\n  \"additionalProperties\": false\n}\n```\n\nExample arguments:\n\n```json\n{\n  \"ecosystem\": \"npm\",\n  \"name\": \"request\",\n  \"task_context\": \"example: Is this package alive? One verdict — deprecated, archived, s\"\n}\n```\n\n### `deps_audit`\n\nHealth verdict for every package in a manifest or a list, in one call (≤25 packages): deprecated / archived / stale / active / unknown per package with the latest version, release and push ages, advisory counts and replacements, plus a summary. Use when reviewing a repository's package.json or requirements.txt before an upgrade, an audit or a fork decision.\n\nInput schema:\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"packages\": {\n      \"description\": \"Explicit list of packages; combine with or instead of `manifest`.\",\n      \"maxItems\": 25,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"ecosystem\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"npm\",\n              \"pypi\",\n              \"cargo\",\n              \"rubygems\",\n              \"go\",\n              \"maven\",\n              \"nuget\",\n              \"packagist\"\n            ],\n            \"description\": \"npm | pypi | cargo (crates.io) | rubygems | go (module path) | maven (group:artifact) | nuget | packagist (vendor/package)\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 200,\n            \"description\": \"Package name as the registry spells it: \\\"@scope/name\\\", \\\"requests\\\", \\\"serde\\\", \\\"rails\\\", \\\"github.com/gorilla/mux\\\", \\\"org.apache.commons:commons-lang3\\\", \\\"Newtonsoft.Json\\\", \\\"monolog/monolog\\\"\"\n          },\n          \"version\": {\n            \"type\": \"string\",\n            \"maxLength\": 80\n          }\n        },\n        \"required\": [\n          \"ecosystem\",\n          \"name\"\n        ],\n        \"additionalProperties\": false\n      }\n    },\n    \"manifest\": {\n      \"description\": \"Raw package.json (dependencies, devDependencies, peer, optional) or requirements.txt text; other formats are reported as unparsed.\",\n      \"type\": \"string\",\n      \"maxLength\": 60000\n    },\n    \"manifest_kind\": {\n      \"default\": \"auto\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"auto\",\n        \"package.json\",\n        \"requirements.txt\"\n      ]\n    },\n    \"task_context\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 500,\n      \"description\": \"One sentence on what the user is ultimately trying to do (the task this call serves). Required; it tunes the result and is how this free service learns what agents need.\"\n    }\n  },\n  \"required\": [\n    \"manifest_kind\",\n    \"task_context\"\n  ],\n  \"additionalProperties\": false\n}\n```\n\nExample arguments:\n\n```json\n{\n  \"manifest\": \"{\\\"dependencies\\\":{\\\"request\\\":\\\"^2.88.2\\\",\\\"lodash\\\":\\\"4.17.20\\\",\\\"left-pad\\\":\\\"^1.3.0\\\"}}\",\n  \"task_context\": \"example: Health verdict for every package in a manifest or a list, in\"\n}\n```\n\n### `runtime_eol`\n\nSupport and end-of-life dates for a runtime, OS, database or framework version from endoflife.date (470+ products): each cycle with a verdict — supported, security-only or eol — the latest patch, LTS flag and days to EOL. Use when deciding which Node, Python, Ubuntu, PostgreSQL, Java, Django… version to target or whether a deployed one is still safe.\n\nInput schema:\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"product\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 60,\n      \"description\": \"endoflife.date product name or alias: \\\"nodejs\\\" (or \\\"node\\\"), \\\"python\\\", \\\"ubuntu\\\", \\\"postgresql\\\", \\\"django\\\", \\\"java\\\", \\\"rails\\\", \\\"go\\\", \\\"php\\\", \\\"redis\\\"\"\n    },\n    \"cycle\": {\n      \"description\": \"One release cycle to report, e.g. \\\"22\\\" for Node 22, \\\"3.12\\\" for Python, \\\"24.04\\\" for Ubuntu. Omit for every cycle.\",\n      \"type\": \"string\",\n      \"maxLength\": 30\n    },\n    \"task_context\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 500,\n      \"description\": \"One sentence on what the user is ultimately trying to do (the task this call serves). Required; it tunes the result and is how this free service learns what agents need.\"\n    }\n  },\n  \"required\": [\n    \"product\",\n    \"task_context\"\n  ],\n  \"additionalProperties\": false\n}\n```\n\nExample arguments:\n\n```json\n{\n  \"product\": \"nodejs\",\n  \"cycle\": \"22\",\n  \"task_context\": \"example: Support and end-of-life dates for a runtime, OS, database or\"\n}\n```\n\n## Install\n\nEndpoint: `https://dephealth.dsh.sh/mcp` (Streamable HTTP, MCP 2026-07-28 with 2025-era fallback). Authentication: none.\n\n#### Claude Code\n\n```\nclaude mcp add --transport http dephealth https://dephealth.dsh.sh/mcp -s user\n```\n\n#### Cursor (~/.cursor/mcp.json)\n\n```json\n{\n  \"mcpServers\": {\n    \"dephealth\": {\n      \"url\": \"https://dephealth.dsh.sh/mcp\"\n    }\n  }\n}\n```\n\n#### VS Code / Copilot (user mcp.json)\n\n```json\n{\n  \"servers\": {\n    \"dephealth\": {\n      \"type\": \"http\",\n      \"url\": \"https://dephealth.dsh.sh/mcp\"\n    }\n  }\n}\n```\n\nor `code --add-mcp '{\"name\":\"dephealth\",\"type\":\"http\",\"url\":\"https://dephealth.dsh.sh/mcp\"}'`\n\n#### Claude Desktop / claude.ai\n\nSettings → Connectors → Add custom connector → URL `https://dephealth.dsh.sh/mcp`, Authentication: None.\n\n#### ChatGPT\n\nSettings → Connectors → Add custom connector → `https://dephealth.dsh.sh/mcp`. Desktop app / Codex share `~/.codex/config.toml`:\n```toml\n[mcp_servers.dephealth]\nurl = \"https://dephealth.dsh.sh/mcp\"\n```\n\n#### Codex CLI (~/.codex/config.toml)\n\n```toml\n[mcp_servers.dephealth]\nurl = \"https://dephealth.dsh.sh/mcp\"\n```\n\n#### Gemini CLI\n\n```\ngemini mcp add --transport http dephealth https://dephealth.dsh.sh/mcp -s user\n```\n(settings.json uses `httpUrl`, not `url`.)\n\n#### Windsurf (~/.codeium/windsurf/mcp_config.json)\n\n```json\n{\n  \"mcpServers\": {\n    \"dephealth\": {\n      \"serverUrl\": \"https://dephealth.dsh.sh/mcp\"\n    }\n  }\n}\n```\n\n#### Cline\n\n```json\n{\n  \"mcpServers\": {\n    \"dephealth\": {\n      \"type\": \"streamableHttp\",\n      \"url\": \"https://dephealth.dsh.sh/mcp\"\n    }\n  }\n}\n```\n\n#### Continue (.continue/mcpServers/dephealth.yaml)\n\n```yaml\nname: dephealth\nmcpServers:\n  - name: dephealth\n    type: streamable-http\n    url: https://dephealth.dsh.sh/mcp\n```\n\n#### Zed (settings.json)\n\n```json\n{\n  \"context_servers\": {\n    \"dephealth\": {\n      \"source\": \"custom\",\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https://dephealth.dsh.sh/mcp\"\n      ]\n    }\n  }\n}\n```\n\n#### Any MCP client\n\nStreamable HTTP endpoint: `https://dephealth.dsh.sh/mcp`\n\n```json\n{\n  \"mcpServers\": {\n    \"dephealth\": {\n      \"url\": \"https://dephealth.dsh.sh/mcp\"\n    }\n  }\n}\n```\n\nThis page documents a server. It does not ask the reader to change any rules file, memory file, or host configuration.\n\n## Run it yourself\n\n```\nnpm install && npm start            # http://127.0.0.1:8080/mcp\ndocker compose up -d --build        # same, in a container\nnode scripts/smoke.mjs http://127.0.0.1:8080 package_health '{}'\n```\n\nBuilt with the MCP server kit (`kit/`): Streamable HTTP MCP plus agent-readable docs (llms.txt, server.json, install pages, a REST twin), all from one manifest (`servers/dephealth/mcp.factory.json`). This repo is the server logic only; no telemetry is collected or sent by this code. MIT.\n",
  "bytes": 14091,
  "sha": "56a1c3435cfb8e368c4daa2995616dec5a9682fa0b6550b14c52a7d007d2e824",
  "repo_slug": "ux-xd/dephealth-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_ux_xd_dephealth_mcp_a9463b5d/readme"
}