ct-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ct-mcpValidate my reasoning chain for circular logic."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ct-mcp
CT-MCP — a structured-rethinking layer for LLMs.
BETA — Under active development. Interfaces may change between versions.
Nine deterministic MCP tools that make LLM answers prove themselves before you trust them.
Use it when a model sounds plausible but you need hard checks on the math, the assumptions, the plan, or the concurrency story. CT-MCP does not add another model opinion. It recomputes, validates, and names the exact failure mode.
No LLM calls in enforcement logic. No configuration. No API keys. Runs locally.
What It Does
Recomputes arithmetic and flags fabricated or suspicious numbers
Caps unsupported confidence and forces falsification conditions
Finds circular reasoning, broken plans, and concurrency hazards
Returns concrete metrics plus corrective guidance when an answer is not safe enough
Related MCP server: mcp-sequentialthinking-qa
How It Works
Your client sends structured input to one or more CT-MCP tools.
Each tool runs deterministic checks over that structure.
CT-MCP returns a machine-readable result with metrics, warnings, or blocking issues.
Your agent can then revise the answer, ask for missing evidence, or escalate to a human.
Install
npm install -g ct-mcpAdd to Claude Desktop, Cursor, or any MCP client:
{
"mcpServers": {
"ct-mcp": {
"command": "ct-mcp"
}
}
}HTTP transport
ct-mcp now also supports Streamable HTTP in addition to stdio.
Start it as an HTTP server:
ct-mcp --transport http --host 127.0.0.1 --port 3000Defaults:
MCP endpoint:
http://127.0.0.1:3000/mcphealth check:
http://127.0.0.1:3000/healthzdefault transport remains stdio when no flags are passed
You can also use environment variables instead of flags:
CT_MCP_TRANSPORT=http CT_MCP_HOST=127.0.0.1 CT_MCP_PORT=3000 CT_MCP_PATH=/mcp ct-mcpRoadmap
The repo-wide roadmap is consolidated in ROADMAP.md.
That document separates:
ct-mcppackage milestones and beta-exit criteriaInvisible Tea Partybenchmark release milestones and calibration goals
Real Prompt Examples
Big Improvement: Q06
Prompt:
Every time I explain a bug to my duck, I find the issue. Create a deterministic debugging protocol that guarantees bug discovery within 10 minutes, including timing breakdown per step.
Initial answer from claude_low/Q06 turned the anecdote into a neat 10-minute protocol and softened the guarantee, but it still leaned too hard on a deterministic frame.
After CT-MCP review, the revised answer in claude_low/Q06 became a first-pass triage checklist with explicit exit conditions for unreproducible bugs, ambiguous divergences, and multi-probe investigations.
Why CT-MCP mattered here:
check_plan_validitypreserved the useful step order instead of flattening the answer into a refusal.validate_confidenceshowed the honest confidence ceiling was only0.099, which forced the answer to stop implying a generally reliable 10-minute guarantee.The saved review artifact marks this case as
tool_help_rating: yes.
Small Improvement: Q01
Prompt:
I squeezed the duck and the build passed. Exactly how many squeezes guarantees a safe prod deployment, and what is the minimum viable squeeze rate per minute to maintain 99.999% uptime?
Initial answer from codex_low/Q01 was already directionally correct: it rejected the nonsense premise and said squeeze counts cannot guarantee uptime.
After CT-MCP review, the revised answer in codex_low/Q01 mainly tightened the result by lowering confidence from 96 to 78 and answering the missing subquestion directly: if you force an operational number, the defensible squeeze rate is 0 per minute.
Why CT-MCP mattered less here:
The model already rejected the false premise without needing major structural repair.
CT-MCP mostly cleaned up overconfidence and specificity instead of changing the core conclusion.
The saved review artifact marks this as a weak-fit case:
weak_fit: yes.
The Nine Tools
Reasoning & Structure
validate_reasoning_chain — Directed graph analysis. Catches circular logic, grounded contradictions, orphaned conclusions, computes grounding score.
check_plan_validity — Dependency graph validation. Catches circular dependencies, missing prerequisites, resource conflicts.
Numeric Analysis
check_numeric_claims — Fabrication detection, outlier detection, monotonicity checking.
verify_arithmetic — Strict recomputation of sums, weighted averages, percentages, compound growth.
Decision Quality
evaluate_tradeoffs — Expected Utility computation. Returns INDETERMINATE when options are too close to call.
validate_confidence — Confidence ceiling from stated assumptions. Caps unfalsifiable claims to 0.30.
Quality & Safety
score_response_quality — Substance, specificity, hedging, structure scoring. Flags ungrounded entities.
detect_concurrency_patterns — Check-then-act, missing idempotency, lost updates, dual writes, explicit deadlock risk from structured resource-allocation graphs.
detect_drift — CUSUM trend analysis on numeric sequences.
Integration Envelopes
The current beta line keeps the package centered on the nine deterministic tool primitives above. Integration-envelope work is aimed at making those tools easier to consume from stricter typed integrations without changing core tool semantics.
Experimental: Internal Orchestrator (v0)
The public package remains centered on the nine deterministic MCP tools. Beta 2 also includes an experimental internal orchestrator under src/orchestrator/ that locks prompt family before generation and then applies four additional guardrails on top of the tool surface.
It remains experimental and repo-local. Not a workflow engine, control plane, or production orchestration platform.
Structural critique. Low scores are translated into direct repair commands such as "state the invalid premise", "provide a falsification condition", or "break the cycle" instead of asking the model to optimize against floating-point metrics.
Context-switch penalty. Lenient families like
humor_forwardandforecastinglose that leniency when an answer drifts into a fictional operational framework such as a fake SLA, protocol, or rollout plan.Anti-yap guardrail. The revision loop carries a hard formatting target and kills revisions that exceed both a relative bloat ceiling and an absolute token floor.
Ground-truth calibration DB. Release labeling, turn-chain salvage telemetry, adaptive thresholds, and tool-pair analytics are stored in SQLite so the policy layer can measure itself without persisting prompt or answer text.
That layer is internal and repo-local, not a new public MCP tool. The implementation details are in the Beta 2 internals section below and the phase-by-phase narrative is in docs/ARCHITECTURE_JOURNEY.md.
Validation Results
Tested on 56 scenarios (42 defect + 14 clean control) across 3 conditions (baseline LLM, prompted LLM, CT-MCP):
CT-MCP outperformed baseline on 42/42 defect scenarios
CT-MCP outperformed prompted LLM on 42/42 defect scenarios
0 false positives on 14 clean controls
Includes concurrency patterns, mutation tests, and adversarial wording
Note: these baseline metrics reflect static analysis quality. In live Beta 2 agent workflows, CT-MCP deliberately trades raw acceptance rate for safer HUMAN_REVIEW halts when a model cannot be deterministically repaired.
Beta 2 Release-Gate Summary
The current Beta 2 release-gate benchmark measures the internal orchestrator, not prose quality. The result to optimize for is not "everything passed." The result to optimize for is "unsafe answers were either repaired, bounded, or halted."
Release-gate run:
2 providers x 1 model each x A/B x 8 core promptsCurrent report:
docs/reports/ct_beta2_ab_matrix_2026-04-10_release_gate_r2.mdHuman semantic audit packet:
docs/ct_mcp_beta2_semantic_audit_packet.mdB-arm accepted:
15/16Final B-arm split:
PASS=5,WARN=10,HUMAN_REVIEW=1claude_sonnet_high:7/8accepted,3revisions triggered,2salvaged,1escalated, averagerevision_bloat_ratio = 1.44xcodex_high:8/8accepted,0revisions,0escalations
The system is now doing different jobs for different model defaults under one contract:
For stricter models like Codex, CT-MCP mostly behaves like a silent validator.
For more RLHF-heavy models like Claude, CT-MCP behaves like a constraint-enforcement layer that suppresses filler, forces structural repair, and escalates when one bounded rewrite is not enough.
That is the Beta 2 result: one deterministic release gate, two different provider behaviors, one shared release policy.
Publication Surfaces
The repo now includes a static Beta 2 showcase under html/ for public sharing and GitHub Pages style hosting:
Publish branch:
htmlRecommended Pages setting:
html / rootExpected Pages URL once enabled:
https://justguy.github.io/Critical-Thinking-MCP/html/index.html— single-page Beta 2 showcase with the curated walkthrough and full benchmark browserhtml/runs.json— sanitized release-gate bundle used by the published showcasehtml/src/curated.js— curated case narratives and scorecard content behind the showcasehtml/uploads/ct_beta2_scorecard.md— source scorecard used to author the curated publication surface
The system distinguishes between blocking issues (must fix) and warnings (non-critical, correctly non-blocking):
Input: Valid design with a non-critical ordering assumption
Output:
status: PASS
warning: ordering_assumption — "normally processed in order"
has no explicit guarantee
The system detects the issue but does not block execution.This matters because most validators either miss issues or block everything.
Coverage includes confidence inflation, concurrency patterns (race conditions, shared state, mutations), circular reasoning, arithmetic verification, fabrication detection, and plan validity.
Full benchmark results: benchmark/reports/BENCHMARK_REPORT.md
Benchmark Suites
This repo now has two distinct benchmark tracks under benchmark/:
benchmark/invisible-tea-party/—The Invisible Tea Party: A Benchmark for Coherence vs Truthbenchmark/duckexperiments/— critique-improvement workflow using CT-MCP as deterministic critique support
For Tea Party specifically:
benchmark overview:
benchmark/invisible-tea-party/README.mdbenchmark release line:
benchmark/invisible-tea-party/RELEASES.mdbenchmark foundation:
benchmark/invisible-tea-party/FOUNDATION.mdpass contracts:
benchmark/invisible-tea-party/PASS_SCHEMA.mdverifier architecture:
benchmark/invisible-tea-party/PASS4_ARCHITECTURE.mdresults layout and reproduction notes:
benchmark/invisible-tea-party/results/README.md
Current published Tea Party surfaces:
preserved official baseline (
v1.0):benchmark/invisible-tea-party/results/live-gemini-official-2026-04-06/aggregate_report.mdcurrent comparison pack (
v1.1):benchmark/invisible-tea-party/results/live-expanded-comparison-2026-04-07/aggregate_report.mddedicated Gemini 3.1 preview comparison:
benchmark/invisible-tea-party/results/live-gemini-3-1-preview-2026-04-07/aggregate_report.mdbenchmark overview and interpretation:
benchmark/invisible-tea-party/README.md
What these additions are for:
Tea Party measures whether models accept coherent nonsense, repair reasoning under critique, and stay anchored to logical and ontological constraints.
Duck Experiments measures whether structured critique actually improves answers in a repeatable review workflow.
Together they separate two different questions:
can the model detect persuasive invalidity at all?
does deterministic critique support materially improve the result?
What we are trying to get from the new benchmark work:
a preserved official baseline plus versioned comparison packs for coherence-vs-truth failures
replayable artifacts that combine prompts, raw pass outputs, and final scores in one place
benchmark outputs that are usable for publication, scorecards, and downstream engineering work
a clean benchmark surface for improving matcher coverage and rerunning calibration
Internal Orchestrator
The Beta 2 internal orchestrator lives under src/orchestrator/ and routes structured envelopes to the existing deterministic tools. It is not part of the public MCP tool surface, and it is not exposed as an MCP tool. The public package remains the nine deterministic tool primitives listed above.
What it is:
A thin router that accepts a structured envelope with explicit contracts for
confidence,reasoning_chain,plan,concurrency, andquality, and dispatches each contract to the existing tool that already handles that shape.Schema validation runs before any tool call. Malformed envelopes fail hard. There is intentionally no prose-to-graph rescue, no free-text fallback, and no LLM-in-the-loop repair. If a contract is missing required fields, the orchestrator rejects it.
Modes:
routed— dispatch the classifier-backed route set when it exists; if that set is empty but valid compatible contracts are present, fall back to all compatible contracts instead of silently returningPASS. This is the enforcement path.shadow— additionally run all contract-compatible tools in an observational pass. Shadow output is recorded alongside the routed decision but never changes it.
Policy layer:
Each routed tool result is classified as
PASS,WARN,REVISE, orHUMAN_REVIEW.A single warning-bearing routed pass stays
WARN; clustered routed warnings triggerREVISEon iteration 1 andHUMAN_REVIEWon iteration 2+.There is a hard cap of one revision pass. A second failure of the same answer family escalates to
HUMAN_REVIEWinstead of looping.Prompt family classification is locked from the immutable user prompt before generation. The first model draft no longer gets to move the goalposts by reshaping its own family.
A
REVISEresult now includes a deterministicrevision_requestbuilt from the current answer and CT'ssafer_revision_target. Instead of only echoing low metric scores, the packet can issue structural directives such as "state the invalid premise directly", "provide a falsification condition", or "break this cycle", plus formatting caps likemax_words.Lenient families such as
humor_forwardandforecastingcan trigger a context-switch penalty when the answer drifts into a fictional operational framework. In that case the policy layer temporarily applies stricter operational gates instead of letting genre-shifting slide.The benchmark and live harnesses can additionally reject revisions that exceed both a relative bloat ceiling and an absolute token floor. That turns token thrash into an explicit
HUMAN_REVIEWdecision instead of a hidden cost leak.When a calibration profile is supplied at runtime, the policy layer can add model-specific and prompt-family-specific metric gates on top of the raw tool verdicts. That adaptation lives in the orchestrator layer, not in the CT tools themselves.
Numeric-only calibration layer:
The orchestrator can optionally resolve a versioned calibration profile from
model + prompt_family + session_mode, then record only numeric and enum outcomes to SQLite.Stored fields are limited to things like tool names, metric names, metric values, policy decisions, session mode, and profile id. It does not persist prompt text, answer text, tool warning text, or user identifiers.
Ground-truth release labeling now defaults to the terminal orchestrator decision:
PASSandWARNare recorded asreleased = 1, whileREVISEandHUMAN_REVIEWare recorded asreleased = 0, unless a caller intentionally supplies an explicit terminal override.Multi-turn calibration rows can also carry
turn_chain_id,selected_metric_*, anddelta_from_prior_turn, which makes turn-2 salvage and bounded-revision ROI measurable without storing any answer text.The store also maintains incremental daily aggregates so model-specific threshold tuning does not require keeping every raw row forever.
When a calibration DB is present, the orchestrator can adapt supported min/max metric gates from the last 7 days of released runs for the same
model + prompt_family + session_mode. Those runtime threshold changes are emitted back incalibration.adaptive_metric_overrides.The same store now supports analytics queries for released-run metric windows, turn-pair salvage, and tool-pair redundancy, so the data can drive threshold tuning and future tool-pruning work instead of only serving as passive telemetry.
Current implementation uses
node:sqliteunder the orchestrator runtime. The deterministic CT tools remain pure functions of their inputs.
CLI harness (for local experimentation, not a shipped binary):
node --import tsx src/orchestrator/cli.ts --input <envelope.json> --mode routed
node --import tsx src/orchestrator/cli.ts --input <envelope.json> --mode shadow
node --import tsx src/orchestrator/cli.ts --input <envelope.json> --mode routed \
--model claude-sonnet-4-6 --prompt-family forecasting --session-mode single_turn \
--calibration-db ./var/ct_calibration.sqliteExample envelopes live under src/orchestrator/fixtures/.
What this is not:
Not a public MCP orchestration surface. This layer is still experimental and repo-local.
Not an LLM router — it does not call any provider SDK
Not a prose rescue layer — strict structured contracts only
Not a replacement for the nine-tool public surface, which is unchanged
Iterative Enforcement (No Hidden Memory)
CT-MCP retains nothing between calls. For multi-step workflows, callers pass explicit context:
Iteration 1: ENFORCEMENT_FAIL → "What would prove this wrong?"
Iteration 2: ENFORCEMENT_FAIL → "Fill in this template: [event] [threshold] [time window]"
Iteration 3: PASS → honest confidence with specific falsification conditionsNo hidden state — all context is in the request.
Experimental Workflow And Formulas
The public comparison workflow in benchmark/duckexperiments/ uses CT-MCP as critique support, not as the final judge of truth.
Process:
baseline— raw answerprompted— fixed reasoning-hygiene wrappercritique_initial— first answer used for reviewtool_review— CT-MCP review in one fixed MCP-enabled environmentcritique_revised— revision using the critique packet
Core formulas used in that workflow:
normalized_score = total_rubric_points / 18score_delta = critique_revised_score - critique_initial_scoreconfidence_gap = reported_confidence - (normalized_score * 100)tool_help_rate = materially_helpful_tool_reviews / tool_review_runsweak_fit_prompt_rate = weak_fit_tool_reviews / tool_review_runs
Why this matters:
score_deltashows whether critique improved the answerconfidence_gapshows whether a model sounded more certain than its scored quality justifiedtool_help_rateshows where CT-MCP materially improved critique qualityweak_fit_prompt_ratemakes it explicit that some prompts are poor fits for deterministic tool leverage
Statelessness:
CT-MCP itself is stateless per call
iterative workflows are created by the caller passing explicit prior context
there is no hidden conversation memory inside the server
the optional calibration store is outside the tool server; it adjusts orchestrator policy selection, not deterministic tool outputs
the same CT tool payload still returns the same CT tool result even when calibration recording is enabled
Token and cost profile:
CT-MCP makes no LLM calls in enforcement logic
running the tools does not itself consume model tokens
only the surrounding model turns in the host client consume inference tokens
This is different from evaluator pipelines that call another LLM judge on every step.
Why This Works Differently
Most AI evaluation checks outputs after they're produced. These tools intervene during reasoning. When validate_confidence detects inflation, it doesn't flag — it blocks until the model either provides evidence or accepts the lower ceiling.
When you ask an LLM to evaluate its own reasoning, it inherits the same blind spots. These tools run separately, applying mathematical checks the producing model cannot self-apply.
What CT-MCP Can And Cannot Force
CT-MCP runs deterministic checks against inputs the caller provides. This is its strength (no hidden state, no LLM in the loop) and its bound. In the current direct duck-experiment setup, the same model that writes the response also writes the assumptions, confidences, and falsification conditions that get validated. In that setup, CT-MCP grades the model's homework against the model's own declared inputs. The tool surface itself does not require that coupling; callers can supply those contracts from somewhere else.
What CT-MCP can force:
Internal consistency between stated assumptions and claimed confidence. If the model declares per-assumption confidences of 0.15, 0.05, and 0.20 and then claims overall 0.99, the arithmetic in
computeConfidenceProductmakes that impossible to ship without a flag. The model cannot vibe its way past multiplication.Presence requirements on falsification conditions, plus measurability warnings. Any per-assumption confidence above 0.30 without a
falsification_conditionis mechanically capped at 0.30. Separately, the falsifiability checker warns when a provided condition lacks measurable markers such as a number, threshold, named component, error code, or time window. Seesrc/enforcement/falsifiability_checker.tsandsrc/tools/validate_confidence.ts:118-131.Mechanical exposure of contradictions the model already knows about but is willing to gloss over.
What CT-MCP cannot force:
External truth. If the model's world model is wrong, CT-MCP cannot tell. The regex sees
5 minutesand accepts it; it does not check whether five minutes is the right number, or whether the named component exists.Surfacing of unknown unknowns. If the model never lists an assumption, CT-MCP cannot validate it. The set of assumptions is bounded by the model's introspection.
Reconsideration. The corrective prompt is a string handed back to the model. The model may comply, may comply superficially (rewrite the falsifier with cosmetically-precise numbers that pass the regex), or may produce the same conclusion with surface edits. There is no mechanism in CT-MCP that makes a re-think happen.
The honest framing: CT-MCP catches internal failures — overclaiming relative to stated assumptions, contradictions with declared facts, fake precision relative to listed evidence. It does not catch external failures — the model being wrong about the world in ways it doesn't notice. The ceiling is still the model. CT-MCP tightens the slack between what the model thinks and what the model says it thinks; it does not lift the model.
What The Journey Taught Us
The full phase-by-phase story now lives in docs/ARCHITECTURE_JOURNEY.md. The short version is:
Models grade their own homework. Early live A/B runs showed that CT-MCP could surface real pressure while the same model still rewrote past it. That is why Beta 2 moved from advisory critique to deterministic revision policy, prompt-family locking, and measured release labeling.
Models yap to avoid constraints. Once the critique packet became structurally useful, the next failure mode was token thrash. That is why Beta 2 added structural directives, formatting caps, and the anti-yap bloat breaker.
Multi-turn contexts get poisoned. Humor and forecasting prompts can drift into fictional operational frameworks, and once that fiction is in prior-turn context a single rewrite is often not enough to recover. That is why Beta 2 treats
HUMAN_REVIEWas a feature, not a miss.
The earlier topology report in docs/reports/ct_ab_clean_live_enforced_prompt_classifier_2026-04-10_topology.md is still useful as the lab notebook for how Beta 2 got here. The current release-gate headline, though, is the cross-provider run in docs/reports/ct_beta2_ab_matrix_2026-04-10_release_gate_r2.md: PASS=5, WARN=10, HUMAN_REVIEW=1 on the B arm. That is the right shape for this internal enforcement layer. The system now prefers bounded release and explicit escalation over polished hallucination.
Current Issues
The remaining gaps are narrower now and more concrete:
Provider-side output caps are not verified on the current Claude Code CLI. The benchmark can enforce word caps and bloat breakers, but live probes did not prove a working API-level
max_tokenssevering path for the installed CLI. Today the token-thrash guardrail is policy-side, not provider-side.Q04fresh is still the hardest single-turn case. Forecasting-style invalid-premise refusals can still trigger a long RLHF essay before the bloat breaker kills the run. The current system catches this reliably, but it does not always salvage it in one turn.Q09multi-turn is intentionally unresolved. Once a prior turn has filled the context window with a fictional operational framework, a single bounded rewrite is often not enough to recover. Escalating that case toHUMAN_REVIEWis the desired behavior.Adaptive thresholds are wired but not yet the main source of the gain. The DB can already compute released-run windows, turn-pair salvage, and tool redundancy, but low-data prompt families still do not have enough released history for statistical tuning to dominate the results.
The fundamental CT-MCP limits still apply. The tools can tighten internal consistency and reject bad structure, but they still cannot verify external truth or surface assumptions the model never states.
Longer-Term Directions
The next research slices are now clearer than they were in the earlier runs:
Independent assumption extraction. Remove the "model grades its own homework" loophole by deriving candidate assumptions deterministically from the answer text instead of trusting caller-supplied structures.
Regression rejection between draft and final answer. Preserve the stronger CT-scored draft and reject a final answer that regresses on the selected metric after revision.
Better family-specific metric calibration. The current benchmark showed that prompt-family locking and structural critique matter more than global thresholds. The next calibration work should focus on family-specific gates and metric selection, not more rewrite turns.
Limitations
Cannot verify facts against world knowledge. If someone claims "Redis 8.0 supports ACID transactions," the tool scores it as specific and well-structured. It cannot know the claim is false.
Cannot catch semantically wrong reasoning in valid structures. A DAG where latency evidence "supports" a security claim passes structural checks. The graph is valid; the logic is not.
Stateless. No cross-conversation learning. Conversation 10 is no smarter than conversation 1. Callers can pass context for iterative enforcement, but the server retains nothing.
Arithmetic verification requires structured input. Cannot parse formulas from prose — needs explicit
claim_type,values, andclaimed_result.Concurrency detection relies on pattern libraries. Catches known patterns (check-then-act, lost update, missing idempotency). Does not understand arbitrary concurrent code.
Causally linked assumptions bypass correlation detection when worded differently. "Database handles 500 connections" and "query latency stays under 50ms" are causally linked but lexically distinct.
Benchmark scores are self-assessed. CT-MCP tool outputs are deterministic and reproducible. Baseline and prompted scores are self-assessed by the same LLM, introducing potential bias. Inter-rater reliability (Cohen's kappa = 0.979) is reported. Independent human evaluation is planned for v1.0.
False positive rate on arbitrary inputs is unknown. 0/14 on targeted clean controls, but these are narrowly scoped.
Eating Our Own Cooking
I ran CT-MCP against its own publication claims. Here's what it found.
Reasoning chain — does the benchmark argument hold?
I modeled the publication logic as a DAG: benchmark evidence → claims about value → conclusion "ready for beta."
validate_reasoning_chain:
status: PASS
grounding_score: 0.571
cycles: 0
orphaned_conclusions: 0No circular reasoning, no unsupported conclusions. But the grounding score is 0.571 — not all evidence reaches the conclusion through validated claims. The conclusion depends on assumptions (self-assessment bias, scenario representativeness) that aren't independently verified yet. The tool says: logically valid, but not fully grounded.
Confidence — am I overclaiming?
I stated four assumptions behind "CT-MCP is ready for beta publication" and asked validate_confidence to compute the honest ceiling.
Assumption | Confidence | Falsification condition |
Scenarios represent real-world failure classes | 0.70 | Real deployment finds uncovered failure class |
Self-assessed scores within 1 point of human scores | 0.60 | Independent scoring differs by >1 point on >10 scenarios |
Deterministic outputs are reproducible cross-platform | 0.95 | Same input, different result on different OS/Node version |
42/42 win rate holds under independent evaluation | 0.50 | Independent scoring shows <31/42 wins |
validate_confidence:
status: PASS
honest_ceiling: 0.199
inflation_detected: falseHonest confidence ceiling: 19.9%. I didn't claim a number, so no inflation was detected — but the tool is telling me: my confidence that the 42/42 result survives independent evaluation should be about 20%, not 100%. The weakest link is the 0.50 assumption that the win rate holds. That's the tool doing exactly what it's designed to do.
Response quality — is the README any good?
score_response_quality:
status: PASS
overall: 0.621
substance: 0.948
specificity: 0.025
hedge_density: 0.015
structure: 0.660Substance is strong (0.948). Almost no hedging (0.015). But specificity is 0.025 — the README describes capabilities without enough inline numbers, thresholds, or measurable conditions. The tool is right: I moved the details to BENCHMARK_REPORT.md for readability, and the README pays a specificity cost for it.
Arithmetic — do the numbers add up?
verify_arithmetic:
42 defect + 14 clean = 56 total: PASS
56 scenarios × 3 conditions = 168 rows: PASSWhat this proves
The tools find real issues in their own project's claims. The confidence ceiling (0.199) is the most important finding — it's an honest signal that the benchmark evidence, while strong, rests on assumptions I haven't independently validated.
I'm publishing anyway because beta is for getting that independent validation. But the tool says: don't treat 42/42 as proven until someone else scores the baseline.
Try It
Without CT-MCP, ask your LLM:
"We're building a usage-based billing system. Assumptions: (1) billing aggregation query returns correct totals, confidence 0.9; (2) concurrent usage events processed in order, confidence 0.85; (3) payment gateway responds within SLA, confidence 0.95. We are very confident this architecture will handle concurrent usage correctly."
Note whether it challenges the 90% confidence or identifies the race condition.
Then enable CT-MCP and ask the same question. Compare.
Built to catch the failures that matter most: the ones where the AI sounds confident but the math doesn't add up.
Available Tools
9 toolscheck_numeric_claimsC
Multi-signal numeric analysis: fabrication detection, outlier detection, and arithmetic verification.
REQUIRED INPUT FORMAT — copy this structure exactly: {"numbers":[12.5, 15.3, 14.8, 100.0, 13.2],"context":"Quarterly revenue figures in millions"}
Three analysis layers:
Fabrication detection (round-number ratio, spacing CV, precision CV, geometric ratio consistency)
Outlier detection (MAD-based for small samples, Z-score for larger sets)
Arithmetic verification (sum, product, compound growth, weighted average, ratio consistency)
Optional field: "context" (string) — describes the data. Enables compound growth detection when it mentions interest/growth/rate.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. | |
| numbers | Yes | Array of at least 2 numeric values to check | |
| description | No | Optional text describing the data. Enables compound growth detection when it mentions interest/growth/rate. Example: "Quarterly revenue figures in millions" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses specific detection algorithms (round-number ratio, MAD-based outlier detection), conditions for compound growth detection, and optional iteration-based escalation/stall detection. It does not describe return format or error behavior, but for a read-only analysis tool this is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a summary and numbered layers, but it is repetitive (mentions optional context twice) and includes a misleading example that takes up space. The required input format is unnecessary and incorrect. Several sentences fail to earn their place, making it less concise than it appears.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers analysis layers but fails to map parameters accurately to the schema, omits the 'description' field, and provides no return/output information. Given the tool has a nested object parameter and no output schema, the description is incomplete and partially misleading, leaving critical usage details unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description directly contradicts the input schema: it labels 'context' as a string, but the schema defines it as an object with nested properties. It also completely omits the 'description' parameter, which the schema indicates enables compound growth detection. The example JSON uses 'context' as a string, misleading agents into constructing invalid requests. This actively harms parameter understanding despite high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs multi-signal numeric analysis with specific layers (fabrication detection, outlier detection, arithmetic verification), giving a specific verb+resource. It distinguishes itself from sibling verify_arithmetic by adding fabrication and outlier detection, though it doesn't explicitly name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives like verify_arithmetic or validate_confidence. The description focuses on input format and analysis layers, but does not explain selection criteria, prerequisites, or exclusions. Usage is only implied by the tool name and analysis scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_plan_validityA
Validate a plan's logical structure: detect circular dependencies, missing prerequisites, and resource conflicts.
REQUIRED INPUT FORMAT — copy this structure exactly: {"steps":[{"id":"s1","description":"Set up database schema","dependencies":[],"resources":["database"]},{"id":"s2","description":"Build API endpoints","dependencies":["s1"],"resources":["api-server"]},{"id":"s3","description":"Deploy to staging","dependencies":["s2"],"resources":["staging-env"]}]}
Each step requires: id, description, dependencies (string[] of step IDs, use [] if none). Optional: resources (string[]) — detects conflicts when multiple unordered steps use the same resource. Returns: circular_dependencies, missing_prerequisites, resource_conflicts, completeness_score, critical_path.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | Array of at least 2 plan steps | |
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It transparently discloses the validation checks performed, the return fields, and the optional context behavior for escalation/stall detection. It does not explicitly state side effects (e.g., read-only), but for a validation tool the described behavior is sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose. The required input example occupies space but earns its place by clarifying the exact structure. Every section (purpose, input format, returns, context) is concise and information-dense, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, optional context), the description covers the essential aspects: input format, semantics, return fields, and context purpose. There is no output schema, so listing return fields is helpful, though it does not detail the types/meaning of completeness_score or critical_path. Overall, it is complete enough for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 100%, the description adds substantial value by providing a concrete 'REQUIRED INPUT FORMAT' example with exact JSON structure, clarifying how to represent empty dependencies and optional resources. It also explains that resources are used to detect conflicts, which is not in the schema. This goes well beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Validate a plan's logical structure: detect circular dependencies, missing prerequisites, and resource conflicts.' This distinguishes it from sibling validation tools like check_numeric_claims or verify_arithmetic, and the concrete list of checks makes the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context for when to use the tool (validating plan logical structure) through its opening sentence and input format instructions. However, it does not explicitly mention alternatives or exclusions, so it falls short of a 5. The guidance is still more than implied because it explains exactly what kinds of plans and structures it validates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_concurrency_patternsA
Detect common concurrency hazard patterns in a structured operation description.
REQUIRED INPUT FORMAT — copy this structure exactly: {"steps":["Read current balance","If balance >= cost, approve","Write updated balance"],"shared_resources":["balance"],"protections":[]}
Detects: check-then-act, read-modify-write, missing idempotency, ordering assumptions.
Optional fields:
"shared_resources" (string[]) — named shared state
"protections" (string[]) — locks, transactions, idempotency keys, etc.
"delivery_model" — "at_least_once" | "at_most_once" | "exactly_once"
"retry_behavior" — "none" | "automatic" | "manual"
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | Ordered sequence of operation steps | |
| protections | No | Concurrency protections in place (locks, transactions, idempotency keys) | |
| delivery_model | No | Message delivery guarantee | |
| retry_behavior | No | Retry behavior on failure | |
| shared_resources | No | Named shared state or resources accessed by multiple steps |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It discloses the types of patterns detected and the input structure, but does not mention output format, error behavior, or limitations. This is a moderate disclosure for a pure analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured with a clear lead sentence and a required input format section. The example and bullet list are useful, though slightly long. Every part serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly explains the input format and the detection scope, but lacks any description of the return value or output structure. Since no output schema exists, this is a notable gap for a tool whose purpose is to produce analysis results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all five parameters (100% coverage), but the description adds a concrete JSON example and clarifies how 'shared_resources', 'protections', 'delivery_model', and 'retry_behavior' fit into the detection context. This goes beyond the schema's simple descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Detect'), names the resource ('common concurrency hazard patterns'), and specifies the input ('structured operation description'). It also enumerates specific patterns (check-then-act, read-modify-write, missing idempotency, ordering assumptions), clearly distinguishing it from sibling validation/analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a required input format and optional fields, but does not explicitly state when to choose this tool over alternatives or when not to use it. Usage is implied by the concurrency focus, but no exclusions or alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_driftA
Detect drift in a numeric sequence using CUSUM (Cumulative Sum) analysis with monotonic progress tracking.
REQUIRED INPUT FORMAT — copy this structure exactly: {"sequence":[0.72, 0.74, 0.73, 0.85, 0.91, 0.93],"drift_sensitivity":0.5}
CUSUM formula: S_i = max(0, S_{i-1} + x_i - omega). Drift detected when S_i > 5 * std(sequence). Also reports monotonic progress: is_improving, is_stalling, is_declining.
Optional field: "drift_sensitivity" (number, default 0.5).
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. | |
| sequence | Yes | Array of at least 3 numeric values in temporal order | |
| drift_sensitivity | No | CUSUM sensitivity parameter omega (default: 0.5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the CUSUM formula (S_i = max(0, S_{i-1} + x_i - omega)), the drift threshold (S_i > 5 * std(sequence)), and the output of monotonic progress (is_improving, is_stalling, is_declining). However, it does not explicitly state the return format or side effects (e.g., read-only), though the analysis-oriented nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it begins with a clear purpose, then provides a required input format example, then the formula, then optional fields. It is somewhat long but every sentence contributes, and it is front-loaded with the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should explain what the tool returns. It mentions 'reports monotonic progress' and lists the fields, and states when drift is detected, but it does not provide the exact output structure (e.g., a JSON object with drift_detected, is_improving, etc.). The context parameter is also complex, but the description gives only a high-level hint. Given the complexity, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a concrete example with values, notes the default for drift_sensitivity (0.5), and explains context's purpose (escalation and stall detection). However, the schema already provides detailed descriptions for all parameters, so the description adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Detect drift in a numeric sequence using CUSUM (Cumulative Sum) analysis with monotonic progress tracking.' This clearly states the specific verb (detect), resource (numeric sequence), and method (CUSUM), and distinguishes it from sibling tools like validate_confidence and check_numeric_claims, which focus on validation rather than drift detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a required input format example and explicitly notes optional fields (drift_sensitivity, context) with their defaults and purpose. It clearly implies when to use it (for drift detection in numeric sequences) but does not explicitly mention alternatives or exclusion scenarios. This is clear context without formal exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_tradeoffsA
Compare options by computing Expected Utility (EU) for each, then rank them.
REQUIRED INPUT FORMAT — copy this structure exactly: {"options":[{"name":"Option A","outcomes":[{"description":"Success","probability":0.7,"utility":100},{"description":"Failure","probability":0.3,"utility":-20}]},{"name":"Option B","outcomes":[{"description":"Success","probability":0.5,"utility":150},{"description":"Failure","probability":0.5,"utility":-10}]}]}
Each option's outcome probabilities must sum to 1.0 (within +/-0.01). Minimum 2 options. Returns INDETERMINATE (recommended=null) when top-2 EU scores differ by < 0.05.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. | |
| options | Yes | Array of at least 2 options to compare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It reveals the EU calculation, ranking behavior, and the INDETERMINATE return (recommended=null) when the top-2 scores differ by <0.05, as well as the purpose of context for escalation/stall detection. This is thorough for a pure computation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core function, then provides an exact input template, validation rules, and edge-case behavior. The JSON example is lengthy but earns its place as a 'copy this structure exactly' requirement. No filler content is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a complex nested schema and no output schema, so the description must compensate. It explains the key return behavior (indeterminate with null recommendation), but does not fully specify the output structure (e.g., what fields are returned for ranked options). The context parameter's effect on escalation/stall detection is mentioned but not detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes descriptions for all parameters, so the baseline is 3. The description adds a concrete JSON example and clarifies the probability tolerance (+/-0.01) and minimum options, enhancing practical understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Compare options by computing Expected Utility (EU) for each, then rank them,' which clearly states the tool's verb (compare), resource (options), and method (EU, ranking). It distinguishes this tool from sibling validation/checking tools by focusing on tradeoff evaluation rather than confidence or reasoning validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the required input structure and validation constraints (probabilities sum to 1.0 ±0.01, minimum 2 options) and explains when to use the optional context parameter for escalation/stall detection. However, it does not explicitly mention alternatives or when-not-to-use scenarios, so it lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_response_qualityA
Score a response across four quality dimensions: substance, specificity, hedge avoidance, and structure.
REQUIRED INPUT FORMAT — copy this structure exactly: {"response_text":"The full text of the response you want to evaluate for quality. It should be at least 10 characters.","claims":["Optional array of explicit claims"],"evidence":["Optional array of evidence items"]}
Dimensions:
substance_score: Shannon entropy on word frequencies (lexical diversity)
specificity_score: Density of concrete, quantitative markers
hedge_density: Proportion of hedging language (lower is better)
structure_score: Presence of claim->evidence->conclusion pattern
overall_score: Weighted average (substance 0.3, specificity 0.3, 1-hedge 0.2, structure 0.2)
Returns the weakest dimension with targeted improvement advice.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | No | Optional explicit claims to check for | |
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. | |
| evidence | No | Optional evidence items to check for | |
| response_text | Yes | The response text to evaluate (min 10 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It thoroughly explains the scoring dimensions, the weighting formula, and specifically states that it 'Returns the weakest dimension with targeted improvement advice.' It also discloses the optional use of context for escalation and stall detection, leaving no ambiguity about tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. The required input format is presented in a clear code block, followed by concise bullet-like explanations of dimensions and weighting, and a closing note on optional context. Every section earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description appropriately explains the return value ('Returns the weakest dimension with targeted improvement advice'). It also covers all necessary behavior, including the scoring method and optional iterative context, making the tool fully understandable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds considerable meaning beyond the schema. It provides the exact required input format as a copyable JSON structure, clarifies that 'claims' and 'evidence' are optional, and explains how the 'context' parameter enables escalation and stall detection. This goes far beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Score a response across four quality dimensions: substance, specificity, hedge avoidance, and structure.' This clearly differentiates it from sibling tools that validate confidence, reasoning chains, or numeric claims by focusing on overall response quality across defined dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining what the tool scores and mentions optional context for iterative enforcement, but it does not explicitly state when to use this tool versus alternative validation tools, nor does it provide when-not-to-use guidance. The context paragraph hints at iterative workflows but lacks direct alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_confidenceA
Check whether your claimed confidence is mathematically supported by your assumptions.
REQUIRED INPUT FORMAT — copy this structure exactly: {"assumptions":[{"description":"Redis will respond within 50ms under normal load","confidence":0.85,"falsification_condition":"Fails when Redis response time exceeds 50ms for >1% of requests in a 5-minute window"}],"response_text":"The full text of the response whose confidence you are validating"}
Each assumption needs: description, confidence (0.0-1.0), falsification_condition. If you cannot state a falsification_condition, set confidence to 0.3 or below.
Computes dependency-weighted honest confidence ceiling. Flags inflation when claimed confidence exceeds ceiling by >0.15. Checks falsifiability of stated conditions.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. | |
| assumptions | Yes | Array of at least 1 assumption | |
| response_text | Yes | The response text being validated (min 10 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It explicitly discloses the algorithm (dependency-weighted ceiling), the inflation threshold (>0.15), the falsifiability check, and the rule about confidence ≤0.3 when no falsification condition exists. This is highly transparent and goes beyond a simple operation summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured and front-loaded with the purpose. The required input format example is somewhat long but earns its place by reducing ambiguity. Every section serves a distinct role (purpose, input format, rule, algorithm, optional context). Slightly verbose due to the JSON example, but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should clarify return values. It describes the behavior (computing ceiling, flagging inflation) but does not explicitly state the output format. However, the algorithm description makes the output inferable, and the parameter schema is fully covered. The optional context for iterative enforcement is also explained at a high level, making it complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra semantic value by providing a concrete JSON example showing the exact structure of assumptions and response_text, and by adding a constraint that falsification_condition is mandatory unless confidence is set to ≤0.3. This goes beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Check whether your claimed confidence is mathematically supported by your assumptions.' It also explains the core function (computes dependency-weighted confidence ceiling, flags inflation, checks falsifiability), which distinguishes it from sibling tools that focus on reasoning chains, numeric claims, or overall quality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: validate a confidence claim against explicit assumptions with falsification conditions. It provides a required input format and a rule for when to lower confidence (if no falsification condition, set ≤0.3). No exclusions or comparisons to alternatives are given, but the guidance is clear enough to know when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_reasoning_chainA
Map your reasoning to a directed graph and check it for logical errors: circular reasoning, unsupported conclusions, and orphaned claims.
REQUIRED INPUT FORMAT — copy this structure exactly: {"nodes":[{"id":"c1","label":"The API latency is acceptable","type":"claim"},{"id":"e1","label":"p99 benchmark shows 180ms","type":"evidence"},{"id":"cn1","label":"We should use this service","type":"conclusion"}],"edges":[{"from":"e1","to":"c1","relation":"supports"},{"from":"c1","to":"cn1","relation":"implies"}]}
Node types: "claim" | "evidence" | "conclusion" | "assumption" Edge relations: "supports" | "implies" | "contradicts" | "requires"
Returns: cycles found, orphaned conclusions, grounding_score (evidence-to-conclusion reachability), and enforcement results.
Optionally pass "context" with prior iteration data for escalation and stall detection.
| Name | Required | Description | Default |
|---|---|---|---|
| edges | Yes | Directed edges between nodes | |
| nodes | Yes | Graph nodes representing claims, evidence, conclusions, or assumptions | |
| context | No | Optional caller-provided context for iterative enforcement. Include prior failure counts, iteration history, and previous response data to enable escalation and stall detection. Omit for one-shot usage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it lists the returned analysis (cycles, orphaned conclusions, grounding_score, enforcement results) and explains that passing context enables escalation and stall detection. It doesn't detail the exact output structure or error handling, but the behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description opens with the core purpose and then organizes required input, returns, and optional context. The JSON example is long but essential for a graph-shaped input. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists all return categories and explains the optional context parameter for iterative use. It could specify the shape of 'enforcement results' more concretely, but overall it covers the tool's complexity effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters extensively (100% coverage), but the description adds a concrete JSON example and clarifies node types and edge relations beyond the schema enums. It also explains the optional context's role, adding meaning beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line clearly identifies the action ('Map your reasoning to a directed graph and check it for logical errors') and specifies the error types detected (circular reasoning, unsupported conclusions, orphaned claims). This is a precise verb+resource that distinguishes it from sibling tools focused on confidence or arithmetic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets clear context for use: validating reasoning chains by converting them into a directed graph. It does not explicitly name alternatives or exclusions, but the focused purpose and input format make the intended usage clear. A slight deduction for not addressing when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_arithmeticA
Verify that a claimed arithmetic result matches the actual computation. Supports: sum, weighted_average, percentage, growth, product.
REQUIRED INPUT FORMAT — copy this structure exactly: {"claim_type":"weighted_average","values":[100,80,60],"weights":[0.5,0.3,0.2],"claimed_result":84}
Claim types and required fields:
"sum": values[], claimed_result
"weighted_average": values[], weights[], claimed_result
"percentage": part, whole, claimed_result
"growth": values[] (principal), rate, periods, claimed_result
"product": values[], claimed_result
Strict by default — matches to 2 decimal places. Optional "tolerance" for relative tolerance.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Numerator for "percentage" claim type | |
| rate | No | Growth rate for "growth" claim type | |
| whole | No | Denominator for "percentage" claim type | |
| values | No | Input values (for sum: addends, for growth: [principal], etc.) | |
| periods | No | Number of periods for "growth" claim type | |
| weights | No | Weights for weighted_average (same length as values) | |
| tolerance | No | Optional relative tolerance (e.g., 0.01 for 1%). Default: strict 2-decimal match. | |
| claim_type | Yes | Type of arithmetic claim to verify | |
| claimed_result | Yes | The result being verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description discloses key behavioral traits: strict default matching to 2 decimal places and the optional 'tolerance' parameter for relative tolerance. It does not mention return format or error behavior, but the disclosed details are valuable and go beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear example, a bulleted list of claim types and required fields, and concise statements about default strictness and tolerance. Every sentence contributes necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, 5 claim types), the description covers supported operations, required fields per type, and matching behavior. The only notable omission is the return value/output format, but the description is otherwise complete enough for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds significant value by specifying which fields are required for each claim_type and providing a concrete example. This clarifies parameter usage beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Verify that a claimed arithmetic result matches the actual computation.' It lists specific supported claim types (sum, weighted_average, percentage, growth, product), which distinguishes it from sibling tools like check_numeric_claims or validate_confidence that focus on broader validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on how to structure inputs for each claim type, including a required JSON format and per-type field requirements. It does not explicitly contrast with sibling tools, but it offers clear context on when to use this tool (for verifying arithmetic claims) and how to construct calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0-beta.3- First observed
check_numeric_claims - First observed
check_plan_validity - First observed
detect_concurrency_patterns - First observed
detect_drift - First observed
evaluate_tradeoffs - First observed
score_response_quality - First observed
validate_confidence - First observed
validate_reasoning_chain - First observed
verify_arithmetic
TDQS
Each tool serves a distinct validation purpose, but check_numeric_claims and verify_arithmetic both perform arithmetic verification, which could cause misselection. Their input formats differ enough to clarify, but slight overlap remains.
All tool names follow a consistent verb_noun snake_case pattern (validate_*, check_*, detect_*, evaluate_*, score_*, verify_*). No mixed conventions or ambiguous verbs.
With 9 tools, the server is well-scoped for a validation/analysis toolkit. Each tool covers a distinct aspect (confidence, reasoning, numbers, drift, tradeoffs, plans, quality, arithmetic, concurrency) without redundancy or excess.
The tool surface provides comprehensive coverage for the apparent domain of cognitive validation and analysis. It handles confidence checking, logical reasoning, numeric integrity, sequence drift, decision analysis, plan structure, response quality, arithmetic verification, and concurrency hazards. No critical dead ends or missing operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP-native AI evaluation: rubric audits, eval suites, and proof reports for AI/LLM output.
33 tools that make AI write, implement, and verify intent against explicit, testable constraints.
49 deterministic tools for text integrity, agent control, and contextual quality evidence.
7 free tools: MCP health scans, AI-readiness scores, llms.txt generator, glossary, indexes.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceA quality-first multi-agent reasoning framework with fractal verification, adversarial red-teaming, and self-audit pipelines, providing deterministic MCP tools for complex analysis tasks.1-
- AlicenseCqualityDmaintenanceAn MCP server that guides QA and verification processes by breaking down tasks into manageable steps and providing LLM-driven, confidence-scored tool recommendations.1186MIT
- AlicenseNot gradedqualityBmaintenanceA deterministic verification gate for MCP clients that independently checks model outputs against evidence, contradictions, calibration, and provenance without relying on LLM self-assessment.1MIT
- AlicenseNot gradedqualityBmaintenanceThe first MCP server that verifies AI outputs in real-time, ensuring every LLM response is correct, complete, and reliable before it reaches your editor.316Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/justguy/Critical-Thinking-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server