diff --git a/MCP-Servers.md b/MCP-Servers.md index cee0df2..fde3420 100644 --- a/MCP-Servers.md +++ b/MCP-Servers.md @@ -100,6 +100,7 @@ For remote MCP servers that support the Streamable HTTP transport: | `headers` | no | Custom HTTP headers to include with every request | | `oauth.clientId` | no | OAuth client ID. Omit to use Dynamic Client Registration (auto-registers on first `.mcp auth`) | | `oauth.callbackPort` | no | Callback port for the OAuth redirect listener. Required when the server enforces a specific redirect URI port | +| `oauth.redirectHost` | no | Hostname used in the OAuth redirect URI. Defaults to `127.0.0.1`. Set to `localhost` if the server's registered redirect URI uses that form instead (e.g. some Slack OAuth apps) | ## SSE Servers @@ -127,6 +128,7 @@ prefer `http` where the server supports it): | `headers` | no | Custom HTTP headers to include with every request | | `oauth.clientId` | no | OAuth client ID. Omit to use Dynamic Client Registration (auto-registers on first `.mcp auth`) | | `oauth.callbackPort` | no | Callback port for the OAuth redirect listener. Required when the server enforces a specific redirect URI port | +| `oauth.redirectHost` | no | Hostname used in the OAuth redirect URI. Defaults to `127.0.0.1`. Set to `localhost` if the server's registered redirect URI uses that form instead (e.g. some Slack OAuth apps) | **Note:** Both `http` and `sse` types use the same underlying transport, which auto-negotiates the protocol with the server. The `type` field primarily serves as documentation of which protocol the @@ -227,6 +229,27 @@ fixed port. Use `oauth.callbackPort` in that case: } ``` +Coyote's redirect URI uses `127.0.0.1` by default (e.g. `http://127.0.0.1:3118/callback`). If the OAuth app +you registered uses `localhost` instead, set `oauth.redirectHost` to match: + +```json +{ + "mcpServers": { + "notion": { + "type": "http", + "url": "https://mcp.slack.com/mcp", + "oauth": { + "clientId": "your-slack-client-id", + "redirectHost": "localhost" + } + } + } +} +``` + +> **Note:** This only applies when using a pre-registered `clientId`. When DCR is used (no `clientId` +> configured), Coyote registers its own redirect URI so the host format never mismatches. + ### Using a static token instead of OAuth If the server issues long-lived tokens (e.g. Notion internal integrations), you can skip the OAuth flow