Jevbridge

by tacticocc

ACP and MCP adapter that bridges TypeSafe Jev with any LLM for computer use and typed decisions. Supports configuration via environment variables for API keys and LLM selection.

Developer toolsstdio or Streamable HTTPCommunity

Repository-wide counts · Cached 2026-09-21

Overview

The Jevbridge MCP server is a publicly available project. Review the upstream repository for installation instructions, supported tools, compatibility, permissions, and current maintenance status.

Configuration

Configuration, transport, authentication, and runtime requirements vary by project. Open the repository before connecting and use the smallest set of credentials and permissions required.

Open the Jevbridge repository to read the latest documentation.

KEEP EXPLORING

Compare source, connection, and authentication details before choosing an implementation.

View the complete category

模型上下文协议服务器

modelcontextprotocol

Community

一组用于模型上下文协议(MCP)的参考实现,展示了对大型语言模型(LLM)工具和数据源的安全且受控的访问方式。

Context7 Platform - Up-to-date Code Docs For Any Prompt

upstash

Community

Context7 MCP server providing up-to-date, version-specific documentation and code examples for libraries, enabling coding agents to fetch accurate docs and code snippets. Requires an API key for higher rate limits, passed via CONTEXT7_API_KEY header.

Playwright MCP

Microsoft Corporation

Community

A Model Context Protocol (MCP) server that provides browser automation capabilities using Playwright. Enables LLMs to interact with web pages through structured accessibility snapshots, bypassing the need for screenshots or visually-tuned models.

AIHawk

feder-cr

Community

AIHawk is an anti detect browser and web browsing agent, open source, with an MCP server for coding agents: undetected, no captchas, no blocks. It requires an OpenRouter API key for the standalone web UI mode, which can be provided via the --openrouter-key flag or the OPENROUTER_API_KEY environment variable or a .env file in the running directory.

FROM THE SOURCE

Repository README

Build-time snapshot · Retrieved 2026-10-05

View original

Contributors Forks Stargazers Issues MIT License


Jevbridge logo

Jevbridge

ACP and MCP adapter that bridges TypeSafe Jev with any LLM.
Computer use and typed decisions alongside Codex, Claude, Grok, and OpenCode.

Explore the docs »

View Demo · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. MCP Server
  5. ACP Adapter
  6. Computer Use
  7. Roadmap
  8. Contributing
  9. License
  10. Contact
  11. Acknowledgments

About The Project

TypeSafe Jev is a System One model: unstructured state in, typed probabilistic decisions out. It does not generate text. That makes it a poor chatbot and an excellent function call for routing, gating, scoring, and computer-use action selection.

Jevbridge is the adapter that sits alongside the LLM you already run.

  • Native Jev when TYPESAFE_API_KEY is set.
  • Any LLM as System One when it is not — Codex, Claude, Grok, OpenCode, or a generic OpenAI-compatible endpoint.
  • ACP over stdio so Zed, JetBrains, and other Agent Client Protocol hosts can treat Jev as the decision sidecar for a generating model.
  • Confidence gates so a peaked distribution executes, a middling one confirms, and a destructive click does not go unsupervised.

The LLM writes the plan and the explanation. Jevbridge returns noul, choice, and score answers that software can branch on.

Home: tacticocc/Jevbridge.

(back to top)

Core Capabilities

  • Evaluate one state against mixed Choice, Score, and Noul questions.
  • Swap backends (jev | llm | heuristic | auto) without changing question shapes.
  • Confidence-gate tool calls and computer-use clicks (execute, confirm, escalate, abort).
  • Speak MCP (jev_decide, jev_gate, jev_computer_use) and ACP over stdio.
  • Ship recipes for support routing, destructive command gates, context keep/drop, and GUI next-action.
  • Run offline with the heuristic backend in tests and CI.

(back to top)

Built With

  • TypeScript
  • Node.js
  • TypeSafe
  • ACP

(back to top)

Getting Started

Jevbridge is a zero-dependency Node 22 library plus MCP and ACP stdio binaries. You do not need a TypeSafe key to try it: the heuristic backend and any OpenAI-compatible LLM both speak the same protocol.

Prerequisites

  • Node.js 22 or newer
  • Git
  • Optional: a TypeSafe API key
  • Optional: an LLM key (XAI_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, or OPENCODE_API_KEY)

Installation

  1. Clone the repo
    git clone https://github.com/tacticocc/Jevbridge.git
    cd Jevbridge
    
    The npm name is @tactico/jevbridge. After a release is published:
    npm install -g @tactico/jevbridge
    
  2. Install (no runtime npm dependencies)
    npm install
    
  3. Export keys you actually have. Native Jev is preferred; otherwise Jevbridge wraps your LLM.
    export TYPESAFE_API_KEY=ts_...
    export JEVBRIDGE_LLM=xai
    export XAI_API_KEY=xai-...
    
  4. Run a recipe without any network
    node --experimental-strip-types src/cli.ts eval support-route
    

(back to top)

Usage

Library

import { evaluate, gate, noul, choice, score } from "./src/index.ts";

const result = await evaluate({
  state: "I was charged twice for order A-104. Refund the duplicate today.",
  questions: {
    refund: noul("Does this request a refund?"),
    team: choice("Which team should handle this?", {
      billing: "Payments, invoices, refunds.",
      technical: "Bugs, outages, integrations.",
      other: "None of the above.",
    }),
    urgency: score("How urgent is this?", [
      "Can wait a week",
      "Handle today",
      "Blocking now",
    ]),
  },
  backend: "auto",
  jev: process.env.TYPESAFE_API_KEY
    ? { apiKey: process.env.TYPESAFE_API_KEY }
    : undefined,
});

const decision = gate(result.answers, { choiceId: "team" });
if (decision.action === "execute") {
  // branch on result.answers.team.choice
}

CLI

node --experimental-strip-types src/cli.ts recipes
node --experimental-strip-types src/cli.ts eval computer-use
node --experimental-strip-types src/cli.ts mcp
node --experimental-strip-types src/cli.ts acp

Or use the wrapper:

node bin/jevbridge.mjs eval destructive-gate

Environment

Variable Purpose
TYPESAFE_API_KEY Native Jev (POST https://api.typesafe.ai/v1/systemone)
JEVBRIDGE_LLM xai | openai | anthropic | opencode | codex | generic
JEVBRIDGE_LLM_MODEL Override model id
JEVBRIDGE_BASE_URL Override OpenAI-compatible base URL
XAI_API_KEY Grok
OPENAI_API_KEY OpenAI / Codex
ANTHROPIC_API_KEY Claude
OPENCODE_API_KEY OpenCode
JEVBRIDGE_ACP_UPSTREAM claude or codex — proxy that ACP agent and intercept tool calls
JEVBRIDGE_ACP_COMMAND Custom upstream ACP command (alternative to the presets)
JEVBRIDGE_ACP_ARGS Extra args for JEVBRIDGE_ACP_COMMAND
JEVBRIDGE_SESSION_DIR Where ACP sessions are stored (default ~/.jevbridge/sessions)
JEVBRIDGE_INTERCEPT Set to 0 to disable tool-call intercept in proxy mode

backend: "auto" uses Jev when a TypeSafe key is present, otherwise the LLM adapter, otherwise heuristic.

With no API key, auto falls back to the local keyword scorer. The payload reports "backend": "heuristic". That scorer includes question text in its evidence, so asking "would this spend money, delete data, or submit a form?" about "hello world" can still score high from word overlap. Treat heuristic numbers as a smoke test, not a safety signal.

For more examples, see src/recipes.ts and skills/jevbridge/SKILL.md.

(back to top)

MCP Server

Jevbridge speaks the Model Context Protocol over stdio (newline-delimited JSON-RPC 2.0). Point Claude Desktop, Cursor, Codex, OpenCode, or any MCP host at jevbridge mcp. The generating model keeps writing; Jevbridge is the typed decision tool.

Tool What it does
jev_decide Fan out noul / choice / score on one state. Returns answers + gate.
jev_gate Confidence-gate already computed answers (execute / confirm / escalate / abort).
jev_computer_use Next GUI action from a closed set: click, type, scroll, wait, screenshot, done, abort.
jev_recipe Run a built-in recipe (support-route, computer-use, destructive-gate, compaction).

Also exposes jevbridge://recipe/{id} resources and two prompts.

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "jevbridge": {
      "command": "node",
      "args": [
        "--experimental-strip-types",
        "/absolute/path/to/Jevbridge/src/cli.ts",
        "mcp"
      ],
      "env": {
        "TYPESAFE_API_KEY": "ts_..."
      }
    }
  }
}

Codex (~/.codex/config.toml):

[mcp_servers.jevbridge]
command = "node"
args = ["--experimental-strip-types", "/absolute/path/to/Jevbridge/src/cli.ts", "mcp"]

OpenCode (opencode.json) and Cursor (.cursor/mcp.json) live in examples/. Drop-in copies:

  • examples/claude-desktop.json
  • examples/cursor.mcp.json
  • examples/codex.config.toml
  • examples/opencode.json
  • examples/zed.settings.json
  • examples/zed.claude-proxy.json
  • examples/zed.codex-proxy.json

Example tool call:

{
  "name": "jev_decide",
  "arguments": {
    "state": "I was charged twice for order A-104. Refund the duplicate today.",
    "questions": {
      "refund": { "type": "noul", "instructions": "Does this request a refund?" },
      "team": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
          "billing": "Payments, invoices, refunds.",
          "technical": "Bugs, outages, integrations.",
          "other": "None of the above."
        }
      }
    }
  }
}

Call jev_gate before a destructive tool. Call jev_computer_use instead of asking the LLM which CSS selector to click.

(back to top)

ACP Adapter

Jevbridge implements the Agent Client Protocol over stdio with LSP-style Content-Length framing.

Add to Zed settings.json:

{
  "agent_servers": {
    "Jevbridge": {
      "type": "custom",
      "command": "node",
      "args": [
        "--experimental-strip-types",
        "/absolute/path/to/Jevbridge/src/cli.ts",
        "acp"
      ],
      "env": {
        "TYPESAFE_API_KEY": "ts_...",
        "JEVBRIDGE_LLM": "anthropic",
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

On session/prompt the sidecar:

  1. Classifies the turn (question, code edit, computer use, terminal).
  2. Calls Jev or the LLM System One adapter.
  3. Confidence-gates the result.
  4. Streams session/update tool calls and a short agent message.

Sessions persist under ~/.jevbridge/sessions. The adapter advertises loadSession plus sessionCapabilities.resume / list / close / delete, so Zed and other hosts can restore a thread with session/load (replay history) or session/resume (reconnect without replay).

Proxy an upstream agent

Point Jevbridge at Claude Code or Codex. It speaks ACP to the host, forwards the generating agent, and intercepts session/request_permission plus pending tool_call notifications. Jevbridge then allows, asks the user, or denies the call.

jevbridge acp --upstream claude
jevbridge acp --upstream codex
jevbridge acp -- /path/to/custom-acp-agent

Zed settings.json (Codex behind Jevbridge):

{
  "agent_servers": {
    "Jevbridge Codex": {
      "type": "custom",
      "command": "npx",
      "args": ["-y", "@tactico/jevbridge", "acp", "--upstream", "codex"],
      "env": {
        "TYPESAFE_API_KEY": "ts_..."
      }
    }
  }
}

Presets spawn npx -y @agentclientprotocol/claude-agent-acp and npx -y @agentclientprotocol/codex-acp. Destructive execute/delete/edit/move calls that Jev aborts are failed in the client and cancelled upstream.

Codex, Claude Code, Grok Build, and OpenCode keep generating. Jevbridge decides.

(back to top)

Computer Use

Computer-use loops waste frontier tokens on “what should I click.” Jevbridge scores a GUI observation against a closed action set:

click · type · scroll · wait · screenshot · done · abort

plus target, safety, destructiveness, and goal progress. A refund button that spends money comes back confirm, not execute — destructiveness is an independent gate, so a peaked action distribution does not skip it.

import { computerUseQuestions, observationState, readAction } from "./src/index.ts";

const state = observationState({
  goal: "Refund the duplicate charge on order A-104",
  app: "Billing Console",
  visible: ["Refund duplicate", "Email customer", "Close ticket"],
});

const result = await evaluate({
  state,
  questions: computerUseQuestions(["Refund duplicate", "Email customer", "Close ticket"]),
  backend: "auto",
});

const action = readAction(result.answers);

(back to top)

Roadmap

  • System One client (Jev, LLM adapter, heuristic)
  • Confidence gate
  • Computer-use recipes
  • ACP stdio adapter (initialize, session/new, session/prompt)
  • MCP stdio server (jev_decide, jev_gate, jev_computer_use, jev_recipe)
  • Proxy an upstream ACP agent (Claude Code, Codex) and intercept tool calls
  • Session load / resume
  • Published npm package @tactico/jevbridge
  • Transfer this repository into the tacticocc organization

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Please add or update tests under src/*.test.ts for behavioral changes.

(back to top)

Top contributors:

contrib.rocks image

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Contact

Tactico — github.com/tacticocc

Project Link: https://github.com/tacticocc/Jevbridge

(back to top)

Acknowledgments

(back to top)