Skip to content

Salesforce Hosted MCP — "MCP server returned 405" after successful OAuth (sandbox, sobject-all) #251

Description

@trevhud

MCP server URL or name

https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-all

How are you connecting to this server?

From a custom connector URL I entered manually

Where does the issue occur?

After completing OAuth — token issued by Salesforce, MCP handshake fails.

When did you last reproduce this?

2026-05-01

Browser and OS

Chrome on macOS Darwin 24.6.0 (Sonoma); also reproducible in Claude Desktop on the same machine.

Describe the issue

OAuth handshake completes successfully — Salesforce issues the token and the
External Client App's OAuth Usage page shows the connection. Claude then
fails with "Authorization with the MCP server failed" when attempting the
post-auth MCP handshake.

The error redirect exposes the underlying cause:

?oauth_error_detail=The+MCP+server+returned+a+405+status+code+error.

This is consistent with Anthropic's hosted-MCP broker probing `GET /mcp`,
getting back a spec-compliant HTTP 405, and treating it as fatal. Per the
MCP Streamable HTTP spec, servers MUST respond to `GET` with either
`text/event-stream` or `405 Method Not Allowed` — Salesforce's choice of
405 is spec-compliant.

Critical evidence this is broker-side, not config: the same External
Client App, same Consumer Key, same MCP server URL connects and works
perfectly via Claude Code CLI (native HTTP transport, no pre-flight `GET`
probe). It only fails through the Anthropic broker used by claude.ai web
and Claude Desktop.

Same pattern reported in #171, #184, #198, #246.

Error details

```
Authorization with the MCP server failed. You can check your credentials
and permissions. If this persists, share this reference with support:
ofid_ff0162a6df842c68
```

Additional ofid from a separate retry: `ofid_301cdeb948d766b2`

Redirect URL after the failure:

https://claude.ai/customize/connectors?oauth_error_detail=The+MCP+server+returned+a+405+status+code+error.

Expected behavior

Broker should accept `HTTP 405` on `GET /mcp` as spec-compliant and proceed
to `POST` message exchange — same path Claude Code takes successfully.

Additional context

External Client App configuration matches the canonical Salesforce
doc: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html

  • Scopes: `mcp_api` + `refresh_token`
  • PKCE: enabled
  • Issue JSON Web Token (JWT)-based access tokens for named users: enabled
  • Enable Authorization Code and Credentials Flow: disabled
  • Require secret for Web Server Flow: disabled
  • Require secret for Refresh Token Flow: disabled
  • Callback URLs: `https://claude.ai/api/mcp/auth_callback\`, `http://localhost:8080/callback\`

`sobject-all` MCP server is activated in Setup. Already tried the
deactivate→reactivate workaround from #171 — no change.

Same ECA + Consumer Key works in Claude Code CLI against the same MCP
server URL, both today.

Salesforce-side context: forcedotcom/mcp-hosted#12, where @rossbelmont
noted Salesforce is "working with Anthropic on a Claude-specific issue."

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions