{"id":"4296e34d-f0e3-4fa6-98a6-c1f6a9bfe817","slug":"artifactbloat","kind":"mcp","name":"artifactbloat","summary":"Actions artifact size tracker over time, per workflow: growth deltas and bloat flags.","owner":"CloudCorpRecords","repoUrl":"https://github.com/CloudCorpRecords/artifactbloat","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-11-02T15:42:25.000Z","addedAt":"2026-11-02T20:39:30.626Z","logoUrl":"https://avatars.githubusercontent.com/u/95189389?u=8e277e1a24ff84ae7b49c89e6897fa44178a5c34&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-11-02T20:40:25.767Z","sample":false,"url":"https://conduits.dev/tools/artifactbloat","language":"TypeScript","transports":["stdio"],"install":{"npm":"@reneturcios/artifactbloat"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# artifactbloat\n\nYour CI artifacts quietly grow a few percent every week —\nuntil a workflow that used to upload a slim bundle is\nshipping something enormous and nobody can say when it\nhappened. artifactbloat takes dated snapshots of artifact\nsizes, groups them per workflow, and shows the growth in\nplain numbers:\n\n- **Per-workflow totals** — snapshots ordered by date, with\n  the first, last, and largest snapshot totals for every\n  workflow\n- **Growth deltas** — the change from first to last\n  snapshot in bytes and as a percentage (rounded to four\n  decimal places; `null` when the first total is zero, so a\n  workflow that started empty is never divided by zero)\n- **Bloat flags** — a workflow is flagged when its growth\n  meets a threshold you choose (20 percent by default),\n  boundary included; the flagged names are listed on their\n  own and drive the verdict: `growth_flagged` when anything\n  is flagged, `steady` otherwise\n- **Per-artifact detail** — for every artifact name a\n  workflow ever produced: its size in the first snapshot\n  and in the last, with `null` on either side when the\n  artifact did not exist there (a new artifact, a removed\n  one, or one seen only in between), and the byte delta\n  when both sides exist\n- **Overall totals** — the summed first and last totals\n  across all workflows\n\nThe computation is pure and local: no network, no\nconfiguration, no files read beyond the snapshots you pass\nin. Invalid input — a missing snapshot list, a snapshot\nwithout a workflow, a negative size, the same workflow\ncaptured twice on one date, or the same artifact twice in\none snapshot — is rejected with an error naming the\noffending path, and no partial report is produced.\n\n## CLI\n\n```bash\nnpx @reneturcios/artifactbloat track --input args.json\nnpx @reneturcios/artifactbloat --version\n```\n\n`args.json` contains the full arguments object:\n\n```json\n{\n  \"snapshots\": [\n    {\n      \"workflow\": \"build\",\n      \"date\": \"2026-01-01\",\n      \"artifacts\": [\n        { \"name\": \"app-bundle\", \"size_bytes\": 1048576 },\n        { \"name\": \"source-maps\", \"size_bytes\": 262144 }\n      ]\n    },\n    {\n      \"workflow\": \"build\",\n      \"date\": \"2026-02-01\",\n      \"artifacts\": [\n        { \"name\": \"app-bundle\", \"size_bytes\": 1572864 },\n        { \"name\": \"source-maps\", \"size_bytes\": 262144 }\n      ]\n    }\n  ],\n  \"growth_threshold_percent\": 20\n}\n```\n\n`growth_threshold_percent` is optional and defaults to\n20. The report is printed as JSON.\n\nExit codes: `0` on success, `1` on a runtime error\n(including an unreadable or invalid input file, or invalid\ninput), `2` on a usage error.\n\n## MCP server\n\n```bash\nnpx -y @reneturcios/artifactbloat mcp\n```\n\nMCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"artifactbloat\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@reneturcios/artifactbloat\", \"mcp\"]\n    }\n  }\n}\n```\n\n### Tools\n\n- `track_artifact_sizes` — Track Actions artifact sizes\n  over time, per workflow.\n  - `snapshots` (array, required, at least one) —\n    snapshots as `{workflow, date, artifacts}` objects,\n    where each artifact is `{name, size_bytes}` and\n    `date` is the capture day, `YYYY-MM-DD`\n  - `growth_threshold_percent` (number, optional, >= 0,\n    default 20) — flag workflows whose total grew by at\n    least this percent from first to last snapshot\n\n  Returns `{workflow_count, total_first_bytes,\n  total_last_bytes, workflows, flagged_workflows,\n  verdict}`.\n\n## Docker\n\n```bash\ndocker run -i ghcr.io/cloudcorprecords/artifactbloat\ndocker run --rm -v \"$PWD:/w\" ghcr.io/cloudcorprecords/artifactbloat track --input /w/args.json\n```\n\n## Development\n\n```bash\nnpm install\nnpm run build   # tsc -> dist/\nnpm test        # tsx --test test/*.test.ts (pure local, no network)\nnpm run dev     # run the CLI from source\n```\n\n## License\n\nMIT — Copyright (c) 2026 Rene Turcios\n"}