Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

candor

NPM · CANDOR-TS · SCANNED SEP 22

Per-function effect analysis for agents: blast radius, what reaches the network, gate verdicts.

Available components

+3 this week 83 Trust /100
Trust breakdown (7 categories)

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
Install

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

# add to Claude Code
claude mcp add tombaldwin-candor -- npx -y candor-ts
// .cursor/mcp.json
{
  "mcpServers": {
    "tombaldwin-candor": {
      "command": "npx",
      "args": [
        "-y",
        "candor-ts"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "tombaldwin-candor": {
      "command": "npx",
      "args": [
        "-y",
        "candor-ts"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add tombaldwin-candor -- npx -y candor-ts
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tombaldwin-candor": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "candor-ts"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tombaldwin-candor --command npx --arg -y --arg candor-ts
# ~/.hermes/config.yaml
mcp_servers:
  tombaldwin-candor:
    command: "npx"
    args: ["-y", "candor-ts"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "tombaldwin-candor": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "candor-ts"
      ]
    }
  }
}
# add to Vellum
assistant mcp add tombaldwin-candor -t stdio -c npx -a -y candor-ts
// mcp.json
{
  "mcpServers": {
    "tombaldwin-candor": {
      "command": "npx",
      "args": [
        "-y",
        "candor-ts"
      ]
    }
  }
}
Changelog

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
Diagnostics

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 →

MCP tools · 16 exposed · ~2,678 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
limitnumberhow many recent records to return (default 5, max 50)
logstringactivity log path (default .candor/activity.jsonl under --root, else beside the served report prefix, else cwd)
sessionstringfilter to one sessionId
sincestringISO 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.

NameTypeReqDescription
reportstringreport 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.

NameTypeReqDescription
fnstringyes
reportstringreport 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.

NameTypeReqDescription
reportstringreport 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?'.

NameTypeReqDescription
baselinestringyesthe baseline report prefix
reportstringreport 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.

NameTypeReqDescription
effectstringyes
fnstringyes
policystringpath to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`)
reportstringreport 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?'.

NameTypeReqDescription
baselinestringyesthe baseline report prefix
reportstringreport 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.

NameTypeReqDescription
policystringpath to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`)
reportstringreport 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.

NameTypeReqDescription
fnstringyesthe function/unit to assess
reportstringreport 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.

NameTypeReqDescription
reportstringreport 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?'.

NameTypeReqDescription
effectstringyes
fnstringyes
reportstringreport 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.

NameTypeReqDescription
reportstringreport 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.

NameTypeReqDescription
fnstringyes
reportstringreport 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…

NameTypeReqDescription
policystringpath to a §6.2 policy file (optional; defaults to the repo's .candor/config `policy`)
reportstringreport 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).

NameTypeReqDescription
effectstringyes
fnstringyes
policystringpath to a CANDOR_POLICY file (optional)
reportstringreport 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.

NameTypeReqDescription
effectstringyesNet|Fs|Db|Exec|Env|Clock|Ipc|Log|Rand|Clipboard|Unknown
reportstringreport prefix (optional; defaults to $CANDOR_REPORT)

No output schema declared.

No examples provided.

Common questions

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.