Skip to content
echohello-devPublic

About

Minimal MCP server exposing TypeSafe/OpenRouter /api/alpha/decisions as five judgment tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

jev-mcp

Minimal MCP server exposing TypeSafe/OpenRouter /api/alpha/decisions as five judgment tools for coding agents.

Tools

Tool Purpose Returns
jev_verify Does the evidence support the claim? noul (0..1) + confidence
jev_classify Which label fits the state? choice + probabilities + confidence
jev_screen Relevance + risk for fetched content choice + score
jev_decide Pick from rich options with criteria choice + probabilities
jev_extract Detect named fields in a state per-field noul

Install (run)

bun install
bun run build

Register with an MCP client

OpenCode / Claude Code:

{
  "mcpServers": {
    "jev": {
      "command": "node",
      "args": ["/path/to/jev-mcp/dist/index.js"],
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      }
    }
  }
}

Or use TYPESAFE_API_KEY (TypeSafe direct, cheaper) instead of OPENROUTER_API_KEY.

The MCP client passes tool inputs as JSON; the server returns JSON text content plus isError: true when fail_on predicates match.

Wire example

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "jev_classify",
    "arguments": {
      "state": "I want to wash my car, the wash is 50m away",
      "choices": ["question", "command", "smalltalk", "info"]
    }
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"type\":\"choice\",\"choice\":\"info\",\"probabilities\":{\"info\":0.96,...},\"confidence\":0.94}"
      }
    ]
  }
}

Tool input contracts

See src/tools.ts for the JSON Schema for each tool. Highlights:

  • jev_verify — { claim, evidence, instructions?, fail_on?: "true"|"false", timeout_ms? }
  • jev_classify — { state, choices: string[], criteria?, instructions?, fail_on?, timeout_ms? }
  • jev_screen — { text, relevance_labels?, fail_on?: { relevance?, min_risk? }, timeout_ms? }
  • jev_decide — { state, options: Record<key, description>, instructions?, fail_on?, timeout_ms? }
  • jev_extract — { state, fields: string[], timeout_ms? }

fail_on predicates return isError: true (rather than silently passing) when matched, so agents see the warning and decide whether to proceed.

Design notes

  • Single-binary, zero runtime deps. Pure Bun stdlib + node:fs/promises.
  • Provider abstraction at the wire level (TypeSafe direct or OpenRouter via the /api/alpha/decisions endpoint). Routing picks TYPESAFE if set, otherwise OR.
  • No telemetry, no state across calls. Each tool call is independent.
  • Original implementation. Design intent informed only by the public MCP protocol and the public TypeSafe/OpenRouter API contracts.

License

MIT

About

Minimal MCP server exposing TypeSafe/OpenRouter /api/alpha/decisions as five judgment tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages