Integrations

Authorizing an MCP Client with OAuth

Step-by-step guide to the Funnelfeedr approval screen you see when connecting Claude, ChatGPT or another MCP client, and what each part of it means

When you add Funnelfeedr to an MCP client, the client cannot simply start reading your data. It first has to be authorized by you. This happens through OAuth, the same kind of "Allow access" flow you know from connecting apps to Google or Microsoft.

This guide explains what happens during that flow, what the Funnelfeedr approval screen shows, and how to make the right decision on it.


The flow in five steps

  1. You add the server in your client. You paste https://mcp.funnelfeedr.com/mcp into your MCP client and click Connect (or the client's equivalent).
  2. Your browser opens Funnelfeedr. The client sends you to api.funnelfeedr.com, which forwards you to the approval screen on app.funnelfeedr.com. If you are not already signed in, you sign in first. Your original request is kept, so you land on the approval screen after signing in.
  3. You review the approval screen. It shows which application is asking, what it wants to do, and which Funnelfeedr user and account it will act as. If you belong to several accounts, you pick the one to connect to here. If you have already approved everything the client asks for and you have only one account, this step is skipped and the approval happens by itself.
  4. You click Allow access or Cancel.
  5. You are sent back to the client. The client receives a token and the connection is live. You can start asking your assistant about your Funnelfeedr data straight away.

The whole flow usually takes well under a minute. The request itself is valid for 10 minutes. If you leave the approval screen open longer than that, it expires and you need to start again from the client.


Reading the approval screen

Who is asking

The top of the screen identifies the application. There are two cases:

Verified application. The screen shows a shield icon and a host name, for example claude.ai. This means the application identified itself with a public identity document hosted at that address, and Funnelfeedr fetched and validated it. The host is the part that was actually verified. If the application also states a display name, it appears as Calls itself "…" underneath, because that name is chosen by the application and not something Funnelfeedr can check.

Unverified application. The screen shows a warning icon, the heading Unverified application, and a yellow warning box. This means the application registered itself with Funnelfeedr on the spot, without a verifiable identity. Some legitimate clients still work this way. Continue only if you started the connection yourself, moments ago, from a client you trust. If this screen appears and you did not just try to connect something, click Cancel.

What it wants to do

Below the identity is a list of the permissions (scopes) being requested, one line per scope. Funnelfeedr has three:

ScopeThe line on the screenWhat it covers
Read (mcp:read)Read your organizations, contacts, lists, saved searches and knowledge base.Every read tool
Write (mcp:write)Create lists, saved searches, ideal customer profiles and accounts, and add organizations and contacts to lists.Creating lists, adding and removing organizations and contacts on lists, saving searches, creating ideal customer profiles and creating accounts
Reveal (mcp:spend)Reveal contact email addresses and phone numbers, spending this account's credits.Pricing and revealing contact details

The screen lists exactly what the client asked for, and you approve all of it or cancel; you cannot untick a single scope. A client that asks for no scope at all gets Read only. The three are independent: holding Write does not allow spending, and holding Reveal does not allow editing. A connection without Reveal does not even see the reveal tools, and contact details stay masked exactly as before.

There are no other scopes. Whatever you approve here, an MCP client can never push to your CRM, send email, place calls, buy credits or change your plan, and it cannot delete anything other than removing entries from your lists.

Approving Reveal means approving spending. It lets the assistant use reveal_contacts, which consumes credits at your account's normal reveal prices. It is still not a blank cheque: the assistant has to price the reveal first with the free quote_reveal tool and show you the exact cost, the reveal tool is marked as a spending action so your client asks you to confirm, at most 25 contacts can be revealed per call, and contacts your account already revealed are free. See MCP tools reference.

If you have connected this application to the same account before, scopes it already holds are marked Already granted. Approving again merges the new scopes with the old ones; it never removes anything.

Existing connections have to be reconnected to allow revealing. The Reveal scope is newer than the connector, so a connection approved before it existed simply does not have it, and there is no way to add it in place. Remove the connector in the client and add it again (or revoke the connection under Settings → MCP Connections and reconnect), and check that Reveal is among the scopes listed on the approval screen.

Connect to account

If you belong to more than one Funnelfeedr account, the screen has a Connect to account picker listing every account you are a member of, starting on the one you are signed into. Whatever you choose here is the account the assistant reads and writes in. With only one account there is no picker, and the account is simply shown.

The choice is not final. You can move the connection later under Settings → MCP Connections, or ask the assistant to do it for you. A connection points at one account at a time, so changing it moves the connection rather than adding a second one.

Connecting as

This line shows the user the assistant will act as, and the account when there is no picker, for example anna@example.com · Example AB. The assistant gets exactly the access this user has in that account, nothing more. If your Funnelfeedr role does not allow editing leads, the assistant cannot create lists either, even with the Write scope approved.

Sends you back to

The exact address the client gave as its return address. For Claude on the web this is https://claude.ai/api/mcp/auth_callback; for Claude Code it is a localhost address. If this looks unrelated to the client you are using, cancel.


Allow access or Cancel

  • Allow access creates the connection and returns you to the client.
  • Cancel tells the client that you declined. Nothing is stored in Funnelfeedr and nothing needs to be cleaned up.

Either way, you can close the browser tab afterwards. Some clients close it for you.


What happens after you approve

  • The client receives a short-lived access token (valid for 60 minutes) and a refresh token (valid for 30 days). It renews the access token by itself; you will not see this happening.
  • As long as the client is used at least once every 30 days, the connection stays active without any action from you. After 30 days of inactivity the client will send you through the approval flow again.
  • The connection appears under Settings → MCP Connections with the application name, the account it uses, the scopes you granted, when it was created and when it was last used.

Revoking access

You can revoke any connection at any time under Settings → MCP Connections. The client's refresh tokens die at once, and an assistant that is mid-conversation loses access within about two minutes, once the server re-checks the connection. Account administrators can also see and revoke every connection in the account. See Managing MCP connections.

Deleting the connector inside the client does not revoke it on the Funnelfeedr side. If you want to be certain the tokens are dead, revoke them in Funnelfeedr.


Security details

For those who want to know exactly what is going on under the hood:

  • The flow is OAuth 2.1 with PKCE (S256). There is no client secret; the client proves it started the request by presenting a code it generated locally.
  • Funnelfeedr is both the authorization server (it issues tokens) and the resource server (it accepts them). Tokens are bound to https://mcp.funnelfeedr.com/mcp and are accepted nowhere else.
  • Clients identify themselves either through a Client ID Metadata Document (a public identity document at an HTTPS address, shown as a verified host) or through Dynamic Client Registration (shown as unverified).
  • The tokens the client holds identify you. Every tool call is authorized against your role and seats at the moment it happens, and every call is logged. The account a request runs in is read from the stored connection on every request, which is what lets a connection be moved between your accounts without reconnecting. It is re-read at most every two minutes, which is the outer bound on how long a revoked or moved connection keeps its old access.
  • Standard discovery documents are published at https://mcp.funnelfeedr.com/.well-known/oauth-protected-resource/mcp and at the authorization server's /.well-known/oauth-authorization-server, so any compliant client can find the endpoints itself.

Common problems

"This connection request has expired or has already been used." More than 10 minutes passed, or you refreshed the page after approving. Start the connection again from the client.

"We could not find this connection request." The link is incomplete or was cut short when it was copied. Start again from the client.

The approval screen never appears and the client reports an error. Make sure you entered the server address exactly as https://mcp.funnelfeedr.com/mcp, and that nothing on your network (a corporate proxy or a firewall) blocks api.funnelfeedr.com, app.funnelfeedr.com or mcp.funnelfeedr.com.

The assistant says a tool needs a scope that was not granted. Remove the connector in the client and connect again. Which scopes are requested is up to the client, so check that the one you need is listed on the approval screen. This is also what you do to enable revealing on a connection made before the Reveal scope existed.

More cases are covered in MCP troubleshooting.