Agentic operating system — 20+ MCP verbs, two-axis pricing, public API docs

[feature] Two-axis pricing — usage credits — Every workspace gets a monthly credit allowance + top-up balance. Each agent call, tool run, and AI generation spends credits. Self-serve Stripe Checkout top-ups: Starter £10 / 1k cr, Growth £45 / 5k cr, Scale £200 / 25k cr.

[feature] 20+ agent / MCP write capabilities — Calendar (add / reschedule / cancel event), CRM (notes, pipeline moves, lead deletion, lead → client conversion, client edits, portal messages), Operations (create + status + delete + update for deliverables, projects, contracts), Billing (mint payment link, mark paid, reschedule due date), Reporting (deterministic report draft). 9 read resources.

[feature] First-party MCP transport — /api/mcp speaks JSON-RPC 2.0 over Streamable HTTP. Drop the URL + token into Claude Desktop, Cursor, or any MCP client — no mcp-remote bridge required. Same handlers as the dashboard tool palette.

[feature] Public API docs at /docs/api — Auto-generated from the capability catalogue — never drifts from the runtime. Install snippets for Claude Desktop / Cursor / n8n + curl smoke test.

[feature] Per-org credit pricing overrides — Owner/admin can set per-capability rates that override the platform defaults (or set 0 to disable charging). Pricing flexibility for partnership rates, volume discounts, enterprise deals — pure JSONB on the org row.

[feature] Per-token credit budgets — Mint a token with a monthly credit cap. Token gets its own 402 once spend exceeds the cap, even if the org still has balance. Contains the blast radius if a token leaks.

[feature] Credit usage report + CSV export — /settings/billing now shows 30-day spend by capability, per-day sparkline, total spent / added, and a one-click CSV download of every credit_event for accounting.

[feature] Live token activity feed — /settings/api-tokens shows the last 50 actions every token has taken, kind badge (mcp / ui), token-name filter dropdown, and links into the entity. Closes the trust loop: mint → see what it ran → revoke.

[feature] Messages — server-side unread state — Dashboard Conversations stat goes amber when unread, per-thread badges in the Active Conversations list, count badge on the Messages tab in the client layout, per-row badge on the clients list. Bell-dropdown messages auto-mark-read when their timestamp predates the user's last_read_at.

[feature] Messages — attachments — Paperclip on both agency and portal message pages uploads to the private client-files bucket (25 MB cap, 16 mime types). Images render inline, other files render as labelled link cards with signed URLs.

[feature] Inline 'Run via agent' shortcuts — Dashboard Today panel rows reveal a Zap-icon button on hover that opens the matching tool dialog pre-filled with the row's context — overdue invoice → mint link, pending approval → mark approved, hot lead → move stage.

[feature] First-run activation checklist — Five-step onboarding card on the dashboard for fresh orgs. Auto-dismisses once a client exists — established workspaces never see it.

[feature] Stripe payout.failed Slack alert — Connect-onboarded orgs get a one-shot Slack message when Stripe couldn't deliver a payout, deduped per payout id so retries don't spam.

[infra] fireOnce alert primitive + retention — lib/alerts.ts — single sanctioned way to fire a one-shot-per-period alert via the new org_alerts table. Daily cron prunes rows older than 180 days.

[infra] Native MCP package, no shim — Refactored agent_read into a shared lib so the REST route and the MCP transport call the same code. Capability schemas surface in MCP tools/list with per-call credit annotations.

[fix] update_client status enum — Was rejecting every valid status because the capability hard-coded made-up names. Now matches the live client_status enum (onboarding / active / paused / past).

[infra] Mobile sweep — invoices list — /invoices table now stacks as mobile-friendly cards under sm. Client name + invoice number + total + status pill stay visible. Desktop grid layout returns above sm.

[security] 5 production migrations applied — usage_credits, token_budgets_and_alerts, org_credit_pricing, client_notes, conversation_reads. All with org-scoped RLS, indexed for the access patterns the dashboard actually uses.