mcpscore.toml next to your code turns rules off and
re-ranks the rest by rule_id, and the score you see in CI is the score under
that policy. The badge and mcpscore.dev never read it: they always show the
canonical score.
What each entry does
Values are case-insensitive. A
rule_id that mcpscore doesn’t know, including
one it has retired, is warned about and ignored, so a file written for a newer
release still works on an older one. Any other value is a usage error and exit
code 1. Every rule_id is in the rules reference.
Where the file lives
mcpscore looks, in this order, and says which it used:--config FILE, any path. A missing file is a usage error.- Otherwise the nearest configuration, walking from the working directory up
to the repository root, the first directory that contains
.git. In each directory amcpscore.tomlwins over apyproject.tomlwith a[tool.mcpscore]table, and a nearerpyproject.tomlwins over amcpscore.tomlfurther up:
--no-config ignores all of it, which is how you reproduce the canonical
number inside a configured repository.
What it changes, and what it doesn’t
A configuration changes the score for the run that used it. It does not touch the badge or the report on mcpscore.dev, which only ever show audits run by the website itself, with every rule at its default weight. Two teams with different files get different numbers for the same server, and that is the point: compare configured scores only across runs with the sameconfig.sha256, which the report carries.
In the JSON report the applied configuration is a config block:
min-score gates the configured score, and the PR comment carries the same
qualifier.
When it fails
Usage error: mcpscore.toml: rule 'x' has value 'skip'; expected off, low, medium, high, or critical (exit 1)
- Cause: an unsupported value.
offis the one spelling. - Fix: use
offor a severity name.
Config: unknown rule 'x'; ignored
- Cause: a
rule_idthis release doesn’t have, or a typo. - Fix: check the id in the rules reference. A retired rule says so in the warning and can be deleted from the file.
Gate failed — [gate] fail_on = "high": … (exit 3)
- Cause: a rule at or above your threshold failed. That is the gate working.
- Fix: fix the rule, lower the threshold, or re-rank that rule below it.
- Cause: the badge is canonical by design and never applies a configuration.
- Fix: none needed. Your CI number and the badge answer different questions.
What’s next
Rules reference
Every
rule_id you can turn off or re-rankGitHub Action
Gate pull requests on the configured score
Stability contract
The
config report block, field by fieldScoring methodology
What the default weights mean before you change them