Developers

Widget, ingest API, and MCP tools.

Everything an integration needs: the widget snippet, the ingest contract, and the three MCP tools your agent uses to close the loop.

1 · Embed the widget

<script src="https://fixcue.app/widget.js" defer
  data-token="fc_pub_..."     <!-- project public write token -->
  data-origin="https://fixcue.app">       <!-- where to POST -->
</script>

Or from npm: initFixcue({ token, apiBase }) via @fixcue/widget. The widget renders in a Shadow DOM, ships ~10KB gzip, never auto-opens, and picks en/zh-CN from <html lang>.

2 · Ingest API

POST https://fixcue.app/api/v1/ingest
Authorization: Bearer fc_pub_...

{ "message": "Pay button does nothing", "page_url": "https://app/checkout",
  "selector": "#pay-btn", "component_stack": "Checkout > PayBtn",
  "console": [{"level":"error","message":"...","ts":0}],
  "network": [{"method":"POST","url":"...","status":500,"duration_ms":120}],
  "screenshot_base64": "... or null" }
CodeBodyMeaning
201{ id, status: "new" }Stored; triage runs async (<8s)
400invalid_bodySchema violation (message 1–2000 chars, etc.)
401invalid_tokenUnknown or malformed public token
402free_quota_exceededFree plan's 50 items/month spent
403origin_not_allowedOrigin/Referer not in allowed_origins
429rate_limited, retry_after>30 requests / 10 min / IP per project

Console keeps error/warn only (≤30 entries, ≤500 chars, 60s window). Network keeps failed or status ≥400 only (≤15). Sensitive query params are redacted before storage.

3 · MCP server (agent side)

# env
FIXCUE_TOKEN=fc_agt_...   # agent token from project setup (shown once)
FIXCUE_API_BASE=https://fixcue.app

npx -y @fixcue/mcp        # stdio server
ToolInputReturns
list_open{ status?, classification?, limit? }Open items: id, status, class, message, page_url, created_at
get_bundle{ public_id }Markdown repro bundle — context, console, network, signed screenshot link
update_status{ public_id, to, note?, pr_url? }Validates the transition; resolved requires a note or pr_url

Agents may move an item fixable → in_progress → needs_review → resolved or wont_fix. Items classified needs_decision refuse agent updates until a human reclassifies them in the dashboard.