Skip to main content
Glama

jev-mcp

MCP server that puts TypeSafe Jev on the coding loop in Cursor, Codex, and any other MCP client.

Jev is not a chatbot. It is a System One evaluation model: you send state plus typed Choice / Score / Noul questions, and it returns probabilities and confidence in a few hundred milliseconds. It cannot write code. Cursor and Codex still generate and edit; this server is the cheap decision layer you can call on every turn.

Questions in one request run in parallel. That is the cheap swarm: many atomic judgments, then policy in code.

Documentation

Doc

Contents

Architecture

Process model, source map, confidence, limits

Tools

Arguments, outputs, and when to call each tool

Install

Cursor, Codex, GitHub publish, Windows D:\ checkout

Configuration

Env vars, thresholds, tests

Agent skill

Instructions the host agent should follow

AGENTS.md

Short pointer for Cursor / Codex

Related MCP server: Sensory-Grounding MCP

Tools

Tool

Use when

jev_coding_loop

Before a frontier retry/stop/model-tier decision

jev_review

Before declaring a patch done

jev_verify

Claims vs evidence (PR text, diffs, docs)

jev_screen

Untrusted paste/fetch, before the agent reads it

jev_rank

Rank files, symbols, errors, or skills (you pass candidates)

jev_evaluate

Escape hatch: raw System One questions

Every tool returns typed answers, token usage, and action: auto | review | escalate. Thresholds are named constants in code, overridable per call.

Question packs are also MCP resources at jev://packs/{coding-loop,review,verify,screen,rank}.

Quick start

Node 20+.

npm install
npm run build
node dist/index.js doctor

Get a TypeSafe key from console.typesafe.ai/settings/keys. Without a key, set JEV_MCP_MOCK=1 for a deterministic local judge (tests and demos only).

Cursor — copy examples/cursor.mcp.json into .cursor/mcp.json and point args at this repo’s dist/index.js (absolute path). Pass the key in env. Copy skills/jev-mcp/SKILL.md into the project.

Codex

codex mcp add jev --env TYPESAFE_API_KEY=ts_... -- node /absolute/path/to/jev-mcp/dist/index.js

Windows D:\ checkout (after the GitHub remote exists):

powershell -ExecutionPolicy Bypass -File scripts\checkout-d-drive.ps1 -RepoUrl git@github.com:<you>/jev-mcp.git

Full host-specific steps: docs/install.md.

CLI

node dist/index.js
node dist/index.js doctor
JEV_MCP_MOCK=1 node dist/index.js eval --json '{
  "state": "Help, payouts have been failing for 3 days. ASAP.",
  "questions": {
    "urgent": { "type": "noul", "instructions": "Is this urgent?" }
  }
}'

Environment

Variable

Role

TYPESAFE_API_KEY

Live TypeSafe API

JEV_MCP_MODEL

Default jev-latest

TYPESAFE_BASE_URL

Optional API root

JEV_MCP_MOCK

1 = local deterministic judge

JEV_MCP_AUTO_ACCEPT

Default 0.8

JEV_MCP_REVIEW_AT

Default 0.5

JEV_MCP_BLOCK_AT

Default 0.75 (screen)

No key and no mock: tools return a clear error. They do not hang.

Limits (from TypeSafe, enforced here)

  • 64k tokens for all state + questions; 32k for state + the longest question. Oversized state is truncated.

  • Rank: 250 candidates per Jev call (texts capped at 2,000 characters). Larger lists are chunked, then winners are re-ranked.

  • Arithmetic, counts, and date math stay in TypeScript. Jev is not a calculator and does not generate text.

Develop

npm test
npm run typecheck

Live API tests: TYPESAFE_API_KEY=ts_... npm test

What this is not

  • Not a filesystem or shell MCP (the host already has those)

  • Not a swarm of chat models

  • Not a repo indexer (jev_rank only ranks candidates you pass in)

Tool

Use when

jev_coding_loop

Before a frontier retry/stop/model-tier decision

jev_review

Before declaring a patch done

jev_verify

Claims vs evidence (PR text, diffs, docs)

jev_screen

Untrusted paste/fetch, before the agent reads it

jev_rank

Rank files, symbols, errors, or skills (you pass candidates)

jev_evaluate

Escape hatch: raw System One questions

Every tool returns typed answers, token usage, and action: auto | review | escalate. Thresholds are named constants in code, overridable per call.

Question packs are also MCP resources at jev://packs/{coding-loop,review,verify,screen,rank}.

Install

Node 20+. Build this repo:

npm install
npm run build

Get a TypeSafe key from console.typesafe.ai/settings/keys. Without a key, set JEV_MCP_MOCK=1 for a deterministic local judge (tests and demos only).

Cursor

Copy examples/cursor.mcp.json into .cursor/mcp.json and point args at this repo’s dist/index.js (absolute path). Pass the key in env; some hosts drop inherited environment variables.

{
  "mcpServers": {
    "jev": {
      "command": "node",
      "args": ["/absolute/path/to/jev-mcp/dist/index.js"],
      "env": {
        "TYPESAFE_API_KEY": "ts_..."
      }
    }
  }
}

Copy skills/jev-mcp/SKILL.md into the project so the agent actually calls the tools.

Codex

npm run build
codex mcp add jev --env TYPESAFE_API_KEY=ts_... -- node /absolute/path/to/jev-mcp/dist/index.js

See examples/codex.config.toml. The same binary works with Claude Code, Amp, and other stdio MCP clients.

CLI

# stdio MCP (default)
node dist/index.js

# env / key / tiny ping
node dist/index.js doctor

# one-shot evaluate
JEV_MCP_MOCK=1 node dist/index.js eval --json '{
  "state": "Help, payouts have been failing for 3 days. ASAP.",
  "questions": {
    "urgent": { "type": "noul", "instructions": "Is this urgent?" }
  }
}'

Environment

Variable

Role

TYPESAFE_API_KEY

Live TypeSafe API

JEV_MCP_MODEL

Default jev-latest

TYPESAFE_BASE_URL

Optional API root

JEV_MCP_MOCK

1 = local deterministic judge

JEV_MCP_AUTO_ACCEPT

Default 0.8

JEV_MCP_REVIEW_AT

Default 0.5

JEV_MCP_BLOCK_AT

Default 0.75 (screen)

No key and no mock: tools return a clear error. They do not hang.

Limits (from TypeSafe, enforced here)

  • 64k tokens for all state + questions; 32k for state + the longest question. Oversized state is truncated.

  • Rank: 250 candidates per Jev call (texts capped at 2,000 characters). Larger lists are chunked, then winners are re-ranked.

  • Arithmetic, counts, and date math stay in TypeScript. Jev is not a calculator and does not generate text.

Develop

npm test          # mock tests; live e2e skipped without TYPESAFE_API_KEY
npm run typecheck

Live API tests:

TYPESAFE_API_KEY=ts_... npm test

What this is not

  • Not a filesystem or shell MCP (the host already has those)

  • Not a swarm of chat models

  • Not a repo indexer (jev_rank only ranks candidates you pass in)

Available Tools

6 tools
jev_coding_loopJev coding-loop routerA
Read-onlyIdempotent

Call before spending a frontier turn on retry/stop/model-tier. One Jev fan-out returns next (continue|retry|ask_user|stop), model_tier (cheap|standard|reasoning), risk, focus, and noul flags done_enough / needs_more_context / tests_likely_fail. Policy in code maps confidence to action auto|review|escalate. Does not edit files.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesWhat the coding agent is trying to do
modelNo
extrasNoOptional extra JSON fields included in Jev state
review_atNo
auto_acceptNo
observationYesCurrent turn: last diff, command output, test results, or blocker

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds 'Does not edit files,' which is consistent, and reveals additional behavior: the policy mapping from confidence to action (auto|review|escalate) and the exact output flags. This goes beyond the annotations, though it could be richer about side effects or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph, front-loaded with the usage trigger. It packs a lot of information about outputs and policy without excessive fluff. It is appropriately sized for a router tool with complex output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain the return values, which it does reasonably well by listing the fields and flags. However, it leaves the optional parameters unexplained and the policy mechanism vague ('Policy in code maps confidence to action'). For a tool that is meant to be called before a decision, an agent might need more context on how to interpret risk/focus or how the optional parameters affect behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%; the description does not compensate for the undocumented parameters (model, review_at, auto_accept). It explains the output structure but not the meaning of these optional inputs. For a tool with 6 parameters, the description should clarify what these fields do, especially since they are not described in the schema either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: a router to call before spending a frontier turn on retry/stop/model-tier. It lists the specific outputs (next, model_tier, risk, focus, flags) and the policy mapping, making the tool's role distinct from the sibling evaluation/review/verify/screen/rank tools, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear trigger: 'Call before spending a frontier turn on retry/stop/model-tier.' This gives an explicit condition for when to use the tool. It does not mention when not to use it or contrast with alternatives, but the context is specific and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jev_evaluateEvaluate with JevA
Read-onlyIdempotent

Escape hatch: send shared state plus named noul/choice/score questions to TypeSafe Jev. Use when no other jev_* recipe fits. Jev does not write code or prose. Questions in one call run in parallel. Returns typed answers, probabilities, confidence, usage, and action auto|review|escalate.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoOverride, default jev-latest
stateYesShared state to judge: text or JSON
questionsYesNamed noul, choice, and score questions evaluated in parallel

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the annotations: parallel execution of questions, the fact that Jev does not write code or prose, and the return fields (typed answers, probabilities, confidence, usage, action). Since annotations already declare readOnly, idempotent, and non-destructive, the description enriches the agent's understanding of side effects and execution model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with zero filler. It front-loads the purpose ('Escape hatch'), then gives the usage condition, a behavioral limitation, parallelism, and return summary. Every sentence earns its place and the structure is highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects and no output schema, the description provides a solid overview of what the tool returns (typed answers, probabilities, confidence, usage, action) and how it executes (parallel). It doesn't detail error cases or rate limits, but given the annotations already cover safety and the description covers the key behavior, it's reasonably complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all parameters, including the nested question structure. The description adds minimal extra semantic value beyond the schema (e.g., 'named' questions, parallel execution), but it doesn't clarify the 'criteria' field or provide additional guidance on constructing questions. Baseline 3 is appropriate given the schema's thoroughness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: send shared state plus noul/choice/score questions to TypeSafe Jev for evaluation. It explicitly differentiates from siblings by saying 'Use when no other jev_* recipe fits', giving an agent a clear discriminator without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit condition for when to use this tool ('when no other jev_* recipe fits') and states what Jev does not do ('does not write code or prose'), which sets expectations. This is a clear directive for selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jev_rankJev candidate rankerA
Read-onlyIdempotent

Rank files, symbols, errors, or skills against a plain-language query. No embeddings. One Choice over candidate ids plus a Noul that the top hit actually answers the query (so a forced winner cannot masquerade as a match). Max 250 candidates per Jev call; larger lists are chunked then re-ranked. Pass candidates in; this server does not index the repo.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
queryYesWhat you are looking for, in natural language
top_kNoHow many ranked candidates to return. Default 5.
candidatesYesCandidates to rank. More than 250 are chunked, then the winners are re-ranked.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only, open-world, idempotent, and non-destructive. The description adds meaningful behavior beyond that: no embeddings, a top-hit relevance check, a 250-candidate cap with chunking/reranking, and a stateless input-only design. The only blemish is the unclear 'Noul' wording, which hampers full comprehension.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but mostly efficient: every sentence contributes either an input requirement, an algorithmic trait, or a constraint. It is front-loaded with the main action. The awkward 'One Choice over candidate ids plus a Noul' phrase and unmarked technical jargon reduce readability slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a stateless ranker, the description covers the main operational concerns: candidate format, maximum count, chunking behavior, lack of repo indexing, and the query-scoring approach. It lacks an explicit description of the return value shape, and no output schema exists to fill that gap, but an agent can likely call the tool correctly with what is given.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (75%), so the schema carries most parameter meaning. The description does add useful context for 'query' ('plain-language') and 'candidates' (pass them in, max 250, chunked), but the 'model' parameter remains undocumented and no explanation of output fields is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Rank files, symbols, errors, or skills against a plain-language query.' It further distinguishes this tool from siblings by noting 'No embeddings' and 'Pass candidates in; this server does not index the repo.' The core purpose is unmistakable even before looking at the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use it: rank a supplied list of candidates against a query, and do not expect repo indexing. However, it never names alternative sibling tools or explicitly says when another tool would be better, leaving routing largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jev_reviewJev patch reviewA
Read-onlyIdempotent

Score a proposed diff against the request: correctness, spec-match, test-gap, blast-radius, plus noul safe_to_apply. Composite weights live in code. Call before declaring a fix done. Does not apply the patch.

ParametersJSON Schema
NameRequiredDescriptionDefault
diffYesProposed patch, file excerpt, or change summary
modelNo
testsNoTest output if any
requestYesWhat the user asked for
review_atNo
auto_acceptNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond those hints: it explicitly states the patch is not applied, that scoring criteria are used, and that composite weights are defined in code. This helps an agent understand side-effect-free, black-box behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core action and criteria. Each sentence earns its place: purpose, usage timing, and non-application. The typo 'noul safe_to_apply' and the vague 'composite weights live in code' slightly reduce clarity and polish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with no output schema, the description does not state what the tool returns (e.g., score, verdict, safe_to_apply value) and does not clarify the optional input parameters. It is adequate for deciding when to call it, but an agent invoking it may still be uncertain about the response shape and how to interpret review_at or auto_accept.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; request, diff, and tests have descriptions, and the description reinforces their roles ('diff against the request,' 'test-gap'). However, optional parameters like model, review_at, and auto_accept receive no meaningful semantic clarification in either the schema or the description, so the description only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Score a proposed diff against the request') and enumerates concrete review dimensions (correctness, spec-match, test-gap, blast-radius, safe_to_apply). The title and description clearly distinguish it as a review/safety gate rather than an apply or verify tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Call before declaring a fix done.' It also excludes a key non-behavior by saying the tool does not apply the patch. It does not name sibling alternatives or formal when-not-to-use conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jev_screenJev content screenA
Read-onlyIdempotent

Judge fetched or pasted text before the agent reads it: prompt-injection probability, substance, and optional relevance to purpose. Recommendation: pass|review|block|skip. Use on untrusted web pages, issues, and pastes. Not for first-party repo files.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesFetched or pasted text before the agent reads it
modelNo
purposeNoWhat the agent is trying to do; enables relevance and skip
block_atNo
review_atNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context by explaining what the tool evaluates (injection, substance, relevance) and the output recommendation. It does not contradict annotations and provides useful operational detail beyond the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first sentence states the main function and output, the second gives usage scope. It is front-loaded with the core purpose and contains no fluff. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters and no output schema, so the description must explain the expected return and any thresholds. It mentions the recommendation output but not the full output structure (e.g., whether it includes probability or substance scores). It also does not explain block_at and review_at parameters, which are essential for controlling the screening behavior. Given these gaps, the description is not fully complete for an agent to call it correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40% (text and purpose have descriptions, while model, block_at, and review_at do not). The description mentions 'fetched or pasted text' (text) and 'optional relevance to purpose' (purpose), adding some meaning. However, it does not explain block_at and review_at, which likely set thresholds for the recommendation. Since coverage is low, the description should compensate more, but it only partially does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: to judge fetched or pasted text for prompt-injection probability, substance, and optional relevance to purpose, and to produce a recommendation (pass|review|block|skip). It explicitly scopes usage to untrusted web pages, issues, and pastes, and excludes first-party repo files, which distinguishes it from sibling tools. The purpose is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: 'Use on untrusted web pages, issues, and pastes. Not for first-party repo files.' This tells the agent when to use the tool and when not to. It does not name alternative siblings directly, but the exclusion for repo files implies a different tool is appropriate for that case, which is adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jev_verifyJev claim verifierA
Read-onlyIdempotent

Check each claim against provided evidence (PR description, agent brief, docs, diffs). Returns per claim: verified|contradicted|unsupported, probabilities, confidence, and auto vs review. Prefer this over asking a chat model to 'double-check'.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
claimsYesFactual claims to check
evidenceYesSource text, or a list of {id, text} documents
auto_acceptNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/destructive hints with no contradiction. The description adds meaningful behavioral context beyond the annotations: the tri-state verdict (verified|contradicted|unsupported) aligns with and operationalizes the openWorldHint, and the 'auto vs review' distinction discloses that some verdicts are automated while others may require human judgment. It doesn't explain what triggers review, but adds real value over bare annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler: the first states the core action, the second specifies the return contract, and the third gives usage preference. The purpose is front-loaded and each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description correctly shoulders the burden of explaining return values, and it does so well with the verdict/probability/confidence taxonomy. The core workflow (required claims and evidence) is fully covered. The gaps are the optional parameters — model and auto_accept have no semantics in either the schema or description — but these are non-critical for a correct basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (claims and evidence are described, model and auto_accept are not), so the baseline is 3. The description adds practical semantics for evidence by listing concrete types (PR description, agent brief, docs, diffs) beyond the schema's generic 'Source text, or a list of {id, text} documents'. However, the meaning of model and auto_accept remains undocumented, so the description only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Check each claim against provided evidence') and enumerates the output contract (verified|contradicted|unsupported, probabilities, confidence, auto vs review), making the tool's function unambiguous. However, it does not explicitly distinguish itself from sibling tools like jev_review or jev_evaluate, and the 'prefer this over a chat model' alternative is not a named sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence offers a usage directive: prefer this tool over asking a chat model to 'double-check'. This gives an implicit when-to-use signal, but there are no explicit conditions, exclusions, or routing guidance to sibling tools (jev_review, jev_evaluate, jev_rank) that might overlap. The guidance is implied rather than systematic.

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.

  1. 6 tool updatesv0.1.0
    • First observedjev_coding_loop
    • First observedjev_evaluate
    • First observedjev_rank
    • First observedjev_review
    • First observedjev_screen
    • First observedjev_verify

TDQS

A4/5.0

Scored across 6 tools

Disambiguation4/5

Each recipe targets a distinct decision point (loop control, diff review, claim verification, text screening, candidate ranking), and `jev_evaluate` is explicitly scoped as an escape hatch rather than a competing operation. There is only a mild risk that agents reach for the generic evaluate tool instead of the specialized recipes.

Naming Consistency4/5

All tools share the lowercase `jev_` prefix and use underscores, which gives the set a clear visual pattern. However, the names mix imperative verbs (`review`, `verify`, `screen`, `rank`, `evaluate`) with one noun-style name (`coding_loop`), a minor consistency deviation.

Tool Count5/5

Six tools is a well-scoped size for a decision-support server. Each tool fills a distinct role with no apparent bloat or redundant utility.

Completeness5/5

The tool surface covers the major agent workflow decision points: whether to continue, whether to apply a diff, whether claims hold up, whether text is safe to read, and which candidates best match a query. The generic `jev_evaluate` fallback plus usage/action outputs prevents obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables agentic coding workflows in Claude Code through a multi-candidate patch evaluation loop that generates code variants, validates builds, scores results with mandatory vision testing, and automatically selects the best implementation.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to enforce spec-driven development and verify code before it is marked done, using six tools that catch invented APIs, scan for hallucinated content, check plugin conformance, sandbox-run tests, validate schemas, and record audit evidence.
    771 npm
    8
    PolyForm Noncommercial 1.0.0