Para desarrolladores

Referencia de Langrit para desarrolladores

Crea tu propio tutor, bot o script sobre la memoria de aprendizaje: un servidor MCP estándar, OAuth 2.1, tokens personales y una REST API.

Resumen

Dos entradas, una sola memoria. Cada llamada lee o escribe el mismo registro de aprendizaje que usa la app de Langrit, así que los repasos, las rachas y los niveles siguen sincronizados.

Servidor MCPhttps://langrit.com/mcp
REST APIhttps://langrit.com/api/v1

Inicio rápido

Conecta un cliente MCP

terminal
claude mcp add --transport http langrit https://langrit.com/mcp
JSON-RPC
curl https://langrit.com/mcp \
  -H "Authorization: Bearer lgr_…" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"whats_due","arguments":{"limit":5}}}'

Llama a la REST API con un token personal

REST
curl https://langrit.com/api/v1/due?limit=5 \
  -H "Authorization: Bearer lgr_…"

Autenticación

Envía un token bearer en cada petición. Usa OAuth 2.1 cuando la gente se conecte desde tu app, o un token personal para tus propios scripts.

OAuth 2.1

Los clientes encuentran el servidor de autorización mediante discovery, a partir de la cabecera WWW-Authenticate de un 401 en /mcp. Se admiten el registro dinámico de clientes y los documentos de metadatos de client ID, así que la mayoría de los clientes no necesitan configuración.

401
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://langrit.com/.well-known/oauth-protected-resource/mcp"
OAuth 2.1
GET https://langrit.com/.well-known/oauth-protected-resource/mcp
GET https://langrit.com/.well-known/oauth-authorization-server

authorize  https://langrit.com/oauth/authorize
token      https://langrit.com/oauth/token
register   https://langrit.com/oauth/register
revoke     https://langrit.com/oauth/revoke
  • Solo authorization code con PKCE (S256). La redirección lleva code, state e iss.
  • Los tokens de acceso duran una hora. Los refresh tokens duran 60 días y rotan en cada uso; un refresh token antiguo deja de funcionar.
  • URI de redirección: https, http en localhost (cualquier puerto) o un esquema privado de app.

Scopes

readPerfil, repasos pendientes, patrones, exportación
writeAdemás, guardar errores y calificar repasos (incluye read)

Tokens personales

Crea hasta cinco en Ajustes, Acceso API. Cada token se muestra una sola vez y puedes revocarlo cuando quieras.

Servidor MCP

Streamable HTTP, sin estado, respuestas en JSON. Envía cada mensaje JSON-RPC con POST; GET devuelve 405 porque no hay stream del servidor.

Herramientas

HerramientaScopeEntradaDevuelve
learner_profileread{}Idiomas, nivel, plan, repasos pendientes
whats_duereadlimit?Tarjetas pendientes con modo, pregunta y opciones
my_patternsreadwindow? 7d | 30d | 90dPatrones con recuentos y ejemplos
remember_mistakewritewrong, correct, rule?, context? | items[≤20]Tarjetas creadas o fusionadas, patrón, pista
grade_reviewwritecard_id, answer, mode, elapsed_ms?Correcto o no, respuesta esperada, próximo repaso, escalera

Prompts y recursos

Los prompts today, quiz, my-mistakes y write abren una sesión de estudio en los idiomas del estudiante. El recurso langrit://me devuelve el perfil en JSON.

Modos de pregunta

recognition incluye opciones y la respuesta esperada; typed y translate nunca revelan la respuesta antes de calificar.

REST API

La misma memoria por HTTPS. JSON de entrada y de salida.

EndpointQué hace
GET /api/v1/meTu perfil, tu plan y cuántos repasos tienes pendientes
POST /api/v1/mistakesGuardar un error o hasta 20 (write)
GET /api/v1/dueRepasos pendientes con el modo de pregunta
POST /api/v1/reviewsCalificar una respuesta (write)
GET /api/v1/patternsPatrones de error de 7, 30 o 90 días
GET /api/v1/exportTarjetas, errores y repasos en JSON, CSV o Anki

Ejemplo

mistakes
POST /api/v1/mistakes
Idempotency-Key: 6f1c…

{ "wrong": "de huis", "correct": "het huis", "rule": "huis is a het-word" }

201 -> { "created": 1, "merged": 0,
         "cards": [{ "id": 812, "pattern": "article_de_het", "pattern_label": "de vs het",
                     "merged": false, "l1_hint": "…" }] }
reviews
POST /api/v1/reviews
{ "card_id": 812, "answer": "het huis", "mode": "typed" }

200 -> { "correct": true, "expected": "het huis", "explanation_l1": null,
         "next_due_at": "2026-11-08T09:00:00Z", "interval_days": 4,
         "ladder": { "before": 1, "after": 2 }, "streak": 12 }

Errores

Los errores son JSON con error, message y hint. El hint está escrito para que un modelo pueda actuar; pásalo tal cual.

EstadoSignificado
401Token ausente, no válido o caducado
402Sin plan activo ni prueba (el perfil y la exportación siguen funcionando)
403Al token le falta el scope necesario
404Tarjeta o ruta desconocida
422El body no es válido
429Límite de peticiones o presupuesto diario de calificación con IA alcanzado
402
402 -> { "error": "subscription_required",
         "message": "The Langrit subscription for this account is not active.",
         "url": "https://langrit.com/pricing?ref=api",
         "hint": "Tell the learner their Langrit trial or subscription has ended and give them the url." }

Límites

60 peticiones por minuto por token en la REST API y 120 en MCP. Las peticiones POST aceptan una cabecera Idempotency-Key; una repetición en 24 horas devuelve la primera respuesta.

Exportación de datos

GET /api/v1/export lo devuelve todo en JSON. Añade format=csv con table=cards, mistakes o reviews, o format=anki para un archivo de importación de Anki. También funciona con un plan terminado.