MCP OAuth connectors — Notion, Higgsfield, and any standard remote MCP
Some hosted MCP servers do not accept a static access token. They answer
an unauthenticated initialize with HTTP 401 and a
WWW-Authenticate: resource_metadata=… challenge. Synaplan then follows the
standard path:
- RFC 9728 protected-resource metadata
- RFC 8414 authorization-server metadata
- RFC 7591 dynamic client registration (no vendor app to pre-create)
- Authorization-code + PKCE sign-in in the browser
- Bearer access token on every outbound MCP call
This is a generic mode on Channels → MCP Servers. Notion and Higgsfield are the first hosted templates; any other spec-compliant remote MCP works the same way from a custom URL.
Ships off. An administrator must turn on
MCP.OAUTH_CONNECTORS_ENABLEDbefore users see the Notion / Higgsfield cards or the Connect button. Existing token-based servers are unchanged.
See also the MCP overview.
Administrator: turn the feature on
- Open System Configuration → Channels → MCP servers.
- Enable Let users connect remote MCP servers that sign in with OAuth.
- Leave Allow the assistant to call connected MCP servers on (that is the
existing master switch
MCP.CLIENT_ENABLED).
| Flag | Meaning | Shipped value |
|---|---|---|
MCP.CLIENT_ENABLED |
Any outbound MCP traffic | on (seeded) |
MCP.OAUTH_CONNECTORS_ENABLED |
Users may run an OAuth consent flow | off (seeded) |
MCP.NODE_TIMEOUT |
Per-call timeout in seconds (3–120) | 15 |
Seeding is insert-if-missing. An operator 0 or 1 row is never overwritten
on deploy.
The redirect URI that every remote authorization server will call is:
https://YOUR-SYNAPLAN-HOST/api/v1/mcp-servers/oauth/callback
On Synaplan Cloud that is
https://web.synaplan.com/api/v1/mcp-servers/oauth/callback. Dynamic
registration sends this URI automatically — you do not register a Notion or
Higgsfield developer app.
User: connect Notion
- Channels → MCP Servers → Start from → Notion.
- Save the server (the URL is prefilled as
https://mcp.notion.com/mcp). - Click Connect and allow Synaplan access in the Notion consent screen.
- You return to Channels → MCP Servers with status Connected.
- Test connection lists Notion tools (search, fetch, …).
- Enable MCP Data Sources on at least one task (usually General Chat).
- Ask in chat, for example: "Find the onboarding page in Notion and summarize it."
Notion does not accept an ntn_… integration token on this MCP endpoint.
Sign-in is required.
User: connect Higgsfield
- Channels → MCP Servers → Start from → Higgsfield.
- Save (
https://mcp.higgsfield.ai/mcp) → Connect → allow access. - Test connection lists tools.
- History / asset reads go through the existing
mcp_fetchpath (read-only). - Image or video generation costs Higgsfield credits. Turn on Allow write actions on that server first; otherwise the assistant only reads.
Higgsfield may issue an access token without a refresh token. When it expires, the chip shows Action needed (reconnect) — click Reconnect. That is expected, not a broken connection.
Custom OAuth MCP server
Any remote Streamable HTTP MCP that speaks the same discovery flow works without a template:
- Start from → Custom server.
- Paste the HTTPS MCP URL (for example
https://mcp.example.com/mcp). - Set auth mode to OAuth when you save (or pick a template that does).
- Connect — Synaplan discovers the authorization server, registers itself, and opens the consent screen.
The server must:
- Advertise
resource_metadataon 401 (or serve/.well-known/oauth-protected-resource/…/mcp). - Support PKCE
S256. - Expose a registration endpoint (
token_endpoint_auth_method: none).
If Test connection returns HTTP 401 and mentions sign-in, use Connect instead of pasting a token.
Example configurations
These are the rows Synaplan stores after you save (secrets are encrypted and never returned by the API). Use them as a reference for support or for a custom remote MCP that looks the same.
Notion (hosted)
{
"name": "Notion",
"url": "https://mcp.notion.com/mcp",
"auth_mode": "oauth",
"enabled": true,
"allow_write": false
}
Discovered endpoints (filled in automatically on Connect):
| Resource | https://mcp.notion.com/mcp |
| Authorize | https://mcp.notion.com/authorize |
| Token | https://mcp.notion.com/token |
| Register | https://mcp.notion.com/register |
| Scopes | default |
Higgsfield (hosted)
{
"name": "Higgsfield",
"url": "https://mcp.higgsfield.ai/mcp",
"auth_mode": "oauth",
"enabled": true,
"allow_write": false
}
| Resource | https://mcp.higgsfield.ai/mcp |
| Authorize | https://mcp.higgsfield.ai/oauth2/authorize |
| Token | https://mcp.higgsfield.ai/oauth2/token |
| Register | https://mcp.higgsfield.ai/oauth2/register |
| Scopes | openid email offline_access |
Set "allow_write": true only when users should generate media (credits).
Token-based server (unchanged)
{
"name": "Company CRM",
"url": "https://crm.example.com/mcp",
"auth_mode": "bearer",
"auth_header": "Authorization",
"auth_token": "Bearer sk-…",
"enabled": true,
"allow_write": false
}
REST API — start sign-in
# After the server row exists:
curl -X POST "https://web.synaplan.com/api/v1/mcp-servers/42/oauth/start" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
# → { "success": true, "authorize_url": "https://mcp.notion.com/authorize?…" }
# Send the browser to authorize_url. The provider redirects to:
# /api/v1/mcp-servers/oauth/callback?code=…&state=…
# which then redirects to /channels/mcp?connected=42
Status chips
| Chip | Meaning |
|---|---|
| Connected | A usable access token is stored. |
| Action needed (reconnect) | Refresh is impossible (expired grant, or no refresh token). Click Reconnect. |
| Not connected | The row is saved but nobody has signed in yet. |
What the assistant can do once connected
- Notion search/fetch tools are read-safe → they appear in
mcp_fetchas soon as a topic has MCP Data Sources on. - Higgsfield reads →
mcp_fetch. Generation tools stay behind Allow write actions. - Same tenant isolation, SSRF guard, and timeouts as token-based MCP servers.
Out of scope
stdio / npx servers (the cluster cannot spawn them), SSE-only transport,
device-code flow, and pre-registered vendor OAuth apps. Those stay out of
Synaplan Cloud.