Auth0 MCP Server

Auth0 MCP Server

MCP server that provides access to Auth0 Management API v2, offering read-only tools grouped by categories for querying Auth0 resources.

Category
访问服务器

README

День 16 — Подключение MCP (Auth0 Management API v2)

Локальный MCP-сервер, который даёт доступ к Auth0 Management API v2 в виде набора инструментов, сгруппированных по категориям документации (https://auth0.com/docs/api/management/v2), и минимальный MCP-клиент, который подключается к серверу и выводит список инструментов.

Один и тот же сервер подключается и к Claude Code (через .mcp.json), и к нашему агенту (через MCP-клиент / мост mcp_tools.py).

Что внутри

Файл Роль
server.py MCP-сервер (stdio). list_tools → каталог инструментов; call_tool → реальный GET к Auth0.
client.py Минимальный MCP-клиент — РЕЗУЛЬТАТ дня: подключается и печатает список инструментов.
categories.py Каталог категорий Management API v2 → инструменты. Источник списка.
auth0_client.py Транспорт к Auth0: M2M-токен (client_credentials, с кэшем) + GET-запросы.
config.py Учётные данные из .env или файла auth0.settings.
mcp_tools.py Мост MCP → агент (async): инструменты в формате function-calling DeepSeek + вызов.
mcp_bridge.py Синхронная обёртка над mcp_tools (фоновый loop) — для синхронного агента.
.mcp.json Регистрация сервера в Claude Code.
agent.py / agents.py / web.py / … Агент дня 15 (Auth0 FSM), с встроенными инструментами Auth0 MCP.
day16.py CLI-демо: агент сам вызывает инструменты MCP и отвечает по реальному тенанту.

Объём инструментов (День 16: только чтение)

37 категорий → 64 инструмента, все read-only (только GET, ничего не меняют в тенанте). Имя: auth0_<категория>_<операция>:

  • auth0_users_list / auth0_users_get / auth0_users_by_email_list
  • auth0_clients_list / auth0_clients_get, auth0_client_grants_list
  • auth0_connections_*, auth0_resource_servers_*, auth0_roles_*, auth0_organizations_*, auth0_grants_list, auth0_device_credentials_list
  • auth0_actions_*, auth0_action_triggers_list, auth0_rules_*, auth0_rules_configs_list, auth0_hooks_*, auth0_flows_*, auth0_forms_*
  • auth0_logs_*, auth0_log_streams_*
  • auth0_email_templates_get, auth0_emails_get, auth0_branding_*, auth0_prompts_*
  • auth0_attack_protection_*, auth0_anomaly_check_ip, auth0_blacklists_list, auth0_user_blocks_*, auth0_network_acls_*
  • auth0_custom_domains_*, auth0_keys_*, auth0_guardian_*
  • auth0_sessions_get, auth0_refresh_tokens_get, auth0_jobs_*, auth0_self_service_profiles_*, auth0_tenants_settings, auth0_stats_*

Создание/изменение/удаление (POST/PATCH/DELETE) сознательно не включены — добавим отдельным этапом.

Установка

pip install -r requirements.txt        # mcp, httpx, python-dotenv
cp .env.example .env                   # впишите данные Auth0 M2M-приложения

.env (или файл auth0.settings рядом с проектом):

AUTH0_DOMAIN=dev-xxxx.us.auth0.com
AUTH0_CLIENT_ID=...
AUTH0_CLIENT_SECRET=...

M2M-приложение в Auth0 должно быть авторизовано для «Auth0 Management API» (audience https://<domain>/api/v2/) с нужными read-scope (read:users, read:clients, …). Секреты в репозиторий не попадают (.env, auth0.settings в .gitignore).

Где работает сервер, где клиент, как видеть логи

Есть ДВА транспорта — выбирайте по задаче:

1. stdio (по умолчанию; так работают Claude Code и наш агент)

Сервер не висит постоянно — клиент (или Claude Code, или агент) запускает server.py как дочерний подпроцесс и общается с ним через stdin/stdout. Логи сервера идут в его stderr. Чтобы видеть их отдельно — перенаправьте в файл и смотрите tail -f во втором терминале:

# терминал 1 — «логи сервера» (вызовы инструментов + запросы к Auth0):
touch mcp_server.log && tail -f mcp_server.log

# терминал 2 — клиент; его собственные логи показывает флаг -v:
AUTH0_MCP_LOG=mcp_server.log python3 client.py -v --call auth0_clients_list --arg per_page=2

[client] — что делает клиент (initialize → list_tools → call_tool); [mcp] / [auth0] — что делает сервер (◀ вызов инструмента → POST /oauth/token → GET …/clients → HTTP 200 → ▶ результат).

2. HTTP (сервер — ОТДЕЛЬНЫЙ постоянный процесс в своём терминале)

Самый наглядный режим: сервер и клиент — два независимых процесса.

# ТЕРМИНАЛ 1 — СЕРВЕР (логи API видно прямо в консоли):
python3 server.py --http               # слушает http://127.0.0.1:8765/mcp

# ТЕРМИНАЛ 2 — КЛИЕНТ (подключается к запущенному серверу):
python3 client.py --http -v --call auth0_clients_list --arg per_page=2

В терминале 1 на каждый вызов видно цепочку:

◀ ВЫЗОВ ИНСТРУМЕНТА auth0_clients_list args={'per_page': 2}
→ POST /oauth/token (client_credentials, audience=…/api/v2/)
← токен получен, действует ~86400s
→ GET …/api/v2/clients  [per_page=2]
← HTTP 200 (136 байт) — список из 2 элементов
▶ РЕЗУЛЬТАТ auth0_clients_list: 179 символов JSON отдано клиенту

Claude Code и агент (mcp_bridge) используют именно stdio — это стандарт для локальных MCP. HTTP-режим удобен, чтобы «вживую» наблюдать, как клиент дёргает сервер, а сервер — Auth0 API.

Проверка (РЕЗУЛЬТАТ дня)

1. Соединение + список инструментов (учётные данные не требуются — сервер не берёт токен, чтобы перечислить инструменты):

python3 client.py

Ожидается: ✅ MCP-соединение установлено и 🧰 Инструментов получено: 64, сгруппированных по категориям.

2. Живой вызов инструмента (нужны учётные данные Auth0):

python3 client.py --call auth0_clients_list --arg per_page=2 --arg fields=name,app_type
python3 client.py --call auth0_tenants_settings

3. Каталог без MCP/сети (быстрый офлайн-просмотр):

python3 categories.py

4. Что получит агент (инструменты в формате DeepSeek tools):

python3 mcp_tools.py

Подключение к Claude Code

Сервер зарегистрирован в .mcp.json. Claude Code обнаруживает его автоматически и запрашивает подтверждение (⏸ Pending approval). Проверка/одобрение:

claude mcp list          # покажет: auth0: … (статус)

После одобрения инструменты auth0_* доступны прямо в Claude Code.

Подключение к агенту (стиль дня 15) — ВСТРОЕНО

Агент дня 15 (Auth0 FSM, оркестратор + команда под-агентов) теперь сам пользуется инструментами Auth0 через MCP. Точка интеграции — единственный вызов модели в Agent._run_stage: добавлен tool-calling цикл (Agent._chat_stage). Пока модель просит вызвать инструмент — агент исполняет его через MCP-мост, кладёт результат в диалог и спрашивает снова (до 4 раз), затем выдаёт финальный ответ по фактам.

  • mcp_bridge.SyncAuth0MCP — синхронный мост (фоновый event loop + одна MCP-сессия), чтобы синхронный агент мог звать async MCP без переписывания на async.
  • llm_client.chat(..., tools=...) — добавлена поддержка function-calling: модель может вернуть tool_calls, клиент возвращает их в ChatResult.
  • Инструменты передаются только на не-training этапах; они read-only, поэтому безопасны и согласуются с инвариантами дня 14.

Запуск с агентом:

python3 day16.py                 # CLI: агент отвечает по реальному тенанту через MCP
DEEPSEEK_DB=day16.db uvicorn web:app --reload   # веб: под ответом видно 🔧 вызовы Auth0 MCP

В вебе агент создаётся с общим мостом (web._mcp); если учётных данных Auth0 нет — мост не поднимается, и агент работает как раньше, без инструментов.

Низкоуровневый async-доступ (тот же сервер, для своих сценариев):

async with Auth0MCP() as mcp:
    tools = await mcp.deepseek_tools()        # спецификации tools для модели
    text = await mcp.call(name, arguments)    # выполнить tool_call от модели

Архитектура (слои)

client.py / Claude Code / агент  ──MCP(stdio)──▶  server.py
                                                     │ categories.py (каталог)
                                                     ▼
                                                 auth0_client.py ──HTTPS──▶ Auth0 Management API v2
                                                     ▲
                                                 config.py (.env / auth0.settings)

server.py ничего не знает про конкретные эндпоинты — он разворачивает каталог categories.py в инструменты и проксирует GET через auth0_client.py. Чтобы добавить категорию/операцию — правим только categories.py.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选