
honesty-mcp
io.github.lkopietz3-bytePublished by GitHub account lkopietz3-bytev0.3.0Updated Oct 24, 2026
MCP server exposing 11 honesty-SDK kits (grounding, trust, audit, corroboration) as agent tools.
Overview
A local MCP server that exposes eleven honesty-SDK TypeScript kits as tools for checking citations, evidence, trust, provenance, audit chains and decision logs.
- What you can do
- Check grounding and corroboration of AI-generated text and its cited sources, sentence by sentence and by independent origin, with structural verdicts only. Run invariance checks on ranking or decision functions and on source text for payout identifiers, plus trust and authenticity scoring for identified or anonymous evidence. Validate provenance language and bucket public claims as current, stale or unverified. Append entries to a hash-chained audit log and re-verify the chain from genesis. Grade recommendation-versus-decision pairs and measure engine-versus-human divergence. Scaffold agent-receipt and cost-governor patterns with install steps and starter snippets.
- When to use it
- Useful when building or auditing an AI product that makes claims about its own outputs: checking that answers are cited, that evidence is corroborated, that rankings do not depend on payout or protected attributes, and that public claims and audit logs hold up. Best for a trusted local coding agent working on such a project.
- Requirements
- Runs locally over stdio, typically via npx or a project install of the npm package honesty-mcp; Node.js and network access to the npm registry are needed. No authentication or API keys. The three code-execution paths stay off unless the environment variable HONESTY_MCP_ENABLE_CODE_EXEC is set to exactly 1; HONESTY_MCP_WORKER_TIMEOUT_MS optionally sets the worker timeout in milliseconds.
Installation
In SourceWeft
- Open honesty-mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
honesty-mcp
Try the kits in your browser → · Part of honesty kits, a family of small checks for the claims an AI product makes.
An MCP (Model Context Protocol) server that exposes eleven already-built, zero-runtime-dependency "honesty SDK" TypeScript libraries as tools any MCP-compatible coding agent (Claude Code, Claude Desktop, or any other MCP client) can call while building or auditing a product — grounded-citation checking, evidence corroboration grading, payout/mutation-invariance checks (scenario-tested, not a formal proof for every possible input), trust/ authenticity scoring, provenance-claim validation, a claims registry, a tamper-evident audit chain, and recommendation/decision grading plus engine-vs-human divergence, plus scaffolding for two runtime-library kits that don't fit the "check this content" shape.
This server is thin by design: every tool is a Zod input schema plus a handler that imports and calls the real, unmodified export from the wrapped kit. It does not reimplement any of the underlying logic.
Quickstart
Then ask your coding agent to run check_grounding on a draft answer and its
sources. Each sentence comes back as grounded, placeholder, ungrounded or
invalid (a citation whose source is missing from the evidence). It checks
structure only: it does not decide whether a source is true.
Thirteen tools are listed by default. The three paths that run JavaScript the
agent sends are off unless you set HONESTY_MCP_ENABLE_CODE_EXEC=1; read
A note on the code-execution tools first.
Install
honesty-mcp is published on npm and wraps its eleven sibling "honesty SDK"
kits as ordinary registry dependencies (semver ranges, not local file:
paths) — npm install (or a plain npx) resolves everything from the
public registry, with nothing else to check out first.
The fastest way to run it, with no install step at all:
Or add it to a project:
Adding it to an MCP client
Claude Code:
Any other MCP client that reads an mcpServers config (Claude Desktop's
claude_desktop_config.json uses the same shape):
Three of the tools run JavaScript that the calling agent sends, so they are
off by default. To use them, add the environment variable
HONESTY_MCP_ENABLE_CODE_EXEC=1 to the server's environment (see
A note on the code-execution tools
first):
The server runs on the stdio transport — it reads JSON-RPC requests from stdin and writes responses to stdout, logging only a one-line startup banner to stderr so stdout stays a clean JSON-RPC channel. This is the transport Claude Code, Claude Desktop, and most local/CLI MCP client integrations expect for a locally-run server; it is not an HTTP server and has no port to browse to.
Listing in the MCP registry
honesty-mcp also ships a server.json (validated against the official
schema) so it can be listed on the
official MCP registry,
under the name io.github.lkopietz3-byte/honesty-mcp. Listing is a manual,
one-time step the maintainer runs after this package is on npm — it is
not run as part of this repo's CI or npm publish. Exact commands,
from the registry's own docs
(publishing guide,
CLI reference):
package.json's mcpName field (io.github.lkopietz3-byte/honesty-mcp)
must match server.json's name field exactly — that's how the registry
verifies the npm package and the registry listing belong to the same
publisher (see
package-types.mdx, "Ownership Verification").
Tools
9 content-checking kits, 12 tools (kits 1–9: hand one of these real content or data, get back a structured verdict):
2 scaffolding tools (agent-receipt-kit, cost-governor-kit — these are
runtime libraries a project installs and imports into its own running
code, not something checked on-demand the same way; see the code comments
in src/tools/agentReceiptScaffold.ts / costGovernorScaffold.ts for why a
"check this content" shape would misrepresent them):
That's 9 kits, 12 content-checking tool slots (payout-invariance-kit, audit-chain-kit, and advice-ledger-kit each got 2 tools instead of 1, since each bundles two genuinely distinct operations — runtime check vs. static grep; append vs. verify; grading one decision vs. measuring divergence across a whole population — that read better as separate, single-purpose MCP tools than as one tool with a mode switch) plus 2 scaffolding tools = 14 tools total.
That is 14 tools when code execution is enabled. With it off (the default),
check_mutation_invariance is not listed, so a client sees 13.
A note on the code-execution tools
These tools are off by default. check_payout_invariance (runtime mode)
and check_mutation_invariance wrap kit functions whose real signature takes
an actual JavaScript function (a ranking function, a mutation closure);
there is no way to represent a function as MCP JSON arguments. Both tools
accept that function as a source-code string and build the real function
via the Function constructor, inside the worker that src/lib/runFunctionJob.ts
starts after the code-execution switch check, before calling the unmodified kit
export with it. (src/lib/buildFunction.ts is the same builder kept as an
independently tested reference copy; nothing calls it at runtime.) compute_divergence's optional
config.groupBySource uses the same mechanism for advice-ledger-kit's
groupBy config function, but only when a caller actually supplies it, and
omitting it (the common case) needs no code execution at all, since the
library's own default groups by each pair's group field. This is equivalent
to eval for that one string.
Because an agent that has been fed hostile text could be talked into sending
code, the server only offers these paths when the operator turns them on by
setting HONESTY_MCP_ENABLE_CODE_EXEC=1 in the server's environment. Exactly
1 enables them; any other value (true, yes, 0, empty) leaves them off.
While they are off:
check_mutation_invarianceis not registered, so it does not appear in the tool list.check_payout_invarianceis listed withstatic-importsmode only.compute_divergenceis listed without thegroupBySourceinput, and sending it is rejected.- The server's initialize result carries a short note naming the variable.
runFunctionJob(src/lib/runFunctionJob.ts), the one place caller JavaScript is ever run, refuses to start a worker. Its error namesHONESTY_MCP_ENABLE_CODE_EXEC.
Every other tool is unchanged. The default is one named constant,
CODE_EXEC_ENABLED_BY_DEFAULT in src/lib/codeExec.ts.
Turning it on does not isolate anything. The code still runs with this
process's full filesystem, network and environment access. It is the same trust
model as the agent running node -e or vitest run itself, and it is not
designed to be exposed to untrusted, remote, or adversarial input. Only enable
it for a server driven by a trusted local agent, and only pass code you wrote
or trust.
Static-imports mode never reads files from disk
check_payout_invariance's static-imports mode takes files as a map of
path to file content that the caller sends. A list of paths is rejected with an
error. The wrapped kit would read any readable path it was given and return the
matching lines, which would let an agent read arbitrary files from the machine
one line at a time, so this server does not pass paths through. To scan files,
have the agent read them and send the text.
All three of these run inside a worker_threads Worker with a bounded
timeout (src/lib/runFunctionJob.ts), not on the server's own main
thread. Earlier versions called the built function synchronously in-process,
so a while (true) {} source string would block the entire stdio server
forever — every other in-flight or future tool call along with it. Now, if
the worker doesn't finish within the timeout (default 10 seconds,
override with the HONESTY_MCP_WORKER_TIMEOUT_MS environment variable, in
milliseconds, from 1 to 2147483647), it is forcibly terminate()d and the
tool call returns a clear timeout error instead of hanging. Console output
from the supplied code (console.log, console.error) is captured and
written to the server's stderr with a [honesty-mcp worker] prefix, capped
at 16 KiB per call, so it doesn't reach stdout, which carries the MCP
protocol. Code that writes to file descriptor 1 directly (for example with
fs.writeSync(1, ...)) is not intercepted and can corrupt the protocol
stream; that is part of why this is not a sandbox. This is not a sandbox — the
worker has this process's full OS-level privileges (filesystem, network,
environment variables) — it only bounds time. It does not stop caller
code from reading your filesystem, making network requests, or doing
anything else this Node process itself can do. The trust model above still
applies in full: only pass code you wrote or trust, and don't expose this
server to untrusted, remote, or adversarial input.
Kit versions
This server depends on the newer release line of each wrapped kit (the ranges
in package.json). The table lists what that line changes compared with the
0.2 line that honesty-mcp 0.2.x used. At start-up each tool reads the installed
kit's version, words its description for that version, and refuses an input
that the installed kit would silently ignore (for example matchIdentifierParts
with payout-invariance-kit 0.2, if an override installs it) instead of
pretending it worked.
test/kitCompat.test.ts runs the matching branch for whichever line is
installed. With the current ranges that is always the newer line, so the
older-line checks can be removed in a later release.
Honest limits
- This server adds no guarantee beyond what the kit it wraps already documents. Every tool description was checked against its kit's own README "Honest limits"/"Limits" section as of the sibling-kit commits this branch was built against — read that kit's README for the full detail behind any one-line tool description or table row here. If a kit's own limits change later, this server's wording can drift out of sync again; nothing here re-checks that automatically.
check_payout_invariance,check_mutation_invariance, andcompute_divergence's worker-thread timeout bounds time only, not behavior — see "A note on the code-execution tools" above. It is not a sandbox, and these paths are off unlessHONESTY_MCP_ENABLE_CODE_EXEC=1.SERVER_VERSION(src/server.ts) andpackage.json'sversionare still bumped by hand.test/drift.test.tsnow fails if they, or the two versions inserver.json, disagree, but nothing bumps them for you.
Development
To work on this server itself (rather than just use it), clone the repo and build from source:
Project layout
Source: README.md at commit 0165b69
Tools
0Version history
4- v0.3.0LatestOct 12, 2026
- v0.2.0Sep 30, 2026
- v0.1.1Sep 29, 2026
- v0.1.0Sep 29, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts