# Favorited Agency Dashboard — MCP server

The Favorited Agency Dashboard for AI agents: roster, live streams, campaigns, payouts and members of a creator agency, acting as a signed-in member within their role.

- Endpoint: `https://mcp.agency.preprod.favorited.app/mcp` (Streamable HTTP; protocol 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)
- Authentication: OAuth 2.1 at `https://id.fav.com` — [auth.md](https://mcp.agency.preprod.favorited.app/auth.md)
- Clients: [how to connect from Claude, ChatGPT, Cursor, VS Code, Claude Code and more](https://mcp.agency.preprod.favorited.app/docs/clients)
- Machine-readable: [server card](https://mcp.agency.preprod.favorited.app/.well-known/mcp/server-card.json) · [llms.txt](https://mcp.agency.preprod.favorited.app/llms.txt) · [skills](https://mcp.agency.preprod.favorited.app/.well-known/agent-skills/index.json)

## Quick start

1. In Claude: Settings → Connectors → Add custom connector → paste the endpoint. In Claude Code: `claude mcp add --transport http favorited-agency https://mcp.agency.preprod.favorited.app/mcp`. In Cursor / VS Code: the one-click links on the clients page.
2. Sign in with your Favorited account, pick the agency, and choose what the agent may access.
3. Ask: "Using the Favorited Agency tools, give me an overview of the agency's last 7 days."

## Tools (13)

| Tool | Class | What it does |
| --- | --- | --- |
| `whoami` | read | Report who this connection acts as: the member, the agency, the role, the effective permission ids, the token scopes and the features turned on. Call first when unsure what you may do. |
| `ping` | read | Connectivity and authentication check: answers pong with the server version and the acting agency id. |
| `agency.overview` | read | The Overview page in one call: today's highlights (revenue, active creators, streams, gifters, with the change vs the previous period) and the last-30-day series for one metric. Money carries units (usd or coins); usd is absent when the member may not see it. |
| `creators.list` | read | The Creators page: the roster with revenue month-to-date, managers and join date. tab picks the view; filter matches name or handle; sort/dir order the page. Returns the page and a cursor. |
| `creators.get` | read | One creator as the dashboard shows them: profile, roster context (on roster, since, managers), the stats for a window (7d, 30d, 90d) and the 24-month earning history. |
| `campaigns.list` | read | Incentive campaigns the agency can see: status, dates, targets, whether the rules are accepted and (when the feature is on) live progress marked estimated. |
| `campaigns.get` | read | One campaign with its cohort: the creators it covers, their progress, and the projected award — always estimated until the grant pass. A campaign whose rules are not accepted returns rules_not_accepted: an owner must accept in the dashboard; agents never accept rules. |
| `payouts.summary` | read | The Payouts page in one call: the bank connection state, pending payouts and upcoming scheduled payouts with their statuses. Requires the financial permissions; otherwise insufficient_permission. |
| `invites.pending` | read | Creator applications in process: who applied through the invite code, their stage (verified, streamed, decided) and what is waiting on the agency. |
| `agency.search` | read | Search the catalog of everything the dashboard can do (≈55 read, write and destructive actions). Lists only what the acting member may run. Use before agency.run (reads) or agency.execute (writes). |
| `agency.describe` | read | One catalog action in full: parameter schema, REST equivalent, examples, class, required permission and how to run it. |
| `agency.run` | read | Run any read action from agency.search by address. Needs only the Read scope; a write or destructive action is refused here — use agency.execute. |
| `agency.execute` | write | Run a catalog action by address with its parameters. Writes and destructive actions need the Write scope, the member's permission, writes enabled for the account, and confirm: true — without it the tool asks first; never guess confirm: true for the user. Destructive actions run exactly once. Reads belong to agency.run. |
| `agency.get` | read | Fetch a documented GET route of the dashboard API by path, for reads no other tool covers; a few routes are withheld by design. Query parameters go in query. |

The catalog behind `agency.search` / `agency.describe` / `agency.run` / `agency.execute` holds 57 actions: agency (15), campaigns (4), creators (14), events (8), recruiting (6), overview (5), payouts (5).

## Scopes and permissions

- `agency:mcp:read` — every read tool and read action, including any catalog read through `agency.run`. `agency:mcp:write` — writes and destructive actions through `agency.execute`, always behind a confirmation. `offline_access` — a refresh token.
- Scopes layer on top of the member's dashboard permissions and the consent ceiling they chose: an agent can never do what the member cannot, and never more than they consented to. Write access is additionally a per-agency setting; when it is off, write tools stay listed and marked not enabled.

## Audit

Every action lands in the agency's Activity log as the member, marked as done through an agent with the client's name. Members disconnect agents under Settings → Access → Connected apps.

## In the browser (WebMCP)

Signed-in dashboard pages at https://id.fav.com register the same tools with the browser through `navigator.modelContext` when the agency has it enabled — a browser-native agent acts within the member's session, no setup.

## Not offered

Accepting campaign rules, minting service accounts, changing your own role, staff surfaces, a public REST API. See [auth.md](https://mcp.agency.preprod.favorited.app/auth.md) for what authentication does not offer.