{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T20:29:22.802Z","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift","markdownUrl":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift.md","server":{"slug":"luizfnsilva-closure-drift","name":"closure_drift","registryName":"io.github.luizfnsilva/closure_drift","description":"Before an agent tags a release: does that version label already name different code in the git tags?","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"ghcr-io-luizfnsilva-closure-drift","type":"oci","identifier":"ghcr.io/luizfnsilva/closure_drift","withdrawn":false,"url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift","version":"1.5.0","transport":"stdio","scoredAt":"2026-11-05T06:06:35.293Z"},"score":{"total":49,"tier":"low","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":49},{"date":"2026-11-04","total":49},{"date":"2026-11-03","total":48},{"date":"2026-11-02","total":48},{"date":"2026-11-01","total":47},{"date":"2026-10-31","total":47},{"date":"2026-10-30","total":46},{"date":"2026-10-29","total":46},{"date":"2026-10-28","total":45},{"date":"2026-10-27","total":45},{"date":"2026-10-26","total":45},{"date":"2026-10-25","total":44},{"date":"2026-10-24","total":44},{"date":"2026-10-23","total":43},{"date":"2026-10-22","total":43},{"date":"2026-10-21","total":41},{"date":"2026-10-20","total":40},{"date":"2026-10-19","total":40},{"date":"2026-10-18","total":39}]},"categories":[{"name":"Supply Chain Security","score":0,"verdict":"unverified","reasons":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"codes":[{"code":"supplychain.malware_inconclusive","args":{"reason":"ecosystem_unsupported"}},{"code":"cve.inconclusive","args":{"reason":"no_sbom_attached"}},{"code":"installscript.inconclusive","args":{"reason":"no_install_concept"}},{"code":"dephealth.inconclusive","args":{"reason":"no_sbom_attached"}}]},{"name":"Provenance & Transparency","score":48,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","Clear OSI-approved license (Apache-2.0).","Actively maintained (last published 0 days ago).","Publishes a security disclosure policy (SECURITY.md)."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.osi","args":{"spdx":"Apache-2.0"}},{"code":"maintenance.recent","args":{"age_days":"0"}},{"code":"disclosure.present","args":{}}]},{"name":"Schema Quality & AI Usability","score":73,"verdict":"fail","reasons":["AI-judged instruction clarity (excellent).","Context-footprint check failed: tool/resource definitions use about 640 tokens (~160/item across 4 items; 4 tools + 0 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"160","items":"4","tools":"4","tokens":"640","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":60,"verdict":"partial","reasons":["Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"18"}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 4 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 4 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"4"}},{"code":"toolsafety.manipulation_clean","args":{"units":"4","judged":"4"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"malware":[],"components":[{"slug":"ghcr-io-luizfnsilva-closure-drift","type":"oci","identifier":"ghcr.io/luizfnsilva/closure_drift","withdrawn":false,"score":49,"current":true,"url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift","markdownUrl":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift.md"}],"facts":[{"label":"Registry","value":"oci"},{"label":"Package","value":"ghcr.io/luizfnsilva/closure_drift"},{"label":"Version","value":"1.5.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"would_tag","title":"Check before tagging","description":"Use BEFORE creating a release tag: would the version that HEAD declares reuse a label that already names other code in the tags? Exit 1 means do not tag; bump the version first. Returns exit 0, 1 or 2 and the JSON report. Exit 2 is not a pass: nothing was decided, and output says why (no label found, a file not read, a tag not compared). Read-only: it runs git reads only, on the local repository, with no network.","inputs":[{"name":"repo","type":"string","required":true,"description":"path to a local git repository with its tags fetched"}],"outputs":[{"name":"exit","type":"integer","required":true,"description":"0 clean, 1 drift, 2 not decided (the reason is in output)"},{"name":"meaning","type":"string","required":true,"description":"the exit code in words"},{"name":"output","type":null,"required":true,"description":"the JSON report (docs/REPORT.md), or the refusal as text"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":127},{"name":"check_versions","title":"Measure all version labels","description":"Use to audit the whole tag history: does each version label name exactly one code state? For a single release about to be tagged, use would_tag. With one release only, the answer is not decided (exit 2). Returns exit 0, 1 or 2 and the JSON report. Exit 2 is not a pass: nothing was decided, and output says why (no label found, a file not read, a tag not compared). Read-only: it runs git reads only, on the local repository, with no network.","inputs":[{"name":"published_file","type":"string","required":false,"description":"a local file with the versions actually released, one per line; tags not on it are not counted as publications"},{"name":"repo","type":"string","required":true,"description":"path to a local git repository with its tags fetched"},{"name":"strict","type":"boolean","required":false,"description":"answer clean only if every tag scanned was compared (default false)"}],"outputs":[{"name":"exit","type":"integer","required":true,"description":"0 clean, 1 drift, 2 not decided (the reason is in output)"},{"name":"meaning","type":"string","required":true,"description":"the exit code in words"},{"name":"output","type":null,"required":true,"description":"the JSON report (docs/REPORT.md), or the refusal as text"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":184},{"name":"explain_label","title":"Explain a label in drift","description":"Use after check_versions reports drift: lists, for one label, the paths that differ between the first tag that used it and each other tag that did. For two references you choose, use compare. Returns exit 0, 1 or 2 and the JSON report. Exit 2 is not a pass: nothing was decided, and output says why (no label found, a file not read, a tag not compared). Read-only: it runs git reads only, on the local repository, with no network.","inputs":[{"name":"label","type":"string","required":true,"description":"a version label reported in drift, as written in the report (e.g. 1.0.0)"},{"name":"repo","type":"string","required":true,"description":"path to a local git repository with its tags fetched"}],"outputs":[{"name":"exit","type":"integer","required":true,"description":"0 clean, 1 drift, 2 not decided (the reason is in output)"},{"name":"meaning","type":"string","required":true,"description":"the exit code in words"},{"name":"output","type":null,"required":true,"description":"the JSON report (docs/REPORT.md), or the refusal as text"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":158},{"name":"compare","title":"Compare two references","description":"Use to compare any two tags or commits you name: their version labels, closures and the paths that differ. Publication points play no part. Exit 1 when both declare one label and the code differs. Returns exit 0, 1 or 2 and the JSON report. Exit 2 is not a pass: nothing was decided, and output says why (no label found, a file not read, a tag not compared). Read-only: it runs git reads only, on the local repository, with no network.","inputs":[{"name":"a","type":"string","required":true,"description":"the first tag or commit (the reference side)"},{"name":"b","type":"string","required":true,"description":"the second tag or commit; paths are listed as changed, only in a, only in b"},{"name":"repo","type":"string","required":true,"description":"path to a local git repository with its tags fetched"}],"outputs":[{"name":"exit","type":"integer","required":true,"description":"0 clean, 1 drift, 2 not decided (the reason is in output)"},{"name":"meaning","type":"string","required":true,"description":"the exit code in words"},{"name":"output","type":null,"required":true,"description":"the JSON report (docs/REPORT.md), or the refusal as text"}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":171}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T06:06:35.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":"no_attestation","reasonLabel":"No attestation published","discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-18","recent":[{"id":"chg_01a1a713-566c-7496-a258-7055f8f7a0a1","kind":"package.version_changed","summary":"Package version (1.3.3 → 1.5.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a713-566c-7496-a258-7055f8f7a0a1"},{"id":"chg_01a1a675-717b-7afe-8655-d4b37375e883","kind":"score.total_changed","summary":"Trust score (10 → 49)","materiality":"functional","direction":"improvement","scoreDelta":39,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a675-717b-7afe-8655-d4b37375e883"},{"id":"chg_01a1a66e-a398-7453-b365-3b2f06b645ff","kind":"check.unverifiable","summary":"Stability (0.53 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a398-7453-b365-3b2f06b645ff"},{"id":"chg_01a1a66e-a39a-7141-a609-22741936af1d","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39a-7141-a609-22741936af1d"},{"id":"chg_01a1a66e-a39a-79da-ad51-025147ea0727","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39a-79da-ad51-025147ea0727"},{"id":"chg_01a1a66e-a39b-71b5-a001-ce3b15c3bc66","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39b-71b5-a001-ce3b15c3bc66"},{"id":"chg_01a1a66e-a39b-77ec-ae51-0ca50bb86b81","kind":"check.appeared","summary":"First check of Schema quality (unverified)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39b-77ec-ae51-0ca50bb86b81"},{"id":"chg_01a1a66e-a39c-7918-b872-be628b7a830f","kind":"package.version_changed","summary":"Package version (1.3.3 → 1.4.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39c-7918-b872-be628b7a830f"},{"id":"chg_01a1a66e-a39d-7276-9ae1-4fa34e080765","kind":"score.total_changed","summary":"Trust score (49 → 10)","materiality":"functional","direction":"regression","scoreDelta":-39,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a66e-a39d-7276-9ae1-4fa34e080765"},{"id":"chg_01a1a527-42dd-797c-9470-32be392dbcf5","kind":"score.total_changed","summary":"Trust score (48 → 49)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a527-42dd-797c-9470-32be392dbcf5"},{"id":"chg_01a1a359-5176-7e34-8634-30716e96d235","kind":"package.version_changed","summary":"Package version (1.3.1 → 1.3.3)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a359-5176-7e34-8634-30716e96d235"},{"id":"chg_01a1a135-4a18-7a8e-b318-081cedc39d92","kind":"package.version_changed","summary":"Package version (1.3.1 → 1.3.2)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1a135-4a18-7a8e-b318-081cedc39d92"},{"id":"chg_01a19ada-59c7-7d7c-8f47-95225a616513","kind":"score.total_changed","summary":"Trust score (47 → 48)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a19ada-59c7-7d7c-8f47-95225a616513"},{"id":"chg_01a1908d-6718-7435-9d15-c36413fa35b1","kind":"score.total_changed","summary":"Trust score (46 → 47)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1908d-6718-7435-9d15-c36413fa35b1"},{"id":"chg_01a18e8c-672b-78f1-81ad-9a0e5f3b056c","kind":"package.version_changed","summary":"Package version (1.2.2 → 1.3.1)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a18e8c-672b-78f1-81ad-9a0e5f3b056c"},{"id":"chg_01a18a88-fff6-7d05-8866-332bfedc7267","kind":"package.version_changed","summary":"Package version (1.2.2 → 1.3.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a18a88-fff6-7d05-8866-332bfedc7267"},{"id":"chg_01a1858c-a031-74f9-b7b7-20b45e288dfa","kind":"score.total_changed","summary":"Trust score (10 → 46)","materiality":"functional","direction":"improvement","scoreDelta":36,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a1858c-a031-74f9-b7b7-20b45e288dfa"},{"id":"chg_01a18564-fb8e-7d00-87ce-48eb82084ea1","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a18564-fb8e-7d00-87ce-48eb82084ea1"},{"id":"chg_01a18564-fb90-72b0-87ab-ef954b8534d6","kind":"check.unverifiable","summary":"Stability (0.33 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a18564-fb90-72b0-87ab-ef954b8534d6"},{"id":"chg_01a18564-fb90-7893-b551-0377d861aa59","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift#chg-chg_01a18564-fb90-7893-b551-0377d861aa59"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift/changelog.json"},"links":{"html":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift","markdown":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift.md","changelogJson":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift/changelog.json","changelogRss":"https://verifymcp.io/servers/luizfnsilva-closure-drift/ghcr-io-luizfnsilva-closure-drift.xml","external":[{"label":"GitHub Container Registry","href":"https://ghcr.io/luizfnsilva/closure_drift"},{"label":"Repository","href":"https://github.com/luizfnsilva/closure_drift"}]}}