Setup
Connect Claude, ChatGPT, Cursor, VS Code or any MCP client to RiffAds.
Read as MarkdownAdd one URL to your AI client, then sign in in a browser. There is no API key.
The workspace needs a paid plan or an active trial. API keys are only for the REST API and the CLI.
Add the server
Web or desktop. This link opens the "add connector" dialog with RiffAds already filled in:
By hand: Settings, Connectors, Add custom connector, paste the server URL, save.
Use the URL exactly
Paste the server URL exactly as shown at the top: no path and no trailing slash. A wrong URL means no sign-in window.
Sign in
- The first time your client connects, it opens a browser on
app.riffads.com. - Sign in with Google, or with email and password.
- Approve. With one workspace, the connection uses it from now on.
If a RiffAds consent screen appears, pick the workspace there, then Generate and spend credits or Read only.
Pick a workspace
| Your account | What happens |
|---|---|
| One workspace | The connection uses it from the first call. Nothing to do |
| Several workspaces, and no consent screen | Every ask is refused until you pick one. The refusal (connection_not_configured) links to the page below |
| No workspace yet | Every ask is refused (no_workspace). Finish setting up a workspace in the app, then reconnect |
To pick one, open your connections page and switch to the workspace you want. Then press Use (workspace name) or Read only next to the waiting agent.
Read or spend
| Mode | Tools | What the agent can do |
|---|---|---|
Spend (spend) | 23 | Everything, plus the two prompts |
Read only (read) | 17 | Browse, price and read. No jobs, no uploads |
- New connections can spend. Change the mode on the connections page, then refresh the tool list in your client.
- Anyone can set their own connection to read only. Only owners and admins can switch a connection to spend.
- Spending is still capped: Spend limits.
Check it
Ask your agent:
Try asking
It calls riffads_ping, which spends nothing.
{
"user_id": "...",
"organization_id": "...",
"workspace": "Acme",
"plan": "growth",
"mode": "spend",
"can_spend_credits": true,
"server_time": "2026-09-28T10:28:41.002Z",
"ok": true
}workspace is where credits come from. can_spend_credits: false means read only.
First video
Try asking
The agent prices it for free, asks for your yes, then submits, waits and hands you the link: The flow.
More ideas: Prompting guide. Every tool: Tools.
Custom clients
Only for a client you build yourself. Other clients do this for you.
-
Call the server with no token. It answers
401with aWWW-Authenticateheader that namesresource_metadata. -
GETthe protected resource document below. Use itsauthorization_servers[0](today https://app.riffads.com), never a hardcoded host. -
GETthat server's/.well-known/oauth-authorization-serverfor the authorize, token and registration endpoints. -
Register once (dynamic registration works), authorize in a browser, and exchange the code. Scopes:
openid profile email offline_access. -
Send
Authorization: Bearer <access token>on every call. An expired token answers401: refresh, or authorize again.
Troubleshooting
| What you see | What to do |
|---|---|
| No sign-in window opens | Check the server URL: no path, no trailing slash. The client must speak streamable HTTP |
The agent says it does not know which workspace to spend from (connection_not_configured) | You have several workspaces and none is picked. Pick a workspace, then ask again. Asking before you pick changes nothing |
The agent can browse and price but not make anything, or sees only 17 tools (read_only_connection) | The connection is read only. An owner or admin switches it to spend on the connections page. Then refresh the tool list |
A job is refused over a spending limit (spend_limit_exceeded) | A workspace limit stopped it, and the refusal names which one: Spend limits |
Not enough credits (insufficient_credits) | Top up on the billing page |
The agent says it is not signed in, or the workspace is gone (not_authorized, workspace_unavailable) | Reconnect, sign in and pick a workspace again |
Your plan does not include agents (required_plan) | The message names a plan that does |
Tools are missing, or "too many requests" (429) during setup | Wait a moment, refresh the tool list, or add the server again |
Disconnecting deletes the tokens, but running work still finishes. Every refusal code: Errors.