Always send Bearer
The Model Context Protocol’s HTTP transport requires every request to carry its credential as:
token prefix (see API Keys) and only an OAuth 2.0 access token uses Bearer. Over MCP, always use Bearer, regardless of which kind of credential you’re sending — the server inspects the token and routes it to the verification path that recognizes it. You don’t need to know or declare which kind it is.
Permissions and rate limits
A call made throughinvoke_api is authenticated and authorized exactly like a direct call to the same endpoint:
- It runs as the caller identified by the token, with that caller’s existing permissions. An operation the caller couldn’t perform through the CRM directly (or through the REST API) is refused here too, with the same error.
- It’s subject to the same rate limits as a direct REST call to that endpoint — using MCP doesn’t grant a separate quota.
- OAuth 2.0 access tokens are still scoped to whatever your application was granted in the Developer Portal. Calling an operation your app hasn’t been granted returns the same
403/200100your app would get calling the REST API directly.
Credential visibility and revocation
MCP doesn’t introduce a separate credential store — an API key or OAuth token you hand to an MCP client is the same one you’d use for a direct REST call, managed the same way:- API keys — view, rotate, or revoke yours under Settings → Integrations → API in the Lofty CRM. There’s no separate list of “which MCP clients are using this key” — revoking the key there immediately stops every caller using it, MCP or otherwise.
- OAuth 2.0 tokens — manage your application’s grants in the Developer Portal; revoking or expiring an access token there has the same immediate effect on MCP calls as on direct REST calls.
Invalid or missing credentials
If the credential is missing, expired, or doesn’t resolve to a real user or application,invoke_api surfaces the underlying API’s own error rather than a generic MCP failure — for example: