Skip to main content
Glama
README.md
# 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

A4.2/5.0

Scored across 5 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues