io.github.CloudCorpRecords/freshcheck
Assess dependency staleness: behind level per dependency, grouped by risk from abandoned to current.
What can you do with io.github.CloudCorpRecords/freshcheck?
assess_freshness— Assess how stale a dependency tree
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
@reneturcios/freshcheckclaude mcp add freshcheck -- npx -y @reneturcios/freshcheck@0.1.0 mcp
{
"mcpServers": {
"freshcheck": {
"command": "npx",
"args": [
"-y",
"@reneturcios/freshcheck@0.1.0",
"mcp"
]
}
}
}
ghcr.io/cloudcorprecords/freshcheck:0.1.0claude mcp add freshcheck -- docker run -i --rm ghcr.io/cloudcorprecords/freshcheck:0.1.0 mcp
{
"mcpServers": {
"freshcheck": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/cloudcorprecords/freshcheck:0.1.0",
"mcp"
]
}
}
}
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
freshcheck
A dependency tree quietly ages. Some packages are a patch behind and can be bumped without a thought, some are a major version behind and need a planned upgrade, and some have not released anything in years — or their repository has been archived outright — and are a risk whatever version they are on. freshcheck takes the tree you have — each dependency's name, installed version, and latest available version, with optional abandonment signals — and sorts it into exactly those risk groups:
- Behind level — for every dependency,
currentandlatestare compared component by component, numerically. The first component that differs decides:major,minor, orpatch. Whenlatestis not ahead ofcurrent— equal, or even behind it — the level isnone. Versions must be strictMAJOR.MINOR.PATCHsemver: three numeric components, no leading zeros, no prerelease or build suffix. - Abandoned — a dependency counts as abandoned when
its repository is archived, or when it has gone at least
abandoned_dayswithout a release (default 730, measured by the optionaldays_since_last_release). Abandonment outranks the version gap: an archived package two majors behind is groupedabandoned, with its behind level still reported alongside so the size of the gap is not lost. - Groups and counts — every dependency lands in one
group —
abandoned,major,minor,patch, orcurrent(behind levelnone, not abandoned) — and the result carries the names in each group plus the group sizes and the overall total.
Every list in the result is sorted ascending, so the same
tree always yields exactly the same assessment. Malformed
input — a missing or empty dependency list, a missing,
empty, or duplicate name, a version that is not strict
semver, a wrongly typed signal — is a validation error
naming the offending path (for example
dependencies[1].latest must be a strict MAJOR.MINOR.PATCH
semver version), and no partial assessment is produced.
The computation is pure and local: no network, no
registry lookups, no files read beyond the input you pass
in — freshcheck judges only the versions and signals you
supply.
CLI
npx @reneturcios/freshcheck assess --input args.json
npx @reneturcios/freshcheck --version
args.json contains the full arguments object:
{
"dependencies": [
{ "name": "core", "current": "2.0.0", "latest": "2.0.0" },
{ "name": "lib", "current": "1.9.0", "latest": "1.10.2" },
{ "name": "old", "current": "0.8.1", "latest": "3.0.0", "archived": true }
]
}
archived defaults to false per dependency, and
abandoned_days defaults to 730 for the whole call.
The assessment is printed as JSON:
{
"dependencies": [
{ "name": "core", "current": "2.0.0", "latest": "2.0.0", "behind": "none", "group": "current" },
{ "name": "lib", "current": "1.9.0", "latest": "1.10.2", "behind": "minor", "group": "minor" },
{ "name": "old", "current": "0.8.1", "latest": "3.0.0", "behind": "major", "group": "abandoned" }
],
"groups": {
"abandoned": ["old"],
"major": [],
"minor": ["lib"],
"patch": [],
"current": ["core"]
},
"counts": { "abandoned": 1, "major": 0, "minor": 1, "patch": 0, "current": 1, "total": 3 }
}
Note lib: 1.10.2 is a minor step ahead of 1.9.0 because
components compare numerically, not lexicographically.
Exit codes: 0 on success, 1 on a runtime error
(including an unreadable or invalid input file, or invalid
input), 2 on a usage error.
MCP server
npx -y @reneturcios/freshcheck mcp
MCP client config:
{
"mcpServers": {
"freshcheck": {
"command": "npx",
"args": ["-y", "@reneturcios/freshcheck", "mcp"]
}
}
}
Tools
assess_freshness— Assess how stale a dependency tree is, grouped by risk.dependencies(array, required, at least one) — dependencies as{name, current, latest, archived?, days_since_last_release?}objects;nameis unique across the set, andcurrent/latestare strictMAJOR.MINOR.PATCHsemver versionsabandoned_days(integer, optional, default 730, at least 1) — days without a release at which a dependency counts as abandoned
Returns
{dependencies, groups, counts}.
Docker
docker run -i ghcr.io/cloudcorprecords/freshcheck
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/freshcheck assess --input /w/args.json
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Frequently asked questions
What is io.github.CloudCorpRecords/freshcheck?
Assess dependency staleness: behind level per dependency, grouped by risk from abandoned to current.
How do I install io.github.CloudCorpRecords/freshcheck?
It runs on your machine. In Claude Code: claude mcp add freshcheck -- npx -y @reneturcios/freshcheck@0.1.0 mcp. For other clients, paste the JSON configuration from this page into their MCP settings.
Does io.github.CloudCorpRecords/freshcheck need an API key?
Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.
Is io.github.CloudCorpRecords/freshcheck open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains io.github.CloudCorpRecords/freshcheck?
It is published by CloudCorpRecords. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.