Jetty MCP
Allows workflows to use Google Gemini models as an alternative AI provider — the Gemini API key is stored in a collection's environment variables (via set-environment-vars), and check-secrets verifies the credentials a runbook needs before a workflow is executed.
Enables AI workflows to call OpenAI models — you store your OpenAI API key in a collection's environment variables (via the set-environment-vars tool), then create and run workflows built from OpenAI-backed step templates, such as the cute-feline-detector demo workflow.
Jetty — AI/ML Workflows for Any Agent
Build, run, and monitor AI/ML workflows on Jetty from any AI coding tool. Works with Claude Code, Cursor, VS Code Copilot, Windsurf, Zed, Gemini CLI, Codex CLI, and any MCP-compatible agent.
Quick Start (Claude Code)
claude plugin marketplace add jettyio/jettyio-skills
claude plugin install jetty@jettyThen run /jetty-setup to create an account, configure your API key, and run your first workflow in under 5 minutes.
Related MCP server: multivon-mcp
Install in Your Tool
Jetty uses the Model Context Protocol (MCP) to connect to your agent. Pick your tool below.
The same tools are available to in-browser agents through WebMCP — jetty.io registers them on navigator.modelContext for signed-in users, and any site can do the same with jetty-mcp-server/webmcp (see mcp-server/README.md).
Claude Code
Plugin (recommended) — includes guided setup wizard, workflow skills, and MCP tools:
claude plugin marketplace add jettyio/jettyio-skills
claude plugin install jetty@jettyThen run /jetty-setup to get started interactively.
MCP server only:
claude mcp add jetty -- npx -y jetty-mcp-serverOr add to your project's .mcp.json:
{
"mcpServers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}VS Code Copilot
Add to .vscode/mcp.json in your project root:
{
"servers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}Or run MCP: Add Server from the Command Palette.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}Zed
Add to your Zed settings (~/.config/zed/settings.json):
{
"context_servers": {
"jetty": {
"command": {
"path": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}
}Gemini CLI
gemini extensions install https://github.com/jettyio/jettyio-skillsDuring installation, you'll be prompted for your Jetty API token. The extension registers the MCP server and loads context automatically.
To install from a local clone instead:
gemini extensions install --path /path/to/jettyio-skillsAntigravity
Antigravity (Google's agentic IDE) loads skills from ~/.gemini/antigravity/skills/ and reads MCP servers from ~/.gemini/antigravity/mcp_config.json. It does not auto-install from any of the manifests in this repo — file-drop only.
Skills: clone the repo and either symlink or copy each skill directory you want into Antigravity's skill path. For example:
git clone https://github.com/jettyio/jettyio-skills.git
mkdir -p ~/.gemini/antigravity/skills
ln -s "$(pwd)/jettyio-skills/skills/jetty-setup" ~/.gemini/antigravity/skills/jetty-setup
ln -s "$(pwd)/jettyio-skills/skills/create-runbook" ~/.gemini/antigravity/skills/create-runbook
ln -s "$(pwd)/jettyio-skills/skills/optimize-runbook" ~/.gemini/antigravity/skills/optimize-runbook
ln -s "$(pwd)/jettyio-skills/skills/jetty" ~/.gemini/antigravity/skills/jettyMCP server: add to ~/.gemini/antigravity/mcp_config.json:
{
"mcpServers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}Restart Antigravity after editing the config. Skills trigger on natural language (slash commands aren't auto-discovered for skills) — say "set up Jetty" or "create a runbook for X" and the agent will pick the right skill via the description in its frontmatter.
Codex CLI
Add to ~/.codex/config.json:
{
"mcpServers": {
"jetty": {
"command": "npx",
"args": ["-y", "jetty-mcp-server"],
"env": { "JETTY_API_TOKEN": "mlc_your_token" }
}
}
}Any Other MCP Client
JETTY_API_TOKEN=mlc_your_token npx -y jetty-mcp-serverThe server communicates over stdio using the MCP protocol.
Get Your API Token
Sign up at jetty.io
Go to Settings → API Tokens
Create a token (starts with
mlc_)Add it to your tool's config as shown above
First-Time Setup
Once connected, ask your agent to help you get started. This works in any MCP-connected tool — just paste the prompt below into your agent's chat:
Set up Jetty for me. List my collections, then deploy the cute-feline-detector demo workflow using the
create-tasktool with this workflow JSON. Then run it withrun-workflowusing the prompt "a fluffy orange tabby cat sitting in a sunbeam". Polllist-trajectoriesuntil it completes, then show me the results withget-trajectory.
Before running the demo, store your AI provider key in your collection's environment variables. Ask your agent:
Use the Jetty
get-collectiontool to check my collection's environment variables. I need to add my OpenAI API key (or Gemini API key) so workflows can use it.
Claude Code users: Just run /jetty-setup instead — the guided wizard handles all of this automatically.
Available MCP Tools
Once connected, your agent has access to 16 tools:
Tool | Description |
| List all collections (workspaces) |
| Get collection details and environment variable keys |
| List tasks (workflows) in a collection |
| Get task details and workflow definition |
| Create a new task with a workflow |
| Update a task's workflow or description |
| Run a workflow asynchronously |
| Run a workflow synchronously (blocks until done) |
| List recent workflow runs |
| Get full run details with step outputs |
| Get execution statistics |
| Label a trajectory (e.g., quality=high) |
| List available step templates |
| Get template details and schema |
| Check which env vars a collection has vs. what a runbook needs |
| Set or delete environment variables on a collection |
Claude Code Skills
The plugin adds three skills for richer Claude Code integration:
/jetty-setup — Guided Onboarding
Interactive wizard that handles account creation, API key storage, provider selection (OpenAI or Gemini), and runs a demo workflow — all in under 5 minutes.
/jetty — Natural Language Workflow Management
/jetty list collections
/jetty list tasks in my-project
/jetty run my-project/my-task with prompt="Hello, world!"
/jetty show the last trajectory for my-project/my-task
/jetty create a task called test-echo in my-project using text_echo
/jetty add label quality=high to trajectory abc123 in my-project/my-task/jetty create-runbook — Guided Runbook Creator
Interactive wizard that walks you through building a runbook step by step — choose an evaluation pattern, define parameters and secrets, and generate a complete runbook ready to run.
Runbooks
A runbook is a structured markdown document that tells a coding agent how to accomplish a complex, multi-step task with built-in evaluation loops and quality gates. Think of it as an executable playbook: your agent reads the runbook, executes each step, evaluates its own output, and iterates until quality criteria are met.
Key Features
Outcome-oriented — defines what must be true when done, not just procedure steps
Self-evaluating — built-in evaluate → refine → re-evaluate loops (max 3 rounds)
Parameterized — uses
{{param}}template variables for reuse across inputs and environmentsSecrets-aware — declares sensitive credentials in frontmatter, resolved securely at runtime
Versioned — carries a semantic version in YAML frontmatter for reproducibility
Evaluation Patterns
Pattern | Use Case | How It Works |
Programmatic | Data pipelines, code generation, structured output | Validates against schema, API, or test suite — objective pass/fail |
Rubric | Creative content, analysis, complex reports | Scores across multiple criteria on a 1–5 scale — subjective quality |
Runbook Structure
Every runbook follows a mandatory structure:
Frontmatter — version, evaluation type, secrets declarations
Objective — what the runbook accomplishes (2–5 sentences)
Output Manifest — files the agent must create
Parameters — configurable inputs with defaults
Dependencies — workflows, APIs, credentials, packages
Steps — sequential processing (API calls, transformations, etc.)
Evaluation — status table (programmatic) or rubric scoring
Iteration — up to 3 refinement rounds with common-fix guidance
Code Checks — one
### <id> — <name>heading plus one fenced block each: abashcommand oryamlbuilt-in that Jetty runs after the agent exits (the agent runs it instead when the fence saysexecutor=agent), or anagentinstruction the agent runs; a note Jetty appends at run time names which ids each side runs, and without that note the agent runs every check itself and records each in the report; a failure fails the runChecklist —
- [ ]conditions confirmed by inspection; a failed item fails the runValidation Report —
validation_report.jsonv2: one typedchecks[]entry per step, checklist item, agent check and judge; Jetty appends its own command-check entries and computes the verdict
Runbooks written before Code Checks existed (a validation report with stages and overall_passed but no checks, and a Final Checklist step) still run unchanged: Jetty reads their report as v1 and takes its own overall_passed as the verdict. Running /create-runbook on one offers a migration.
Getting Started with Runbooks
Claude Code users: Run /jetty create-runbook for a guided wizard that generates a complete runbook from starter templates.
For full documentation, see docs/PRD-runbooks.md.
Secrets Management
Jetty provides secure handling of API keys and credentials so they never leak into logs, trajectories, or workflow outputs.
How Secrets Work
Secrets are declared in runbook frontmatter and resolved at runtime through a 3-level fallback:
OS environment variable matching the
envfield.envfile in the runbook directory (should be.gitignored)Interactive prompt (if
required: trueand not found above)
When running on Jetty, secrets resolve from your collection's environment variables — set once, available to all workflows in that collection.
Declaring Secrets in a Runbook
secrets:
OPENAI_API_KEY:
env: OPENAI_API_KEY
description: "OpenAI API key for LLM calls"
required: true
LANGFUSE_SECRET_KEY:
env: LANGFUSE_SECRET_KEY
description: "Langfuse API secret key"
required: falseReference secrets in runbook steps as {{secrets.OPENAI_API_KEY}} — distinct from regular {{params}}.
MCP Tools for Secrets
Tool | Description |
| Verify which env vars a collection has vs. what a runbook needs — returns configured, missing, and ready status |
| Set or delete environment variables on a collection (merge semantics, pass |
Security Guarantees
Secrets are never stored in
init_params, trajectories, or output filesThe
secret_paramsAPI field merges credentials into the runtime environment without persisting themCollection environment variables are stored server-side. By default,
GET /api/v1/collections/{COLLECTION}/environmentreturns values in plain text to the holder of a collection-owner token. Treat that token like a root credential. To make the endpoint redact specific keys, set the collection'sredacted_param_keys(it defaults tonull, i.e. no redaction)
Workflow Templates
Ready-to-use templates are in skills/jetty/templates/:
Template | Description |
cute-feline-detector-openai | Prompt → DALL-E 3 image → GPT-4o cuteness judge |
cute-feline-detector-gemini | Prompt → Gemini image → Gemini Flash cuteness judge |
simple-chat | Basic LLM chat with system prompt |
model-comparison | Compare two LLM responses with an AI judge |
image-generation | Text-to-image with Replicate/FLUX |
batch-processor | Fan-out parallel processing |
document-summarizer | Configurable document summarization |
Use the create-task MCP tool to deploy any template to your collection.
Shell Functions (Standalone CLI)
For direct terminal usage without any AI tool:
export JETTY_API_TOKEN="mlc_your_token_here"
source path/to/skills/jetty/jetty-cli.sh
jetty_health # Check connectivity
jetty_collections # List collections
jetty_run_sync my-project my-task '{"prompt": "Hello"}' # Run a workflow
jetty_trajectories my-project my-task # View execution history
jetty_help # Full command referenceHow It Works
Jetty runs AI/ML workflows defined as JSON pipelines. Each workflow has:
init_params — Input parameters (e.g., a prompt)
step_configs — Pipeline steps (e.g., LLM call → image generation → judge)
steps — Execution order
Results are stored as trajectories with full step-by-step outputs, downloadable files, and labeling support.
Platform
Service | URL | Purpose |
Jetty API |
| All operations: workflows, collections, tasks, datasets, trajectories, files |
Web UI |
| Dashboard and management |
Prerequisites
Node.js 18+ (for the MCP server via
npx)A Jetty API token (get one here)
An AI provider API key for workflow steps (OpenAI for DALL-E/GPT, or Google Gemini)
For runbooks: an agent runtime API key (Anthropic, OpenAI, or Google — see agent reference)
Agent Compatibility
Agent CLI | MCP Tools | Skills ( | Runbook Execution | Notes |
Claude Code | Full | Full | Full | Recommended — best experience |
Cursor | Full | N/A | Via API | MCP tools only |
VS Code Copilot | Full | N/A | Via API | MCP tools only |
Codex CLI | Full | N/A | Full |
|
Gemini CLI | Full | Partial | Full |
|
Windsurf | Full | N/A | Via API | MCP tools only |
Zed | Full | N/A | Via API | MCP tools only |
For agents without skill support, see QUICKSTART.md.
Documentation
Troubleshooting
Problem | Solution |
"Invalid or expired token" | Regenerate at jetty.io → Settings → API Tokens |
"Access denied" | Verify your token has access to the collection |
MCP tools not showing up | Restart your editor/agent after config changes |
Workflow fails | Use |
| Claude Code only — reinstall: |
Releasing
The version number is hardcoded in several places. When cutting a release, bump all of them together:
.claude-plugin/plugin.json.claude-plugin/marketplace.json.codex-plugin/plugin.json.opencode-plugin/plugin.jsongemini-extension.jsonskills/jetty-setup/scripts/jetty_simulate.py(CLIENTstring)skills/jetty/SKILL.md(launch banner)skills/jetty-setup/SKILL.md(launch banner)
License
MIT — see LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP-native agent evaluation and observability server. Log traces, evaluate output quality with 12 built-in rules (PII detection, prompt injection, cost thresholds), and track agent costs. Real-time dashboard, OTel-compatible spans. Self-hosted, MIT licensed.999 npm9MIT

multivon-mcpofficial
AlicenseAqualityAmaintenanceMCP server that gives AI coding agents direct access to evaluation tools.23Apache 2.0- AlicenseAqualityCmaintenanceA local MCP server that packages LLM evaluation gates as reusable CI/CD primitives, enabling AI agents to run datasets against models, score responses, and enforce quality thresholds.10MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI agents to run a deterministic orchestration loop with decomposition, subagent execution, and review feedback across multiple LLM backends.60MIT