Перейти до основного вмісту

OAuth Redirect URIs для MCP у Cursor, Claude та ChatGPT: Реєстрація MCP-клієнтів у Casdoor

· Читання за 8 хв
Yang Luo
Casdoor Maintainer

Кожен 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/callbackDCR або auth.CLIENT_ID у mcp.jsonФіксований порт 8787
Cursor web та Cloud Agentshttps://www.cursor.com/agents/mcp/oauth/callbackDCR або auth.CLIENT_IDПри використанні DCR десктопний застосунок реєструє цей URI та локальний localhost URI
Cursor desktop (старіші версії)cursor://anysphere.cursor-mcp/oauth/callbackDCR або auth.CLIENT_IDCursor зробив loopback URI типовим у липні 2026 року
claude.ai, конектори Claude Desktop, Claude mobile, Coworkhttps://claude.ai/api/mcp/auth_callbackCIMD, потім DCR або client ID, введений у діалоговому вікні користувацького конектораЗапити роблять сервери Anthropic
Claude Codehttp://localhost:<port>/callback та http://127.0.0.1:<port>/callbackCIMDПорт змінюється для кожного сеансу
Claude Desktop через mcp-remotehttp://localhost:<port>/oauth/callbackDCRПорт походить від URL-адреси сервера
ChatGPThttps://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_id https://chatgpt.com/oauth/client.json (або варіантом для кожного callback) і використовує DCR, коли CIMD недоступний.
  • Cursor реєструється через DCR як публічний клієнт без секрету. У документації Cursor CIMD не згадується.
  • mcp-remote реєструється через DCR.

URI переспрямування беруться з запиту на реєстрацію або документа метаданих, тому нічого не потрібно вводити вручну. Зареєстровані клієнти працюють під обмеженою роллю, і їхні токени не можуть викликати API управління. Повні правила та організацію, в яку потрапляє клієнт, дивіться в розділі Dynamic client registration.

Варіант 2: створити додаток для клієнта​

Якщо ви залишаєте реєстрацію вимкненою, створіть один додаток для кожного клієнта, щоб мати можливість окремо відкликати їхні доступи:

  1. У консолі адміністратора Casdoor перейдіть до Identity > Applications і додайте додаток, наприклад cursor-mcp.
  2. Додайте URI переспрямування клієнта з таблиці до поля Redirect URLs. Для Cursor додайте всі три, оскільки різні встановлення Cursor надсилають різні URI.
  3. Встановіть Category як Agent. Про області дій (scopes) та типи надання доступу (grant types) дивіться Set up Casdoor for your MCP server.
  4. Надайте 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 systemPath
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 поміщає це значення в claim aud access token, і ваш MCP-сервер має перевіряти його. Див. Автентифікація MCP для потоку виявлення (discovery flow).

Додаткові матеріали на www.casdoor.com: OAuth для AI-агентів та сервери авторизації для MCP.

Посилання​