jev-mcp
# jev-mcp
An **MCP server** that gives any agent (Claude Code, Codex, Cursor, Pi, โฆ) fast, **typed,
calibrated decisions** from **Jev**, TypeSafe AI's *System One* model โ classify, score,
check yes/no, and gate risky tool calls, all as one API call under the hood.
> ๐งช **Try Jev free in your browser (no waitlist):** **[jevtypesafeai.com](https://jevtypesafeai.com)**
> Independent playground & guide. Not affiliated with TypeSafe AI.
Jev doesn't write text โ it reads your state and returns a **choice**, a **score**, or a
**probability** in 70โ500 ms, for ~$0.0004 a decision. That makes it a great "fuzzy `if`"
inside the agent loop: routing, guardrails, scoring, filtering. `jev-mcp` exposes that as
plain MCP tools your agent can call.
## Tools
| Tool | What it does |
|------|--------------|
| `jev_classify` | Pick one of labelled options (routing, categorization, intent) |
| `jev_score` | Rate the input on an ordered scale you define (risk, urgency, quality) |
| `jev_check` | Calibrated yes/no probability (gates, filters, guardrails) |
| `jev_gate` | Risk-screen an action before it runs โ `allow` / `confirm` / `block` |
| `jev_decide` | Full power: many typed questions in one round trip |
## Install
You need a Jev API key. Get one at [console.typesafe.ai](https://console.typesafe.ai), or use a
gateway (Vercel AI Gateway, OpenRouter, Cloudflare) and point `JEV_BASE_URL` at it.
Runs straight from GitHub with `npx` โ no clone, no build.
### Claude Code
```bash
claude mcp add jev -e TYPESAFE_API_KEY=your_key -- npx -y github:codaaiteam/jev-mcp
```
### Any MCP client (`.mcp.json` / config)
```json
{
"mcpServers": {
"jev": {
"command": "npx",
"args": ["-y", "github:codaaiteam/jev-mcp"],
"env": { "TYPESAFE_API_KEY": "your_key" }
}
}
}
```
That's it โ your agent now has `jev_classify`, `jev_score`, `jev_check`, `jev_gate`, `jev_decide`.
> Once this is on npm you can shorten `github:codaaiteam/jev-mcp` to just `jev-mcp`.
## Configuration
| Env | Default | Notes |
|-----|---------|-------|
| `TYPESAFE_API_KEY` | โ | Your Jev key (aliases: `JEV_API_KEY`, `JEV_KEY`). Required. |
| `JEV_BASE_URL` | `https://api.typesafe.ai/v1/systemone` | Override to route through a gateway. |
| `JEV_MODEL` | `jev-latest` | Pin a version (e.g. `jev-1.13.0`) in production. |
## Examples
**Guardrail a shell command before running it:**
```
jev_gate({
action: "rm -rf ./dist && aws s3 sync ./build s3://prod-assets --delete",
context: "agent is deploying a frontend build"
})
โ { "recommendation": "confirm", "risk_score": 2.8, "touches_prod": true, ... }
```
**Route a request to the right model:**
```
jev_classify({
state: "Refactor auth to multi-tenant SSO with SAML + SCIM, keep back-compat.",
instructions: "Which model tier should handle this?",
options: { fast: "trivial edits", balanced: "normal work", strong: "hard architecture" }
})
โ { "choice": "strong", "confidence": 0.99, "probabilities": { ... } }
```
**Check before auto-approving user content:**
```
jev_check({ state: "<user comment>", instructions: "Is this safe to auto-publish?" })
โ { "probability": 0.12, "likely": false }
```
## How it works
Every tool is a thin wrapper over one Jev call โ `state + typed questions โ typed answers`.
The value is in *where* you call it (the agent-loop hook) and *what* you ask. Because the
answer type is fixed by the request, Jev can't hallucinate a format or emit an invalid type.
## Links
- โถ๏ธ Free playground & guide: https://jevtypesafeai.com
- ๐ What is Jev: https://jevtypesafeai.com/what-is-jev
- ๐ API guide: https://jevtypesafeai.com/how-to-use
- ๐ Ecosystem & gateways: https://jevtypesafeai.com/ecosystem
- ๐ข Official: https://typesafe.ai ยท Docs: https://docs.typesafe.ai
- ๐ More projects: [awesome-jev](https://github.com/yibie/awesome-jev)
## License
MIT. "Jev", "System One" and "TypeSafe AI" belong to their respective owners.
TDQS
Scored across 5 tools
Each tool targets a distinct decision primitive: categorical selection, ordinal scoring, binary yes/no, action screening, and a combined multi-question call. The only mild ambiguity is that jev_decidee is a superset of the individual question types, and jev_checck and jev_gate both deal with safety-related decisions, but their outputs are clearly different.
All tools follow the same jev_<verb> convention with lowercase snake_case names and no mixed styles. The verb choice is consistent with each tool's single responsibility, making the set predictable.
Five tools is a well-scoped size for this server: four primitives plus one combined/everytive endpoint. Each tool earns its place and there is no padding or bloat.
The suite covers the visible decision types (choice, score, yes/no, gate) and the decide tool adds a batched path that also supports the noul type. There are no obvious dead ends or missing operations for the stated purpose.