API de IA y MCP

El módulo de IA es central (siempre está montado). Las claves de proveedor se sellan en reposo; las lecturas las enmascaran.

Proveedores

  • GET /admin/p/{ref}/ai/providers — lista con api_key_hint enmascarado (ai:read).

  • POST /admin/p/{ref}/ai/providers{ name, kind, model?, base_url?, api_key?, capabilities?, is_default? } (ai:write).

  • GET /ai/providers/{id} devuelve la clave sin enmascarar para el formulario de edición; PATCH / DELETE /{id} como cabría esperar.

Proveedor kind: openai, anthropic (claude), deepseek, mistral, qwen, zai — o cualquier endpoint compatible con OpenAI mediante base_url.

Traducción en línea

POST /admin/p/{ref}/ai/translate

Traducción BYOK (ai:read). Cuerpo { provider_id?, from, to, text, field? }. Despacha según el tipo de proveedor (Anthropic nativo /v1/messages, o el driver compatible con OpenAI).

{ "data": { "translation": "…", "provider": "…", "model": "…" } }

MCP

Da a cualquier cliente MCP (Claude Desktop, Cursor, claude.ai) un endpoint listo para agentes.

  • POST/GET/DELETE /admin/p/{ref}/ai/mcp/tokens — gestiona tokens MCP (POST devuelve el texto plano una sola vez).

  • POST /mcp — el endpoint JSON-RPC de MCP. Auth: Bearer <mcp-token>; el token resuelve el ámbito del proyecto en cada llamada.

  • GET /.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server y /oauth/{register,authorize,token} — descubrimiento + flujo OAuth 2.1 (RFC 9728) para que un cliente pueda conectarse sin un token precompartido.