Lune

Conocimiento y herramientas de investigación científica

Documentación

@retrograde-labs/lune-mcp-server

El servidor MCP oficial de Lune Research. Permite que un agente de IA busque el texto completo de artículos de conferencias de primer nivel, siga citas y consulte orientación seleccionada sobre metodología de investigación, para que sus respuestas puedan citar el título, los autores y la conferencia de un artículo en lugar de depender de la memoria.

Instalación

Alojado (recomendado). Añade esta URL a cualquier cliente que hable Streamable HTTP:

https://mcp.luneresearch.com

Un cliente compatible con la autorización MCP te inicia sesión a través del navegador, por lo que no hay ningún token que pegar o rotar. En Claude Code:

claude mcp add --transport http --scope user lune https://mcp.luneresearch.com

Luego ejecuta /mcp dentro de Claude Code, elige lune e inicia sesión a través de la pestaña del navegador que se abre.

Un cliente sin soporte OAuth envía una clave de acceso de Lune en el encabezado Authorization en su lugar. Crea una en la página de Credenciales: abre API keys y haz clic en New key. Esta solicitud lista las herramientas, lo que la convierte en una forma rápida de verificar una clave. Lee la clave de LUNE_API_KEY, configurada desde tu gestor de contraseñas o desde un archivo que solo tú puedas leer:

printf 'Authorization: Bearer %s\n' "$LUNE_API_KEY" |
  curl https://mcp.luneresearch.com \
    -H @- \
    -H "Content-Type: application/json" \
    -H "Accept: application/json, text/event-stream" \
    -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

La clave llega a curl a través de su entrada, por lo que permanece fuera de tu historial de shell y de la lista de procesos.

Las notas de configuración para aplicaciones específicas están en la documentación: apps web de IA como ChatGPT, Claude y Perplexity, y agentes de IA locales como Cursor, VS Code y Codex.

stdio local. Para clientes que solo hablan stdio, ejecuta el paquete directamente y entrégale una clave de acceso. Necesita Node.js 22 o más reciente:

{
  "mcpServers": {
    "lune": {
      "command": "npx",
      "args": ["-y", "@retrograde-labs/lune-mcp-server"],
      "env": { "LUNE_API_KEY": "lune_your_access_key" }
    }
  }
}

El servidor lee LUNE_API_KEY del entorno y escribe diagnósticos en stderr, nunca en stdout, para que el marco JSON-RPC permanezca intacto.

Herramientas

Doce herramientas. La mayoría sigue un prefijo: search_* encuentra candidatos, get_* recupera algo de lo que ya tienes una referencia, y list_* navega. El endpoint alojado también ofrece get_more_tools, que un agente llama para informar a Lune sobre una capacidad que necesitaba y no pudo encontrar. El paquete stdio no lo incluye.

Encontrar artículos

HerramientaQué hace
search_papersBúsqueda híbrida vectorial + BM25 sobre el corpus
search_papers_manyMuchas variantes de consulta en una sola llamada, fusionadas por fusión de rango recíproco
search_related_papersLos vecinos más cercanos de un artículo que ya tienes
list_conferencesConferencias indexadas, opcionalmente filtradas por categoría
get_conference_papersLos artículos de una conferencia, paginados

Leerlos

HerramientaQué hace
get_paper_fulltextTexto completo analizado, como markdown o JSON
get_paper_citationsEl grafo de citas, en cualquier dirección

Trabajar con muchos a la vez

HerramientaQué hace
extract_from_papersExtrae los mismos campos estructurados de un conjunto de artículos
verify_claimsVerifica cada afirmación contra el corpus, con una cita textual cuando existe
gather_evidenceEvalúa si la evidencia es suficiente y nombra lo que falta

Metodología de investigación

HerramientaQué hace
search_research_guidanceEl corpus seleccionado de metodología y reproducibilidad
get_research_guidance_docEl texto completo de un documento de orientación

Prompts

Seis prompts, que muchos clientes MCP listan como comandos de barra. Cada uno entrega al agente un resumen para una tarea de investigación común y nombra las herramientas a llamar, de modo que la tarea se resuelve con un solo comando en lugar de un plan que debas detallar.

PromptQué haceArgumentos
/literature_reviewExamina un tema: los temas principales, el trabajo fundacional y reciente, y las brechas abiertastopic (+ venues, since_year)
/find_related_workLee tu resumen y luego encuentra el trabajo previo para citar y del que diferenciarteabstract (+ venues)
/compare_papersConstruye una tabla comparativa entre artículos, leída de su texto completotopic (+ columns)
/verify_draftVerifica cada afirmación en un borrador, con una cita textual cuando existedraft
/trace_citationsTraza el linaje de un artículo: en qué se apoya y qué se apoya en élpaper
/research_methodologyAsesoramiento fundamentado sobre diseño experimental, ablaciones, evaluación, réplicas, conferenciasquestion

Autenticación

El endpoint alojado acepta una credencial en cada solicitud, como Authorization: Bearer <credential>. El paquete stdio lee una clave de acceso de LUNE_API_KEY en su lugar. La credencial es una de las siguientes:

  • Un token de acceso OAuth, que un cliente MCP obtiene al iniciar sesión a través del navegador. Solo endpoint alojado.
  • Una clave de acceso de Lune (lune_...), creada en la página de Credenciales en API keys. Funciona en ambos transportes.

Una conexión OAuth siempre factura al equipo personal de la persona que inició sesión, usando su plan, asignación diaria y créditos. Una clave de acceso factura al equipo en el que fue creada, por lo que una clave es cómo el plan de un equipo compartido paga por un agente. Cómo se cuentan las solicitudes está en cuotas y facturación.

OAuth para desarrolladores de conectores

La mayoría de los clientes MCP ejecutan este flujo por su cuenta. Si estás construyendo un conector, los detalles siguen a continuación. auth.md recorre cada solicitud con curl.

Un POST https://mcp.luneresearch.com no autenticado responde a 401 con este desafío:

WWW-Authenticate: Bearer resource_metadata="https://mcp.luneresearch.com/.well-known/oauth-protected-resource", scope="papers:read guidance:read account:read"

El documento de recurso protegido al que apunta nombra el servidor de autorización en authorization_servers[0]. Ese servidor es https://api.luneresearch.com, el servidor de autorización para conectores MCP. Publica metadatos RFC 8414 en https://api.luneresearch.com/.well-known/oauth-authorization-server y no tiene documento de descubrimiento de OpenID Connect.

EndpointURL
Emisorhttps://api.luneresearch.com
Autorizaciónhttps://api.luneresearch.com/oauth/authorize
Tokenhttps://api.luneresearch.com/oauth/token
Registro de cliente (RFC 7591)https://api.luneresearch.com/oauth/register
Revocación (RFC 7009)https://api.luneresearch.com/oauth/revoke
JWKShttps://api.luneresearch.com/.well-known/jwks.json
Metadatos del servidor de autorizaciónhttps://api.luneresearch.com/.well-known/oauth-authorization-server
Metadatos del recurso protegidohttps://mcp.luneresearch.com/.well-known/oauth-protected-resource

El flujo:

  1. Registra un cliente. El registro dinámico de clientes es la única forma de obtener un client_id; no hay ID de cliente pre-registrados. Los clientes son públicos, por lo que no hay secreto y el método de autenticación del endpoint de token es none. Una plataforma que no puede registrarse sobre la marcha puede hacerlo una vez manualmente y conservar el client_id:

    curl -X POST https://api.luneresearch.com/oauth/register \
      -H "Content-Type: application/json" \
      -d '{"client_name": "My connector", "redirect_uris": ["https://example.com/oauth/callback"]}'
    
  2. Envía a la persona al endpoint de autorización con response_type=code, client_id, redirect_uri, scope, state, code_challenge, code_challenge_method=S256 y resource. PKCE con S256 es obligatorio, y también lo son state y scope.

  3. Maneja la devolución de llamada. Después de que la persona inicie sesión y apruebe, Lune redirige a tu redirect_uri con code, state y iss=https://api.luneresearch.com (RFC 9207). Verifica que state sea el que enviaste y que iss sea igual al emisor. Si la persona rechaza, la redirección lleva error=access_denied con el mismo state y iss.

  4. Intercambia el código. Publica grant_type=authorization_code, code, redirect_uri, client_id, code_verifier y resource al endpoint de token como application/x-www-form-urlencoded.

  5. Llama al servidor con Authorization: Bearer <access_token>. Una vez que el token expire, el servidor responde a 401 con error="invalid_token". Para actualizar, publica grant_type=refresh_token y refresh_token al endpoint de token.

Requisitos y límites:

  • Solicita exactamente papers:read guidance:read account:read, los alcances que el documento de recurso protegido lista. Juntos cubren todas las herramientas.
  • Envía resource=https://mcp.luneresearch.com tanto en la solicitud de autorización como en la solicitud de token. Sin él, el token de acceso está vinculado a tu client_id en lugar del servidor, y las solicitudes en la versión de protocolo 2026-07-28 fallan con 401 invalid_token, que la persona ve como un bucle de inicio de sesión. Las versiones de protocolo más antiguas aún aceptan dicho token, pero solo por un período de transición.
  • Las URI de redirección deben usar https, http en 127.0.0.1, [::1] o localhost, o un esquema de uso privado como cursor://, y no deben contener un fragmento. La solicitud de autorización debe repetir una URI registrada exactamente, incluido el puerto.
  • Un código de autorización expira después de 10 minutos y funciona una sola vez; un intercambio fallido lo consume. Los tokens de acceso son JWT RS256 que expiran después de una hora (expires_in: 3600).
  • Cada actualización devuelve un nuevo token de actualización. Guárdalo y descarta el anterior. Cada token de actualización es válido durante 90 días, por lo que una conexión en uso regular no expira. Presentar un token de actualización más de 30 segundos después de haber sido reemplazado revoca todos los tokens de actualización en esa cadena, y la persona tiene que conectarse nuevamente. Los tokens de acceso ya emitidos siguen funcionando hasta que expiren.
  • Para desconectar, publica token=<refresh_token> (codificado en formulario) al endpoint de revocación.

Alcances

papers:read cubre el corpus de artículos, texto completo y citas, guidance:read cubre el corpus de orientación de investigación, y account:read lee tu identidad y uso.

Una credencial que carece del alcance que una herramienta necesita falla de manera diferente según su tipo. Un token OAuth recibe HTTP 403 con un desafío que nombra solo el alcance faltante, para que el cliente pueda pedirle a la persona que lo apruebe:

WWW-Authenticate: Bearer error="insufficient_scope", error_description="The papers:read scope is required for this request.", resource_metadata="https://mcp.luneresearch.com/.well-known/oauth-protected-resource", scope="papers:read"

Una clave de acceso recibe un error de herramienta que nombra el alcance faltante y le dice al agente que te pida crear una clave que lo incluya.

Revocar acceso

Revoca claves de acceso en API keys y aplicaciones conectadas en OAuth clients en la página de Credenciales. Las conexiones OAuth se listan bajo tu equipo personal, así que selecciónalo primero. Una clave de acceso revocada deja de funcionar en menos de cinco minutos. Revocar una aplicación cancela sus tokens de actualización de inmediato, pero el token de acceso que ya tiene sigue funcionando hasta que expire, como máximo una hora después.

Transportes

TransporteDóndeVersiones de protocolo MCP
Streamable HTTPhttps://mcp.luneresearch.com2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07
stdionpx -y @retrograde-labs/lune-mcp-server2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07
Acerca del endpoint alojado:
  • /mcp y /v1/mcp también responden, para instalaciones antiguas. El descubrimiento sigue la ruta, por lo que un cliente en /mcp se dirige a https://mcp.luneresearch.com/.well-known/oauth-protected-resource/mcp. Un token vinculado a cualquiera de las tres URL funciona en las tres.
  • Las solicitudes no tienen estado. Cada una lleva su propia credencial y no hay ID de sesión, por lo que un cliente que ha estado inactivo durante horas sigue funcionando sin necesidad de reinicializarse.
  • El tráfico MCP es solo POST. GET y DELETE devuelven 405, por lo que no hay flujo SSE que abrir, y el servidor no envía notificaciones propias. Un navegador que abre la URL desnuda es redirigido a la documentación en su lugar.
  • Envía Accept: application/json, text/event-stream. En versiones de protocolo más antiguas, una solicitud que omita cualquiera de los dos tipos recibe 406.
  • Una solicitud con un encabezado Origin recibe 403 a menos que ese origen esté en la lista de permitidos del servidor, así que conéctate desde un servidor o un cliente nativo en lugar de desde una página web.
  • Los lotes JSON-RPC, que solo usan versiones de protocolo más antiguas, pueden contener hasta 50 mensajes. El cuerpo de una solicitud puede tener hasta 1 MB.
  • El manifiesto del Registro se sirve en https://mcp.luneresearch.com/.well-known/mcp/server.json.

Enlaces

Soporte

Los informes de errores y las solicitudes de funciones van al rastreador de problemas. Para preguntas sobre cuentas, envía un correo a support@luneresearch.com. Para informar un problema de seguridad, sigue SECURITY.md.

Licencia

MIT