Jev MCP Proxy
Click on "Deploy 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., "@Jev MCP ProxyEvaluate this error message for incident severity"
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.
Jev MCP Proxy
A high-performance Model Context Protocol (MCP) proxy server that routes System One evaluation requests from AI agent skills directly to TypeSafe AI's Jev model.
Background: System One & Jev
As introduced by TypeSafe AI in Introducing System One Models & Jev, System One models represent a new class of frontier AI designed for automation within code. Rather than generating conversational strings token-by-token, Jev takes program state and answers typed questions in parallel with calibrated probabilities.
Fast & Hardware-Aware: 70ms–500ms end-to-end response time.
Typed Outputs: Strictly evaluates against defined rubrics (no string hallucinations or schema mismatches).
Calibrated Uncertainty: Communicates exact confidence scores and probabilities.
This MCP server acts as the dedicated router between agent skills (in Google Antigravity, Claude Code, Cursor, etc.) and Jev.
┌─────────────────────────────────────────────────────────────┐
│ Agent Platform │
│ (Google Antigravity / Claude Code) │
│ │
│ ┌──────────────────┐ ┌────────────────────┐ │
│ │ Routing Skill │ │ Moderation Skill │ │
│ └────────┬─────────┘ └─────────┬──────────┘ │
└────────────┼─────────────────────────────────┼──────────────┘
│ MCP Tools │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Jev MCP Proxy Server │
│ (jev_evaluate, jev_choice, jev_noul, jev_score) │
│ │
│ - JSON-RPC stdio transport │
│ - Auto-retries with exponential backoff on 429 & 529 │
│ - Stderr request tracing & latency measurement │
└──────────────────────────────┬──────────────────────────────┘
│ HTTPS / Bearer Token
▼
┌─────────────────────────────────────────────────────────────┐
│ TypeSafe AI Jev API │
│ (https://api.typesafe.ai/v1/systemone) │
└─────────────────────────────────────────────────────────────┘Related MCP server: jev-mcp
Features
Lean & Focused: The only functionality of this MCP server is to route requests to Jev when skills need them.
Full Parallel Evaluation:
jev_evaluateallows evaluating arbitrary state against multiple typed questions in a single round-trip.Convenience Tool Shortcuts: High-level tools (
jev_choice,jev_noul,jev_score) for common skill operations.Resilience: Automatic retry logic with exponential backoff for HTTP
429(Rate Limit) and529(Service Overloaded).Live Tracing: Emits structured timing, token usage, and status traces directly to
stderr(visible in MCP host logs without interfering with JSON-RPC over stdout).
Exposed MCP Tools
1. jev_evaluate
Primary batch router for TypeSafe AI Jev. Evaluates state (text or structured data) against multiple typed questions simultaneously.
Parameters:
state(string | object | array, required): The application state, document, log, or conversation context to evaluate.questions(object, required): Dictionary of question IDs mapping to question definitions.type:"noul"|"choice"|"score"instructions: Prompt or criteria instructions.criteria: Required forchoice(map of options to descriptions) andscore(list of level strings). Optional fornoul.
model(string, optional): Jev model version (default:"jev-latest").api_key(string, optional): Override forTYPESAFE_API_KEY.
Example:
{
"state": "The user reported: Database pool connection timeout after 30s in checkout service.",
"questions": {
"is_incident": {
"type": "noul",
"instructions": "Does this indicate a production incident?"
},
"service_area": {
"type": "choice",
"instructions": "Which domain team owns this?",
"criteria": {
"database": "Database servers and connection pooling",
"billing": "Checkout, credit cards, payment logic",
"frontend": "UI buttons and rendering"
}
}
}
}2. jev_choice
Categorical classification shortcut. Selects one option from a defined set, returning the selected choice, confidence score, and full probability distribution.
Parameters:
state(string | object | array): Context to evaluate.instructions(string | object | array): What the model should decide.criteria(object): Dictionary mapping option keys to descriptive rubrics.model(string, optional): Default"jev-latest".question_id(string, optional): Default"choice".
Example Response:
{
"choice": "database",
"confidence": 0.88,
"probabilities": {
"database": 0.88,
"billing": 0.10,
"frontend": 0.02
},
"usage": { "input_tokens": 140, "output_tokens": 25 }
}3. jev_noul
Binary probability shortcut. Evaluates a yes/no question and returns the calibrated probability ($0.0 \le P \le 1.0$) that the statement is true.
Parameters:
state(string | object | array): Context to evaluate.instructions(string | object | array): The yes/no question.criteria(object, optional): Optional definitions for{"true": "...", "false": "..."}.
Example Response:
{
"probability": 0.95,
"is_likely": true,
"usage": { "input_tokens": 98, "output_tokens": 12 }
}4. jev_score
Rubric rating shortcut. Rates state across an ordered rubric of at least two descriptive levels, returning a weighted score and confidence.
Parameters:
state(string | object | array): Context to evaluate.instructions(string | object | array): Rating criteria.criteria(arrayof strings): Ordered list of descriptive levels (e.g.["Low", "Medium", "High", "Critical"]).
Example Response:
{
"score": 2.8,
"confidence": 0.84,
"legend": { "0": "Low", "1": "Medium", "2": "High", "3": "Critical" },
"probabilities": { "0": 0.0, "1": 0.05, "2": 0.15, "3": 0.80 }
}Installation & Setup
Prerequisites
Python 3.10+
uv(recommended) orpip
git clone https://github.com/altregubov/jev-antigravity-mcp.git
cd jev-antigravity-mcp
uv syncEnvironment Variables
TYPESAFE_API_KEY: Your API key from the TypeSafe AI Console.TYPESAFE_BASE_URL: (Optional) Custom API endpoint (default:https://api.typesafe.ai/v1/systemone).JEV_DEBUG: Set to"1"(default) to log request traces tostderr.
Configuration
Google Antigravity 2.0
Option A: Zero-Install from GitHub via uvx (Recommended)
No local repository cloning needed. Antigravity will automatically fetch and run the server in an isolated environment.
Add the following to your global Antigravity MCP configuration (~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"jev-proxy": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/altregubov/jev-antigravity-mcp",
"jev-mcp"
],
"env": {
"TYPESAFE_API_KEY": "YOUR_TYPESAFE_API_KEY"
}
}
}
}Option B: Via the Antigravity 2.0 Desktop UI
Open the Antigravity 2.0 desktop app.
In the left-hand sidebar, click Skills & Customizations (or click the
...menu in the top-right $\rightarrow$ MCP Servers).Click Add MCP Server (or +).
Configure as Stdio Transport:
Name:
jev-proxyCommand:
uvxArguments:
--from git+https://github.com/altregubov/jev-antigravity-mcp jev-mcpEnvironment Variables:
TYPESAFE_API_KEY:YOUR_TYPESAFE_API_KEY
Click Save & Connect.
Option C: Local Development / Cloned Repository
If you cloned the repository locally:
{
"mcpServers": {
"jev-proxy": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/jev-antigravity-mcp",
"jev-mcp"
],
"env": {
"TYPESAFE_API_KEY": "YOUR_TYPESAFE_API_KEY"
}
}
}
}Note: After adding the server, start a New Conversation or click Refresh in Skills & Customizations to mount the tools (
jev_evaluate,jev_choice,jev_noul,jev_score).
Claude Code / Cursor
Add to your Claude Code or Cursor MCP configuration:
{
"mcpServers": {
"jev-proxy": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/jev-antigravity-mcp",
"jev-mcp"
],
"env": {
"TYPESAFE_API_KEY": "YOUR_TYPESAFE_API_KEY"
}
}
}
}Tracing and Diagnostics
The proxy logs structured traces to stderr without interfering with the JSON-RPC communication on stdout:
[17:45:03] [jev_proxy] INFO: --> Routing request to JEV: POST https://api.typesafe.ai/v1/systemone | model=jev-latest | questions=['is_incident', 'service_area']
[17:45:04] [jev_proxy] INFO: <-- 200 OK from JEV in 184.2ms | model=jev-1.13.0 | tokens(in=320, out=45)To see complete HTTP wire traces (request headers, connection pools, raw bytes):
HTTPX_LOG_LEVEL=trace uv run jev-mcpRunning Tests
The test suite covers client routing, question shortcuts, error handling (401, 422), rate limit backoff retries, and stdio JSON-RPC handshakes:
uv run pytestLicense
MIT License. See LICENSE for details.
Available Tools
4 toolsjev_choiceC
Route a single Choice question to Jev. Categorizes or selects one option from a defined rubric, returning the selected choice, confidence score, and full probability distribution.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | jev-latest | |
| state | Yes | ||
| api_key | No | ||
| criteria | Yes | ||
| question_id | No | choice | |
| instructions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It does mention the return format (choice, confidence, probability distribution), which is useful, but it omits critical context such as whether the tool has side effects, requires authentication (api_key is a parameter), has rate limits, or is read-only. The behavior is only partially described.
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 two sentences long, with the purpose front-loaded and no unnecessary detail. It efficiently conveys the core action and expected output. Slight deduction for not providing any usage context, but the structure itself is clean and focused.
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?
For a tool with 6 parameters, nested objects (state, criteria), and an output schema, the description is incomplete. It does not explain how to structure state or criteria, when to override the model, or how to supply the api_key. While the output schema covers return values, the input construction is left ambiguous, so an agent would struggle to call it 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 description coverage is 0%, so the description must compensate by explaining parameters. It references a 'defined rubric' (likely criteria) and the act of categorizing, but does not explain the roles of state, instructions, model, api_key, or question_id. This leaves most parameters undocumented, making it hard for an agent to construct valid arguments.
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 routes a single Choice question to Jev and performs categorization/selection from a rubric, with explicit output (choice, confidence, probability distribution). However, it does not explicitly differentiate from sibling tools like jev_score or jev_evaluate, leaving the distinction implied by the name rather than stated.
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?
There is no guidance on when to use this tool versus its siblings. The description only says what it does, not when it is appropriate or when to avoid it. No alternatives or exclusions are mentioned, so an agent cannot decide between jev_choice and similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jev_evaluateA
Primary proxy router for TypeSafe AI Jev. Evaluates unstructured or structured state against multiple typed questions (noul, choice, score) in parallel. Returns answers with calibrated probabilities, confidence scores, and token usage.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | jev-latest | |
| state | Yes | ||
| api_key | No | ||
| questions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses parallelism, input flexibility, and return contents (calibrated probabilities, confidence scores, token usage), but does not address safety/mutation, auth, or error behavior. Parallel evaluation and return details are useful but not a full behavioral profile.
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?
Three short sentences front-load the router role, the operation, the input types, and the output. Every sentence adds information; no filler or repetition of schema titles.
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 gives a competent overview for selection and basic invocation, but the tool is a multi-question router with nested input and no annotations. It omits how individual typed questions are structured and does not mention credential/model parameters, so an agent is not fully equipped to call it 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 description coverage is 0%, so the description must add meaning. It clarifies that 'state' may be unstructured or structured and that 'questions' are typed evaluation questions, but it does not explain 'model' or 'api_key' or the expected shape of a question object.
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 states a specific verb ('evaluates'), a resource ('unstructured or structured state'), and a distinguishing scope ('multiple typed questions (noul, choice, score) in parallel'). This clearly separates it from the single-question sibling 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?
It is identified as the primary proxy router, and 'multiple' plus 'in parallel' signal when to prefer it over the individual typed tools. It does not explicitly state when not to use it or name those tools as alternatives, 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_noulB
Route a single Noul (yes/no) question to Jev. Returns the calibrated probability (0.0 to 1.0) that the answer is yes, suitable for confidence gating and binary routing.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | jev-latest | |
| state | Yes | ||
| api_key | No | ||
| criteria | No | ||
| question_id | No | noul | |
| instructions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the key output behavior: a calibrated probability between 0.0 and 1.0. It does not, however, mention that the api_key parameter implies an external service call — with attendant auth, cost, and network-failure implications — nor does it disclose error behavior, latency, or whether the call is idempotent.
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?
A single tightly-worded sentence front-loads the purpose and follows with the return contract and use case. Every clause earns its place and there is zero filler or 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?
Although an output schema exists (so return values need not be spelled out), the input side is badly under-specified: two required polymorphic parameters with no guidance, no annotation safety profile, and sibling tools that could be confused with it. An agent receiving this definition cannot confidently construct a correct call to state and instructions.
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 0%, so the description must compensate for six undocumented parameters — but it explains none of them. The required params state and instructions are polymorphic (string/object/array) and the agent is left guessing what content belongs in each; criteria, model, question_id, and api_key are likewise unexplained. The description only covers tool-level purpose, not how to populate the arguments.
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 states a specific verb and resource: 'Route a single Noul (yes/no) question to Jev' and defines the output precisely as 'the calibrated probability (0.0 to 1.0) that the answer is yes.' This clearly distinguishes it from the sibling set (evaluate/choice/score) by its yes/no-with-probability nature, though it never names the siblings explicitly.
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 phrase 'suitable for confidence gating and binary routing' gives useful implied usage context, signaling this is a decision/threshold tool rather than a free-form evaluation. However, it offers no explicit when-to-use versus when-not-to-use guidance against the siblings jev_evaluate, jev_choice, and jev_score, leaving the selection logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jev_scoreB
Route a single Score question to Jev. Rates the input along an ordered rubric of at least two descriptive levels, returning a weighted score and confidence.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | jev-latest | |
| state | Yes | ||
| api_key | No | ||
| criteria | Yes | ||
| question_id | No | score | |
| instructions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does add useful behavior: the input is rated along an ordered rubric of at least two descriptive levels datapoints and the result includes a weighted score and confidence. However, it omits important behavioral context such as whether an API key is required, how the weighting is determined, what confidence means, and failure/error 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 two sentences with no filler. Every phrase earns its place: the resource, the routing action, the rubric constraint, and the returned values. It is tight, front-loaded, and quickly scannable.
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?
Although an output schema is presentasi and the return values are partially described, the description is incomplete for a tool with six parameters and three required fields. The agent still lacks enough detail to construct valid calls, especially for the required instructions and criteria, and receives no guidance about sibling distinctions. The overall context is too sparse for reliable invocation.
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 0%, so the description must compensate for six undocumented parameters. The terms 'input' and 'ordered rubric' vaguely map to state and criteria, but neither required parameters such as instructions and criteria nor optional ones like model, api_key, and question_id are explicitly explained. The description adds only a thin layer of meaning beyond the raw 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 uses specific verbs ('Route', 'Rates') and identifies a concrete resource ('a single Score question'), a scoring mechanism ('ordered rubric'), and the output ('weighted score and confidence'). It implicitly separates this tool from siblings like jev_choice and jev_evaluate by focusing on rubric-based scoring, but it never names or contrasts them explicitly.
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 phrase 'a single Score question' hints at a narrow use case, but the description gives no explicit guidance on when to choose this tool over jev_evaluate, jev_choice, or jev_noul. It does not state conditions, exclusions, or alternatives, leaving the agent to infer the appropriate context.
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.
4 tool updates
v0.1.0- First observed
jev_choice - First observed
jev_evaluate - First observed
jev_noul - First observed
jev_score
TDQS
Scored across 4 tools
jev_evaluate is clearly the multi-question router, while jev_choice, jev_noul, and jev_score each target a distinct question type. There is minor potential overlap because a single question could be sent through either jev_evaluate or the specific single-type tool, but the descriptions make the intended use clear.
All tools share the consistent jev_ prefix and lowercase snake_case style, which makes them recognizable as a family. However, jev_evaluate uses a verb while jev_choice, jev_noul, and jev_score use noun-like type names, so the action pattern is not perfectly uniform.
Four tools is a well-scoped surface for this proxy: one aggregate router plus one tool for each supported question type. There is no redundancy or unnecessary bloat.
The tool set fully covers the apparent domain: the three question types (noul, choice, score) are each directly accessible, and jev_evaluate provides the multi-question parallel path. No obvious missing lifecycle or operational tools are needed for a stateless evaluation service.
Maintenance
Related MCP Connectors
Deterministic contextual decision arbitration and action routing for autonomous software. Takes current state, context, or intent plus caller-supplied candidate actions, state transitions, routes, refusals, escalations, tools, or models and returns a deterministic ordered candidate field. Also provides persistent machine representations for memory, retrieval, indexing, and downstream coherence measurement.
Endpoint reliability and evidence checks for autonomous software agents.
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
Deterministic reasoning stack for AI agents: simulate, decide & compute, plus cross-domain tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to call TypeSafe's JEV classifier and receive structured, typed judgments with probabilities for binary, choice, and scoring questions.MIT
- AlicenseAqualityBmaintenanceProvides coding agents and CI with a typed decision layer that sends bounded state and questions to Jev, then returns deterministic actions for review, risk assessment, requirement checks, and verification.9MIT
- AlicenseAqualityBmaintenanceEnables frontier coding agents to delegate routine probabilistic judgments to TypeSafe Jev, providing calibrated triage signals for failures, attempts, completion, context ranking, findings, risk, and generic evidence-grounded questions.7MIT
- AlicenseAqualityAmaintenanceEnables agents to get fast, calibrated probabilistic answers from Jev (Typesafe AI) to yes/no, scale, or choice questions about provided material, without using a generative model.1MIT