Atlas / MCP servers / clouatre-labs / decisions-judge-mcp

decisions-judge-mcpBLOCK

mcp/clouatre-labs/decisions-judge-mcp

Typed decisions for AI agents as an MCP tool: yes/no probability (noul), choice, and score in one fast request. Backed by the TypeSafe System One model.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
4 4r · 0w · 0d
Transport
stdio
License
Apache-2.0
Stars
5
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/clouatre-labs/decisions-judge-mcp/actions/workflows/ci.yml) [](https://www.npmjs.com/package/decisions-judge-mcp) [](https://api.reuse.software/info/github.com/clouatre-labs/decisions-judge-mcp)

Typed decisions for AI agents, as an MCP tool. Ask yes/no probability (noul), choice among options, or score on ordered levels about any JSON application state — all questions answered in one fast request.

Backed by the TypeSafe System One model (Jev) via `@typesafe-ai/sdk`, with an opt-in Cloudflare Workers AI provider — see Providers.

Get started

Add to claude_desktop_config.json (~/Library/Application Support/Claude/) — the same JSON shape works for codex, goose, and pi:

{
"mcpServers": {
"decisions-judge": {
"command": "npx",
"args": ["-y", "decisions-judge-mcp"],
"env": { "TYPESAFE_API_KEY": "your-key-here" }
}
}
}

Then ask your agent anything answerable with a judgment — it can call the judge tool.

Remote transport (opt-in)

By default the server speaks stdio. Set JUDGE_TRANSPORT=http to serve the MCP Streamable HTTP transport (spec revision 2026-07-28) at POST /mcp instead:

JUDGE_TRANSPORT=http HTTP_HOST=127.0.0.1 HTTP_PORT=8080 npx -y decisions-judge-mcp
  • JUDGE_TRANSPORT: stdio (default) or http. Any other value exits with an error.
  • HTTP_HOST: bind address, default 127.0.0.1.
  • HTTP_PORT: port, default 8080; must be 1-65535.

Serving is stateless: each request is handled independently, with no protocol-level sessions (GET/`DEL

Read from source at commit 0d874fa81514OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add decisions-judge-mcp --env CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} --env TYPESAFE_API_KEY=${TYPESAFE_API_KEY} --env TYPESAFE_API_KEYS=${TYPESAFE_API_KEYS} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "decisions-judge-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "CLOUDFLARE_API_TOKEN": "${CLOUDFLARE_API_TOKEN}",
        "TYPESAFE_API_KEY": "${TYPESAFE_API_KEY}",
        "TYPESAFE_API_KEYS": "${TYPESAFE_API_KEYS}"
      }
    }
  }
}
03

Exposed tools (4)

4 read · 0 write · 0 destructive.

ToolRiskDescription
classifyreadBuild a judge call that classifies the provided application state into one of several described options with balanced criteria.
judgeread
routereadBuild a judge call that decides what the next decision should prepare for, with structured criteria per route.
verify-claimreadBuild a judge call that checks a factual claim about the provided application state with atomic yes/no questions.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (11 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (11)

HIGHPrompt injection · prompt.hidden_comment · CWE-94, CWE-1427
.github/ISSUE_TEMPLATE/bug.md:27
<!-- What actually happened? Include redacted error messages, stack traces, or unexpected output. Never post secrets, credentials, tokens, client data, or PII. -->
Why it matters. directive hidden in a comment the user does not see rendered
Fix. remove the comment
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/smoke-http.mjs:40
const ok = await fetch(`http://127.0.0.1:${port}/mcp`, { method: "OPTIONS" })
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/smoke-http.mjs:59
const response = await fetch(`http://127.0.0.1:${port}/mcp`, {
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/smoke-http.mjs:123
const res = await fetch(`http://127.0.0.1:${port}/mcp`, {
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/smoke-http.mjs:222
const getResponse = await fetch(`http://127.0.0.1:${port}/mcp`, { method: "GET" }).catch(
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/smoke-http.mjs:231
const oversized = await fetch(`http://127.0.0.1:${port}/mcp`, {
LOWInventory / provenance · inv.hidden_file · CWE-1104
.commitlintrc.yml
.commitlintrc.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint-cli2.jsonc
.markdownlint-cli2.jsonc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/server, @typesafe-ai/sdk, zod
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/audit/2026-09-21-mcp-server-review.md:128
Post-audit, three independent review delegates re-verified F1-F3 against the tree without access to this document's reasoning, each re-deriving evidence from `server.mjs`, the installed package source
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/audit/2026-09-21-mcp-server-review.md:31
`server.mjs:64` (`return (client ??= new TypeSafeClient());`) constructs `new TypeSafeClient()` with no `logLevel` or `logger` override, so the SDK's default `consoleLogger` (`node_modules/@typesafe-a
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 0d874fa81514full audit observations/trust-audit/mcp-server/clouatre-labs__decisions-judge-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-110d874fa81514BLOCKD69first audit
06

Questions

What is the decisions-judge-mcp MCP server?

Typed decisions for AI agents as an MCP tool: yes/no probability (noul), choice, and score in one fast request. Backed by the TypeSafe System One model.

What tools does decisions-judge-mcp expose?

4 in total: 4 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is decisions-judge-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does decisions-judge-mcp need?

It reads CLOUDFLARE_API_TOKEN, TYPESAFE_API_KEY and TYPESAFE_API_KEYS from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does decisions-judge-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as decisions-judge-mcp at 1.6.0.

How current is this page?

The grade is for one exact copy of the source (0d874fa81514), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement