OAuth Redirect URIs для MCP у Cursor, Claude та ChatGPT: Реєстрація MCP-клієнтів у Casdoor
Кожен MCP-клієнт надсилає власний redirect URI при вході в захищений OAuth MCP-сервер. Cursor Desktop використовує http://localhost:8787/callback (версії до середини 2026 року використовували cursor://anysphere.cursor-mcp/oauth/callback), Cursor у браузері та Cursor Cloud Agents використовують https://www.cursor.com/agents/mcp/oauth/callback, claude.ai, конектори Claude Desktop, Claude mobile та Cowork використовують https://claude.ai/api/mcp/auth_callback, а ChatGPT використовує https://chatgpt.com/connector_platform_oauth_redirect або індивідуальний для кожного з'єднання https://chatgpt.com/connector/oauth/<callback-id>. Якщо ви увімкнете динамічну реєстрацію клієнтів у Casdoor, вам не потрібно буде вводити жодну з цих адрес: клієнти реєструватимуться самостійно або надаватимуть Casdoor документ метаданих ID клієнта. Ви додаєте їх до Redirect URLs лише тоді, коли створюєте застосунок Casdoor для клієнта вручну.
Redirect URIs за клієнтами
| Клієнт | Redirect URI | Як отримує client ID від Casdoor | Примітки |
|---|---|---|---|
| Cursor desktop (поточна версія) | http://localhost:8787/callback | DCR або auth.CLIENT_ID у mcp.json | Фіксований порт 8787 |
| Cursor web та Cloud Agents | https://www.cursor.com/agents/mcp/oauth/callback | DCR або auth.CLIENT_ID | При використанні DCR десктопний застосунок реєструє цей URI та локальний localhost URI |
| Cursor desktop (старіші версії) | cursor://anysphere.cursor-mcp/oauth/callback | DCR або auth.CLIENT_ID | Cursor зробив loopback URI типовим у липні 2026 року |
| claude.ai, конектори Claude Desktop, Claude mobile, Cowork | https://claude.ai/api/mcp/auth_callback | CIMD, потім DCR або client ID, введений у діалоговому вікні користувацького конектора | Запити роблять сервери Anthropic |
| Claude Code | http://localhost:<port>/callback та http://127.0.0.1:<port>/callback | CIMD | Порт змінюється для кожного сеансу |
Claude Desktop через mcp-remote | http://localhost:<port>/oauth/callback | DCR | Порт походить від URL-адреси сервера |
| ChatGPT | https://chatgpt.com/connector_platform_oauth_redirect або https://chatgpt.com/connector/oauth/<callback-id> | CIMD, DCR або попередньо визначений клієнт | Скопіюйте точне значення з ChatGPT |
Ці значення взято з документації постачальників станом на 2 листопада 2026 року (див. References). Клієнти можуть змінити їх. Якщо вхід не вдається, прочитайте параметр redirect_uri запиту авторизації в адресному рядку браузера та порівняйте його з тим, що налаштувано в Casdoor.
Ця таблиця застосовується у двох конфігураціях: вбудований сервер MCP у Casdoor на /api/mcp та ваш власний сервер MCP, який використовує Casdoor як сервер авторизації. В обох випадках клієнт знаходить Casdoor через метадані захищеного ресурсу (RFC 9728) і отримує свій ідентифікатор клієнта від Casdoor.
Варіант 1: дозволити клієнтам реєструватися самостійно
Casdoor підтримує динамічну реєстрацію клієнтів (RFC 7591) на /api/oauth/register, а також документи метаданих ідентифікатора клієнта (CIMD), де client_id — це HTTPS-URL JSON-документа, що містить список URI переспрямування клієнта. Один перемикач керує обома функціями: Enable dynamic client registration в організації. Він вимкнений за замовчуванням для всіх організацій, включаючи built-in.
Якщо перемикач увімкнено для built-in, документ виявлення показує те, що шукають клієнти:
curl -s https://your-casdoor.com/.well-known/openid-configuration | jq '{
registration_endpoint,
client_id_metadata_document_supported,
code_challenge_methods_supported,
token_endpoint_auth_methods_supported,
authorization_response_iss_parameter_supported
}'
{
"registration_endpoint": "https://your-casdoor.com/api/oauth/register",
"client_id_metadata_document_supported": true,
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "private_key_jwt", "none"],
"authorization_response_iss_parameter_supported": true
}
Кожен клієнт потім обирає свій метод:
- Claude використовує CIMD лише тоді, коли в метаданих є і
client_id_metadata_document_supported: true, іnoneуtoken_endpoint_auth_methods_supported. У Casdoor обидва значення присутні після увімкнення перемикача, тому Claude ідентифікує себе через URL документа, а Casdoor створює додаток з назвоюcimd_.... Інакше Claude повертається до DCR. - ChatGPT надає перевагу CIMD з
client_idhttps://chatgpt.com/oauth/client.json(або варіантом для кожного callback) і використовує DCR, коли CIMD недоступний. - Cursor реєструється через DCR як публічний клієнт без секрету. У документації Cursor CIMD не згадується.
mcp-remoteреєструється через DCR.
URI переспрямування беруться з запиту на реєстрацію або документа метаданих, тому нічого не потрібно вводити вручну. Зареєстровані клієнти працюють під обмеженою роллю, і їхні токени не можуть викликати API управління. Повні правила та організацію, в яку потрапляє клієнт, дивіться в розділі Dynamic client registration.
Варіант 2: створити додаток для клієнта
Якщо ви залишаєте реєстрацію вимкненою, створіть один додаток для кожного клієнта, щоб мати можливість окремо відкликати їхні доступи:
- У консолі адміністратора Casdoor перейдіть до Identity > Applications і додайте додаток, наприклад
cursor-mcp. - Додайте URI переспрямування клієнта з таблиці до поля Redirect URLs. Для Cursor додайте всі три, оскільки різні встановлення Cursor надсилають різні URI.
- Встановіть Category як
Agent. Про області дій (scopes) та типи надання доступу (grant types) дивіться Set up Casdoor for your MCP server. - Надайте Client ID клієнту.
Секрет клієнта для цих клієнтів є необов'язковим. Casdoor приймає обмін коду авторизації без секрету, якщо запит використовував PKCE, а Cursor, Claude та ChatGPT використовують PKCE з методом S256. Якщо клієнт надсилає секрет, він має бути правильним.
Куди помістити Client ID:
-
Cursor: об'єкт
authу файлі~/.cursor/mcp.jsonабо.cursor/mcp.json. При використанні статичногоCLIENT_IDдесктопний додаток Cursor надсилає лише localhost-URI переспрямування.{
"mcpServers": {
"casdoor": {
"url": "https://your-casdoor.com/api/mcp",
"auth": {
"CLIENT_ID": "${env:CASDOOR_MCP_CLIENT_ID}",
"scopes": ["application:read", "user:read"]
}
}
}
} -
Claude: поле OAuth client ID у діалоговому вікні налаштування кастомного конектора. Зареєструйте
https://claude.ai/api/mcp/auth_callback. -
ChatGPT: ChatGPT також працює з попередньо визначеними OAuth-клієнтами. Скопіюйте URI переспрямування зі сторінки управління MCP-сервером у ChatGPT, оскільки форма використання залежить від сервера авторизації.
Покрокові інструкції: Cursor, Claude Desktop, ChatGPT.
Як Casdoor зіставляє URI переспрямування
Casdoor порівнює redirect_uri запиту з кожним записом у полі Redirect URLs:
- Схема, хост і шлях мають збігатися. Рядок запиту (query string) не порівнюється.
- Порт має збігатися, за винятком loopback-хостів. Коли обидва URI використовують однаковий loopback-хост (
localhost,127.0.0.1або::1), Casdoor ігнорує порт, як того вимагає RFC 8252 для нативних застосунків.localhostі127.0.0.1— це різні хости, тому Claude Code потребує наявності обох URI:http://localhost/callbackтаhttp://127.0.0.1/callback. - URI переспрямування на піддомені зареєстрованого хоста також збігаються, тому
https://example.com/cbприймаєhttps://app.example.com/cb. Реєструйте максимально конкретний хост. - Кастомні схеми, такі як
cursor://, зіставляються за тими ж правилами. URI зі схемамиjavascript:,data:таvbscript:завжди відхиляються.
Оскільки порт loopback ігнорується, реєстрація через mcp-remote або Claude Code продовжує працювати, навіть якщо локальний порт змінюється між сесіями.
Де розміщується claude_desktop_config.json
У документації MCP наведені ці шляхи. У Claude Desktop меню Settings > Developer > Edit Config відкриває файл і створює його, якщо він відсутній.
| Operating system | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Claude Desktop підключається до віддаленого MCP-сервера одним із двох способів, які використовують різні URI переспрямування:
-
Як конектор, доданий у налаштуваннях конекторів Claude. Сервери Anthropic виконують процес OAuth, URI переспрямування становить
https://claude.ai/api/mcp/auth_callback, і Casdoor має бути доступним з інтернету. -
Через
claude_desktop_config.json, зmcp-remoteяк локальним мостом. Процес OAuth виконується на вашому комп'ютері, а URI переспрямування має виглядhttp://localhost:<port>/oauth/callback:{
"mcpServers": {
"casdoor": {
"command": "npx",
"args": ["mcp-remote", "https://your-casdoor.com/api/mcp"]
}
}
}
Після редагування файлу повністю закрийте Claude Desktop і запустіть його знову.
Хостовані клієнти потребують публічного Casdoor
Конектори ChatGPT і Claude звертаються до вашого MCP-сервера та Casdoor із серверів своїх вендорів, а не з вашого комп'ютера. Casdoor має бути доступним за публічним HTTPS із валідним сертифікатом. Запити від Anthropic надходять з діапазону 160.79.104.0/21, якщо ви фільтруєте за IP-адресами. Десктопний Cursor, Claude Code та mcp-remote виконують процес локально, тому для них підходить Casdoor у вашій мережі.
Ще дві речі, які перевіряють хостовані клієнти і які Casdoor вже виконує:
- Issuer у відповіді (RFC 9207): ChatGPT відхиляє відповідь авторизації без правильного
issі використовує свій стабільний redirect URI лише з серверами авторизації, які відповідають вимогам RFC 9207. Casdoor оголошує підтримку у своїх метаданих і додаєissдо перенаправлення. - Індикатори ресурсів (RFC 8707): ChatGPT надсилає
resourceз URL MCP-сервера під час запитів на авторизацію та отримання токенів. Casdoor поміщає це значення в claimaudaccess token, і ваш MCP-сервер має перевіряти його. Див. Автентифікація MCP для потоку виявлення (discovery flow).
Додаткові матеріали на www.casdoor.com: OAuth для AI-агентів та сервери авторизації для MCP.
Посилання
- Cursor: Model Context Protocol (MCP), розділ "Static OAuth for remote servers"
- Форум Cursor: OAuth redirect URI changed from cursor:// to http://localhost
- Anthropic: Authentication for connectors
- Model Context Protocol: Connect to local MCP servers
- OpenAI: Authenticate users
mcp-remote: README- Casdoor: Динамічна реєстрація клієнтів, Налаштування Casdoor для вашого MCP-сервера