fdbck.

MCP server

fdbck ships a hosted Model Context Protocol server, so the agents you already work in — Claude Code, Cursor, VS Code — can read and act on your feedback inbox directly: list what came in overnight, inspect an item, approve the fix, and watch the run — without opening the dashboard. It's the same loop, one tool call away from wherever you're coding.

Connect

Authentication uses your existing worker token (wt_…, from Account → Local worker) as a bearer header — the same credential your worker already holds; there's no new key to manage. Anyone with the token can act on your inbox, so treat it like the secret it already is.

Claude Code

Replace wt_your_worker_token with your actual token:

shell
claude mcp add --transport http fdbck https://fdbck.app/api/mcp \
  --header "Authorization: Bearer wt_your_worker_token"

Or commit a shareable .mcp.json to the repo. Keep the token out of the file by referencing an environment variable — set FDBCK_WORKER_TOKEN in your shell, and Claude Code expands it at connect time:

shell
{
  "mcpServers": {
    "fdbck": {
      "type": "http",
      "url": "https://fdbck.app/api/mcp",
      "headers": { "Authorization": "Bearer ${FDBCK_WORKER_TOKEN}" }
    }
  }
}

Cursor

.cursor/mcp.json (project) or ~/.cursor/mcp.json (global) — Cursor's env syntax is ${env:VAR}:

shell
{
  "mcpServers": {
    "fdbck": {
      "url": "https://fdbck.app/api/mcp",
      "headers": { "Authorization": "Bearer ${env:FDBCK_WORKER_TOKEN}" }
    }
  }
}

Tools

ToolWhat it does
list_feedbackCompact inbox rows, newest first. Filters: project, view (inbox / in_progress / resolved), pagination.
get_feedbackFull detail for one item: message, triage result, run history with live progress, PR/issue links.
get_run_statusCurrent run phase + live progress for an item — the polling tool after approve_fix or retry_item.
approve_fixApprove a triaged item; your worker writes the fix and opens a draft PR. Idempotent.
dismiss_feedbackMark an item won't-fix / not actionable.
retry_itemRe-queue the failed phase for an item whose last run failed.

Reference

Every tool takes a small JSON object and returns its result as JSON text.id arguments are the feedback item's UUID (from list_feedback).

ToolParametersReturns
list_feedbackproject? ("owner/repo"), view? (inbox | in_progress | resolved), limit (1–50, default 20), offset (≥0, default 0){ items: [{ id, project, type, status, statusLabel, severity, confidence, summary, createdAt }], nextOffset }
get_feedbackid (uuid, required)the list row + url, message, pageUrl, and runs[] = { phase, status, error, prUrl, prState, issueUrl, progress?, triage?, createdAt }
get_run_statusid (uuid, required){ id, itemStatus, run: { phase, status, progress?, prUrl, prState, error } | null } — the latest run only
approve_fixid (uuid, required) — item must be triaged{ id, status: "approved", queued: true }; already-queued → { id, status, alreadyQueued: true }
dismiss_feedbackid (uuid, required){ id, status: "dismissed" }
retry_itemid (uuid, required) — the last run must have failed{ id, phase, requeued: true }; errors if a job is already queued/in-progress or nothing failed

The agent-to-agent loop

The natural workflow: ask your coding agent “what feedback came in overnight? Approve the two obvious bugs and show me the third.” It lists the inbox, approves items (your local worker picks them up and opens draft PRs on your own Claude/Codex/Gemini — see how the worker works), and polls get_run_status — each call returns the same live checkpoint the dashboard shows (“editing src/billing.tsx · 12 reads · 3 edits”), so poll it to follow along.

Semantics & limits

  • Stateless Streamable HTTP. No sessions; every request is authenticated and scoped by the bearer token alone.
  • Never blocking. approve_fix enqueues and returns immediately — the fix itself runs on your machine; poll get_run_status.
  • Lean outputs. Lists are paginated (max 50) and compact so they don't blow up your agent's context; full text lives behind get_feedback.
  • 401? The token is wrong or revoked — regenerate it in Account → Local worker and update your MCP config.