{"apiVersion":"v1","directorySlug":"diffpack-mcp-21ed13bbbe","title":"diffpack: compare npm, crates.io, Go, PyPI and Packagist ver","description":"Compare package versions across ecosystems. Source-aware dependency review for npm, crates.io, Go, PyPI and Packagist.","pageUrl":"https://www.mcpbundles.com/skills/diffpack-mcp-21ed13bbbe","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.diffpack.io/mcp","hostedMcpUrl":null,"toolCount":8,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"io.diffpack/diffpack-mcp-21ed13bbbe","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"diff_package_versions","description":"Compare two published versions of a package and summarise what changed between them. Takes a registry, a package name and two exact versions, all spelled the way the registry spells them. Order matters: the comparison runs from `from_version` to `to_version`, normally the older to the newer, and swapping the two is a different comparison with a different handle — what one reports as added, the other reports as removed. Answers with a summary and a handle you pass to the tools that read the compa","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","package","from_version","to_version"],"properties":{"package":{"type":"string"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"},"to_version":{"type":"string"},"from_version":{"type":"string"},"ignore_whitespace":{"type":"boolean","default":false},"similarity_threshold":{"type":"number","default":0.75,"maximum":1.0,"minimum":0.0}},"additionalProperties":false},"title":"Diff package versions","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"diff_package_versions","displayName":"Diff package versions"},{"name":"get_diff_tree","description":"List the files and directories of a comparison you have already made, a page at a time. To list one version's files without comparing it to anything, call `list_package_files` instead. Takes the handle `diff_package_versions` gave you, and three ways to ask for less than all of it: `path` for one directory's contents, `depth` for how far down to go, and `status` for which kinds of change you want. A directory a rename left empty is not in the comparison at all, even though the first version had","inputSchema":{"type":"object","$defs":{"Status":{"enum":["added","removed","modified","renamed","unchanged"],"type":"string"}},"$schema":"https://json-schema.org/draft/2020-12/schema","required":["handle"],"properties":{"path":{"type":["string","null"]},"depth":{"type":["integer","null"],"default":null,"minimum":1},"limit":{"type":["integer","null"],"default":200,"maximum":1000,"minimum":1},"cursor":{"type":["string","null"],"default":null,"pattern":"^p1:[0-9]+$"},"handle":{"type":"string","pattern":"^d1:[A-Za-z0-9_-]+$"},"status":{"type":"array","items":{"$ref":"#/$defs/Status"},"default":[]}},"additionalProperties":false},"title":"Get diff tree","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_diff_tree","displayName":"Get diff tree"},{"name":"get_file_content","description":"Read one file out of one published version of a package, so you can see what it actually says before reasoning about a change to it. To see how a file changed between two versions, call `get_file_diff` instead: this reads one version as it stands. Takes a registry, a package name, one exact version and a path. Paths have the archive's top-level directory removed: a file is `src/index.js`, never `zod-4.0.0/src/index.js`. A directory has no content, so asking for one is an error rather than an emp","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","package","version","path"],"properties":{"path":{"type":"string"},"package":{"type":"string"},"version":{"type":"string"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"},"max_bytes":{"type":["integer","null"],"maximum":1478154,"minimum":1}},"additionalProperties":false},"title":"Get file content","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_file_content","displayName":"Get file content"},{"name":"get_file_diff","description":"Read one file's diff out of a comparison you have already made, so you can see what actually changed in it. To read a file as one version ships it, with nothing to compare it to, call `get_file_content` instead. Takes the handle `diff_package_versions` gave you and a path from that comparison's tree. Answers with a unified diff: a `--- from` / `+++ to` header, `@@` hunks, and one line per change written as a sign, a space and the line. Three things are worth knowing before you read one. `isDiff`","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["handle","path"],"properties":{"path":{"type":"string"},"handle":{"type":"string","pattern":"^d1:[A-Za-z0-9_-]+$"},"old_path":{"type":["string","null"],"default":null},"max_bytes":{"type":["integer","null"],"maximum":1478154,"minimum":1},"context_lines":{"oneOf":[{"type":"integer","minimum":0},{"const":"full"}],"default":3}},"additionalProperties":false},"title":"Get file diff","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_file_diff","displayName":"Get file diff"},{"name":"list_package_files","description":"List the files inside one published version of a package, so you can see what it actually ships. To see which files changed between two versions, compare them with `diff_package_versions` and walk the result with `get_diff_tree` instead: this lists one version as it stands. For the address a version's archive is served from rather than what is in it, call `resolve_archive_url`. Takes a registry, a package name and one exact version, all spelled the way the registry spells them. Paths have the ar","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","package","version"],"properties":{"limit":{"type":["integer","null"],"default":200,"maximum":1000,"minimum":1},"cursor":{"type":["string","null"],"default":null,"pattern":"^p1:[0-9]+$"},"prefix":{"type":["string","null"]},"package":{"type":"string"},"version":{"type":"string"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"}},"additionalProperties":false},"title":"List package files","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_package_files","displayName":"List package files"},{"name":"list_package_versions","description":"List the published versions of a package, most recently published first, so you can find the versions to diff without being told them. Takes a registry and a package name spelled the way the registry spells it; when you are not sure of the spelling, find it with `search_packages` first. The order is by publish date, not by version number: a patch to an older release line published yesterday comes before a major released last month. Go is the exception: its module proxy lists a module's versions","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","package"],"properties":{"limit":{"type":["integer","null"],"default":200,"maximum":1000,"minimum":1},"cursor":{"type":["string","null"],"default":null,"pattern":"^p1:[0-9]+$"},"package":{"type":"string"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"}},"additionalProperties":false},"title":"List package versions","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_package_versions","displayName":"List package versions"},{"name":"resolve_archive_url","description":"Return the URL a published package version's archive is served from, so a diff can name where its bytes came from. Works for `npm`, `crates` (crates.io) and `go` (the Go module proxy), which publish at a predictable path. Takes a registry, a package name and one exact version, all spelled the way the registry spells them. Fetches nothing: the answer is built from the arguments. To see what is inside a version, call `list_package_files` instead.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","package","version"],"properties":{"package":{"type":"string"},"version":{"type":"string"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"}},"additionalProperties":false},"title":"Resolve archive URL","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"resolve_archive_url","displayName":"Resolve archive URL"},{"name":"search_packages","description":"Find packages on a registry from a name you only half remember, or from a word that describes what they do, so you can get an exact package name to diff. Once you have the exact name, call `list_package_versions` instead: a search is for finding a name, not its versions. Takes a registry and a query. Hits come back best match first, each with the name to pass to the other tools. npm and crates.io hits also carry the current version and the package's own description; PyPI hits carry a name alone,","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["registry","query"],"properties":{"limit":{"type":["integer","null"],"default":200,"maximum":1000,"minimum":1},"query":{"type":"string"},"cursor":{"type":["string","null"],"default":null,"pattern":"^p1:[0-9]+$"},"registry":{"enum":["npm","crates","pypi","go"],"type":"string"}},"additionalProperties":false},"title":"Search packages","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_packages","displayName":"Search packages"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=diffpack-compare-npm-crates-io-Go-PyPI-and-Packagist-ver&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuZGlmZnBhY2suaW8vbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22diffpack-compare-npm-crates-io-Go-PyPI-and-Packagist-ver%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.diffpack.io%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22diffpack-compare-npm-crates-io-Go-PyPI-and-Packagist-ver%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.diffpack.io%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=diffpack%3A+compare+npm%2C+crates.io%2C+Go%2C+PyPI+and+Packagist+ver&connectorUrl=https%3A%2F%2Fmcp.diffpack.io%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"diffpack-compare-npm-crates-io-Go-PyPI-and-Packagist-ver\" --url \"https://mcp.diffpack.io/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/diffpack-mcp-21ed13bbbe","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/diffpack-mcp-21ed13bbbe/tools/{tool}","mcpServerUrl":"https://mcp.diffpack.io/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/diffpack-mcp-21ed13bbbe?live=1"}