candor
NPM · CANDOR-TS · SCANNED SEP 22
Per-function effect analysis for agents: blast radius, what reaches the network, gate verdicts.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 0 of 3 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to tombaldwin/candor-ts). View diagnostics → Pass
- Clear OSI-approved license ((MIT OR Apache-2.0)).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability67
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2732 tokens (~170/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 77% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 16 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the candor MCP server?
candor runs locally as an npm package, launched with npx -y candor-ts. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · candor-ts
claude mcp add tombaldwin-candor -- npx -y candor-ts
{
"mcpServers": {
"tombaldwin-candor": {
"command": "npx",
"args": [
"-y",
"candor-ts"
]
}
}
} {
"servers": {
"tombaldwin-candor": {
"command": "npx",
"args": [
"-y",
"candor-ts"
]
}
}
} codex mcp add tombaldwin-candor -- npx -y candor-ts
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tombaldwin-candor": {
"type": "local",
"command": [
"npx",
"-y",
"candor-ts"
],
"enabled": true
}
}
} openclaw mcp add tombaldwin-candor --command npx --arg -y --arg candor-ts
mcp_servers:
tombaldwin-candor:
command: "npx"
args: ["-y", "candor-ts"] {
"McpServers": {
"tombaldwin-candor": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"candor-ts"
]
}
}
} assistant mcp add tombaldwin-candor -t stdio -c npx -a -y candor-ts
{
"mcpServers": {
"tombaldwin-candor": {
"command": "npx",
"args": [
"-y",
"candor-ts"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 22 Sept 26 +11
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 1.00 ▲ functional
- 21 Sept 26 −10
- Known CVEs: pass → unverified ▼ security
- Dependency health: 1.00 → unverified ▼ functional
- Package version: 0.39.0 → 0.39.1 functional
- 20 Sept 26 0
- Stability: 0.20 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.38.3 → 0.39.0 functional
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 16 Sept 26 −15
- Stability: 0.07 → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.38.0 → 0.38.3 functional
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +15
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Stability: unverified → 0.03 ▲ functional
- First check of Schema quality: unverified functional
- Package version: 0.37.0 → 0.38.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 22 Sept 2026 · Analysed npm/candor-ts@0.39.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | tombaldwin/candor-ts |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/tombaldwin/candor-ts/.github/workflows/publish.yml@refs/tags/v0.39.1 |
| Rekor log index | 2904517966 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:f5dc9044d062c3001d6732e39d6e2da276fc752e72ac32f9fa8a673606dedfa0847a78e9ff92fe689f4bccf1a139b6c090c62a807742ffa29b5d18f92 |
Background: How many MCP packages publish verified provenance →
Dependencies 3 packages
| Packages resolved | 3 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
candor_activity ~183
What the edit-time gate caught: MEASURED activity from .candor/activity.jsonl (the Stop-hook / standalone review log) — edits checked, verdicts, violations by AS-EFF code, effects introduced, largest blast radius, deepest propagation (hops), plus the most recent records. Counted from the log, no model. A missing log is an empty result (the loop isn't wired here — not an error); corrupt lines are skipped.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | how many recent records to return (default 5, max 50) |
| log | string | – | activity log path (default .candor/activity.jsonl under --root, else beside the served report prefix, else cwd) |
| session | string | – | filter to one sessionId |
| since | string | – | ISO timestamp lower bound (records with no ts are kept) |
No output schema declared.
No examples provided.
candor_blindspots ~75
The Unknown SOURCES — calls the engine genuinely could not resolve (reflection, wide dispatch, fn-pointers) — ranked by how many functions inherit Unknown through each. Turns a high-Unknown report into a short worklist.
| Name | Type | Req | Description |
|---|---|---|---|
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_callers ~59
Who calls `fn` — direct (one hop) and transitive callers over the effect-relevant call graph.
| Name | Type | Req | Description |
|---|---|---|---|
| fn | string | yes | – |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_containment ~72
Per boundary effect (Db/Net/Exec/Fs/Ipc/Clipboard): how contained it is in one architectural layer — the dispersion diagnostic (spec §6.1). Not a score; per-effect facts.
| Name | Type | Req | Description |
|---|---|---|---|
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_diff ~71
The per-function effect delta versus a baseline report: gained (introduced vs inherited) and lost effects. 'What did this change do to the effect surface?'.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | string | yes | the baseline report prefix |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_fix ~417
THE BOUNDARY FIX: when `fn` performs `effect` in a layer the policy forbids (a violation candor_whatif/candor_gate reports), compute the architectural REMEDY — not just 'the domain can't do Net', but WHERE the effect belongs and the refactor to put it there: the direct call site to hoist, the forbidden-layer functions that become pure and thread the value as a parameter, and the nearest allowed-layer caller to perform the effect ({ crossing, site, deniedSpan, hoistTo, policyAlternative }). The remedial inverse of candor_whatif. Call this INSTEAD OF guessing a fix (adding `allow` to the domain, moving the I/O one call up, threading a handle the wrong way). Advisory: it names the structure, you write the code; the gate re-scan verifies. Uses `policy` if given, else the repo's checked-in .candor/config policy (spec §3.4). ALWAYS CHECK `refused` BEFORE `crossing`: where the policy narrows on evidence this report does not carry, candor_gate REFUSES and no remedy is computed — the result is `{ fn, effect, refused:true, unevaluated:[{rule, why}] }` WITH NO `crossing` KEY, an absent key rather than `crossing:false`, because 'no boundary fix needed' is a claim and that is the one thing the tool cannot claim here (spec §3.2: an advisory verb may be LESS certain than the gate, never MORE). Re-scan so the report carries the narrowing evidence, or widen the rule; do not read the missing plan as an all-clear.
| Name | Type | Req | Description |
|---|---|---|---|
| effect | string | yes | – |
| fn | string | yes | – |
| policy | string | – | path to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`) |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_gains ~74
The supply-chain alarm: effects the surface GAINED versus a baseline (package-level + per-function) — 'did this dependency bump add Net/Exec somewhere?'.
| Name | Type | Req | Description |
|---|---|---|---|
| baseline | string | yes | the baseline report prefix |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_gate ~423
The policy verdict over this report: { ok, violations:[{rule, fn, effects, detail}] } — 'would this repo pass its architecture gate?'. Uses `policy` if given, else the repo's checked-in .candor/config policy (spec §3.4). ALWAYS CHECK `ok`, never the length of `violations`: a rule whose narrowing evidence the report does not carry is NOT EVALUATED, and then the result is `{ ok:false, refused:true, reason, unevaluated:[{rule, why}] }` WITH NO `violations` KEY — an absent key, not an empty list, because the gate is making no claim there. `unevaluated` also rides a firing verdict (a certain violation dominates a refusal). `incomplete:true` means the gate CANNOT be green, and the key beside it says which of the four causes fired: `unanalyzed` (the report declares code candor could not analyze), `outOfScope` (the producer's peek NAMED a function outside the scan's scope performing an effect this policy denies), `unread` (a class the producing scan never OPENED — its effects are absent because nothing looked, not because there are none; re-scan those sources WITH this policy), or `unaskedRules` (a class the producing scan's peek DID read, but under a deny set that does not cover this one — re-scan under THE SAME policy this tool is applying, not merely under a policy). Computed from the report — the engine's own --gate-json run is the authoritative CI form: it additionally fails an allow rule whose literal surface is INCOMPLETE (a masked/invisible endpoint), which is not a report field, so a green here can still be red in CI.
| Name | Type | Req | Description |
|---|---|---|---|
| policy | string | – | path to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`) |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_impact ~88
Backward blast radius: every effectful function that transitively calls `fn`, and which runtime entry points are downstream. Answers 'if I change this, what surfaces at runtime?' — the cheapest possible alternative to tracing callers by hand.
| Name | Type | Req | Description |
|---|---|---|---|
| fn | string | yes | the function/unit to assess |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_map ~50
Per-module effect overview: each module's union of effects and function count. The architecture-at-a-glance.
| Name | Type | Req | Description |
|---|---|---|---|
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_path ~73
Forward provenance: the shortest call chain from `fn` to the nearest function that performs `effect` DIRECTLY — 'this reaches Net through WHAT?'.
| Name | Type | Req | Description |
|---|---|---|---|
| effect | string | yes | – |
| fn | string | yes | – |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_reachable ~57
What the program/fleet actually DOES at runtime: effects unioned over the entry points, with how many roots reach each and via which.
| Name | Type | Req | Description |
|---|---|---|---|
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_show ~68
A function's effects (inferred = transitive, direct = own body) plus its literal surfaces (hosts/cmds/paths/tables) when present.
| Name | Type | Req | Description |
|---|---|---|---|
| fn | string | yes | – |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_unverified ~572
PROVABLE-PURITY check (INSTANT): a `pure`/`deny <E>` policy layer PASSES a function that has no such effect — but if that function is Unknown (candor couldn't resolve one of its calls), the pass is UNVERIFIED: the Unknown could hide the very effect the rule forbids. The classic case is a fn/closure-injected 'port' — the domain reads as Unknown, so `deny Net domain`/`pure domain` clear it though it may reach Net at runtime. Returns each such function + the `deny <E> Unknown <scope>` upgrade that makes the layer PROVABLY clean. Uses `policy` if given, else the repo's checked-in .candor/config policy. ALWAYS CHECK `ok`, never the length of `unverified`: over a report declaring code candor could NOT analyze, `ok` IS ABSENT and `{incomplete:true, unanalyzed}` takes its place — a function in an unanalyzed file is missing from the report entirely, so it cannot be enumerated as an unverified pass, and an empty array there is not an all-clear (spec §3.2). `incomplete:true` also rides the three SCOPE causes, on the same terms as candor_gate: `outOfScope` (the producer's peek named a function outside the scan's scope performing a denied effect), `unread` (a class the producing scan never OPENED — re-scan those sources WITH this policy), and `unaskedRules` (a class the producing scan's peek DID read, but under a deny set that does not cover this one — re-scan under THE SAME policy this tool is applying, not merely under a policy). `ok` is ABSENT for a further reason too, and the entries that come with it are the sharpest ones: where the policy narrows on evidence this report does not carry, candor_gate REFUSES — and this verb then NAMES each function the gate could not judge, as `{fn, rule, why}` where `why` is THE MISSING EVIDENCE and never a derived class, plus the gate's own `unevaluated:[{rule, why}]`. Those entries carry no `upgrade`: whether they pass at all is the open question, so there is nothing to upgrade yet — re-scan so the report carries the evidence, or widen th…
| Name | Type | Req | Description |
|---|---|---|---|
| policy | string | – | path to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`) |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_whatif ~300
Hypothetically add `effect` to `fn` and report the blast radius; with `policy`, also the deny-rule violations it would cause. Pre-edit gate check. ALWAYS CHECK for the presence of `ok`, never just its value: over a report this route cannot fully evaluate, `ok` is ABSENT and `{incomplete:true, ...}` takes its place — `affected`/`violations` still ship (a partial answer beats a refusal; this tool is consulted BEFORE an edit), but neither `true` nor `false` is a claim the input licenses. The causes are the same ones `candor_gate`/`candor_unverified` disclose: `unanalyzed` (candor could not read a file of the target's own code), `outOfScope` (the peek found a denied effect outside the scan's reach), `unread` (a class the scan never opened — gated on this call's OWN `deny`/`pure` rules, since only those depend on code outside the scan's scope), and `unaskedRules` (a class something DID open, but under a narrower deny set than this policy's own).
| Name | Type | Req | Description |
|---|---|---|---|
| effect | string | yes | – |
| fn | string | yes | – |
| policy | string | – | path to a CANDOR_POLICY file (optional) |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
candor_where ~96
Which functions perform a given effect (e.g. Net, Db, Exec, Fs) — `directly` vs `inherited` via a callee. The effect-surface map.
| Name | Type | Req | Description |
|---|---|---|---|
| effect | string | yes | Net|Fs|Db|Exec|Env|Clock|Ipc|Log|Rand|Clipboard|Unknown |
| report | string | – | report prefix (optional; defaults to $CANDOR_REPORT) |
No output schema declared.
No examples provided.
What is the candor MCP server?
candor is an MCP server listed in the public MCP registry as io.github.tombaldwin/candor. Per-function effect analysis for agents: blast radius, what reaches the network, gate verdicts. This page covers its npm package (candor-ts).
Is the candor MCP server safe to use?
candor scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the candor MCP server expose?
candor exposes 16 tools: candor_impact, candor_where, candor_reachable, candor_path, candor_callers, and 11 more. Their descriptions and schemas cost roughly 2,678 tokens of context every time the server is loaded.
Is the candor MCP server still maintained?
candor is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.