Desarrolladores

Servidor MCP de Musael

Conecta un cliente MCP a los proyectos de Musael de un escritor. El servidor habla Streamable HTTP y acepta inicio de sesión con OAuth o un token de acceso personal.

Servidor

URL del servidor
https://app.musael.com/api/mcp?lang=es
Transporte
Streamable HTTP, respuestas JSON sin estado. Envía mensajes JSON-RPC con POST; GET y DELETE responden 405.
Nombre del servidor
musael

Autenticación

Cada solicitud necesita la cabecera Authorization: Bearer <token>. Sin token, o con uno revocado, caducado o incorrecto, el servidor responde 401 con una cabecera WWW-Authenticate que apunta a sus metadatos de OAuth.

Inicio de sesión con OAuth

Para ChatGPT, Claude, Cursor, VS Code y otros clientes que se conectan iniciando sesión. El cliente descubre todo a partir de la respuesta 401, siguiendo la especificación de autorización de MCP:

  • Metadatos del recurso protegido (RFC 9728): https://app.musael.com/.well-known/oauth-protected-resource/api/mcp
  • Metadatos del servidor de autorización (RFC 8414): https://app.musael.com/.well-known/oauth-authorization-server
  • Registro dinámico de clientes (RFC 7591): solo clientes públicos, sin secreto; direcciones de redirección en HTTPS, HTTP solo en loopback, o un esquema de app.
  • Código de autorización con PKCE (solo S256). El escritor inicia sesión, elige Solo lectura o Leer y añadir y los proyectos, y luego permite o cancela.
  • Los tokens de acceso duran una hora; los tokens de actualización duran 90 días y cambian en cada uso.
  • Ámbitos: read y suggest (se muestran al escritor como Leer y añadir).

Token de acceso personal

Para clientes configurados a mano, como Codex, Claude Code o un script. El escritor crea el token en Musael, en Ajustes → Apps conectadas, eligiendo un nombre, los proyectos, el acceso y cuándo caduca.

  • Los tokens empiezan por sti_ y se muestran una sola vez; Musael solo guarda un hash de ellos.
  • Una cuenta puede tener hasta 20 tokens activos. Revocar desactiva un token de inmediato.
  • Envíalo en la cabecera Authorization. Nunca lo pongas en la URL.

Acceso y límites

  • Cada llamada actúa como el escritor que se conectó, dentro del acceso que tenga en ese momento, sobre los proyectos elegidos para la conexión.
  • Ninguna herramienta modifica ni borra el texto del escritor. Las herramientas que añaden crean actos, capítulos, escenas o entradas del Mundo nuevos; suggest_edit deja una propuesta que el escritor acepta o rechaza en Musael.
  • Todas las herramientas aparecen siempre en la lista. Una herramienta que el plan o la conexión no permiten responde con el motivo y no hace nada.
  • Hasta 300 llamadas cada cinco minutos por token. Las respuestas de más de 200.000 caracteres se cortan, con una nota para leer un capítulo o una escena cada vez.

Herramientas

15 herramientas. Leer el texto del libro y proponer cambios están incluidos en el plan Press.

HerramientaQué hacePlanAcceso
list_projectsLos proyectos que esta conexión puede ver, con su espacio de trabajo, el rol del escritor, las escenas y el último cambio. Úsala primero: todas las demás herramientas necesitan un id de proyecto.Todos los planesLectura
get_profileLa cuenta de Musael conectada: un id que nunca cambia, el nombre y el correo electrónico.Todos los planesLectura
get_outlineLa estructura de un proyecto: libros, actos, capítulos con sinopsis, escenas en orden de lectura con estado, PDV y palabras, y las tareas abiertas.Todos los planesLectura
create_projectUn proyecto nuevo a partir de una idea, con actos, capítulos, escenas vacías con sinopsis y entradas del Mundo.Todos los planesLeer y añadir
add_to_planActos, capítulos y escenas nuevos en un proyecto existente.Todos los planesLeer y añadir
add_world_entriesPersonajes, lugares, objetos y facciones nuevos. Un nombre que ya existe se deja como está.Todos los planesLeer y añadir
read_sceneUna escena en Markdown, con su capítulo, estado, PDV, lugar y sinopsis.PressLectura
read_chapterTodas las escenas de un capítulo, en orden, en Markdown.PressLectura
search_projectPalabras en las escenas y en el Mundo, con fragmentos breves.PressLectura
list_worldLas entradas del Mundo por tipo, con otros nombres, etiquetas y el comienzo de sus notas.PressLectura
get_world_entryUna entrada del Mundo completa: notas, relaciones, datos registrados y las escenas que la mencionan.PressLectura
get_timelineLos eventos del Mundo en el orden de la historia, con la escena que muestra cada uno, marcando los que se cuentan fuera de orden.PressLectura
get_style_reportEl informe de estilo de la app sobre una escena, hecho con reglas fijas, sin IA.PressLectura
get_reader_statsLos lectores del libro publicado capítulo a capítulo, para el propietario y los editores.PressLectura
suggest_editUna propuesta de sustitución para un pasaje, o un comentario sobre él. El texto solo cambia si el escritor lo acepta.PressLeer y añadir

Desplázate hacia los lados para ver toda la tabla.

Ejemplos

Define MUSAEL_TOKEN con un token de acceso personal. Tras initialize, envía notifications/initialized y luego lista o llama a las herramientas.

Inicializar

curl https://app.musael.com/api/mcp?lang=es \
  -H "Authorization: Bearer $MUSAEL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example","version":"1.0.0"}}}'

Listar las herramientas

curl https://app.musael.com/api/mcp?lang=es \
  -H "Authorization: Bearer $MUSAEL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

curl https://app.musael.com/api/mcp?lang=es \
  -H "Authorization: Bearer $MUSAEL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Llamar a una herramienta

curl https://app.musael.com/api/mcp?lang=es \
  -H "Authorization: Bearer $MUSAEL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_projects","arguments":{}}}'

Codex

# ~/.codex/config.toml
[mcp_servers.musael]
url = "https://app.musael.com/api/mcp?lang=es"
bearer_token_env_var = "MUSAEL_TOKEN"

Claude Code

claude mcp add --transport http --scope user musael https://app.musael.com/api/mcp?lang=es --header "Authorization: Bearer $MUSAEL_TOKEN"

Sin token

HTTP/2 401
www-authenticate: Bearer realm="Musael", resource_metadata="https://app.musael.com/.well-known/oauth-protected-resource/api/mcp"

{"error":"TOKEN_INVALID"}