For Claude Code, Codex, Cursor, Windsurf and any MCP agent

Give your agent a way to ask a human first.

Impri is an MCP server with 8 tools: propose an action, wait for a decision, report what happened. Your agent keeps doing everything else at full speed — it only stops at the door marked "real side effect."
Install

One line per agent

claude mcp add impri \
  -e IMPRI_API_KEY=im_your_key_here \
  -e IMPRI_BASE_URL=https://api.impri.dev \
  -- npx @impri/mcp

Self-hosted? Drop IMPRI_BASE_URL — it defaults to http://localhost:8484. Full guide →

codex mcp add impri \
  --env IMPRI_API_KEY=im_your_key_here \
  --env IMPRI_BASE_URL=https://api.impri.dev \
  -- npx -y @impri/mcp

Self-hosted? Drop IMPRI_BASE_URL — it defaults to http://localhost:8484. Full guide →

{
  "mcpServers": {
    "impri": {
      "command": "npx",
      "args": ["-y", "@impri/mcp"],
      "env": {
        "IMPRI_API_KEY": "im_your_key_here",
        "IMPRI_BASE_URL": "https://api.impri.dev"
      }
    }
  }
}

Save as .cursor/mcp.json. Self-hosted? Drop IMPRI_BASE_URL — it defaults to http://localhost:8484. Full guide →

{
  "mcpServers": {
    "impri": {
      "command": "npx",
      "args": ["-y", "@impri/mcp"],
      "env": {
        "IMPRI_API_KEY": "im_your_key_here",
        "IMPRI_BASE_URL": "https://api.impri.dev"
      }
    }
  }
}

Save to ~/.codeium/windsurf/mcp_config.json. Self-hosted? Drop IMPRI_BASE_URL — it defaults to http://localhost:8484. Full guide →

What the agent gets

8 tools

ToolPurpose
impri_push_actionSubmit a proposed action with a preview; returns an action_id and inbox_url.
impri_await_decisionLong-poll until a human approves, rejects, or the timeout elapses.
impri_report_resultReport whether the approved action executed; closes the audit loop.
impri_inbox_statusCheck how many actions are pending before starting a new batch.
impri_create_watcherCreate a monitoring watcher from a full hand-written spec.
impri_list_watchersList configured watchers, optionally filtered by status.
impri_list_watcher_presetsList ready-made watcher templates (Reddit, GitHub releases, HN, RSS…).
impri_create_watcher_from_presetCreate a watcher from a preset by id, with just the params filled in.
How it runs

Propose → await → report

  1. Before an action leaves the sandbox — a send, a deploy, a write, a publish — the agent calls impri_push_action with a short title and a preview.
  2. The agent calls impri_await_decision and blocks. The action shows up in the web inbox, and on your phone if a notification channel is configured.
  3. A human approves, rejects, or edits the draft. The decision (and any edit, as a signed diff) comes back from the poll.
  4. On approved, the agent executes — never before — and calls impri_report_result so the inbox shows the real outcome, not just the decision.
impri_push_action({ kind, title, preview: { format, body }, editable })
  // -> { action_id, status: "pending", inbox_url }

impri_await_decision({ action_id, timeout_s })
  // -> { status: "approved" | "rejected", preview, edited_by_human }

impri_report_result({ action_id, status: "executed" | "execute_failed", detail })
Use cases

See it applied

Overnight coding runs, destructive database writes, outbound email, deploys, refunds, content publishing — see what people use it for. Full API reference: MCP server docs and the OpenAPI spec.

Give your agent hands — and a conscience.