Desenvolvedores

Servidor MCP do Musael

Conecte um cliente MCP aos projetos do Musael de quem escreve. O servidor fala HTTP em streaming e aceita login por OAuth ou um token de acesso pessoal.

Servidor

URL do servidor
https://app.musael.com/api/mcp?lang=pt-BR
Transporte
HTTP em streaming, respostas JSON sem estado. Envie mensagens JSON-RPC com POST; GET e DELETE respondem 405.
Nome do servidor
musael

Autenticação

Toda solicitação precisa do cabeçalho Authorization: Bearer <token>. Sem token, ou com um token revogado, expirado ou errado, o servidor responde 401 com um cabeçalho WWW-Authenticate que aponta para os metadados OAuth dele.

Login por OAuth

Para ChatGPT, Claude, Cursor, VS Code e outros clientes que conectam entrando na conta. O cliente descobre tudo a partir da resposta 401, seguindo a especificação de autorização do MCP:

  • Metadados do recurso protegido (RFC 9728): https://app.musael.com/.well-known/oauth-protected-resource/api/mcp
  • Metadados do servidor de autorização (RFC 8414): https://app.musael.com/.well-known/oauth-authorization-server
  • Registro dinâmico de cliente (RFC 7591): só clientes públicos, sem segredo; endereços de redirecionamento em HTTPS, HTTP somente em loopback, ou um esquema de app.
  • Código de autorização com PKCE (somente S256). Quem escreve entra, escolhe Somente leitura ou Ler e adicionar e os projetos, e depois permite ou cancela.
  • Os tokens de acesso duram uma hora; os de renovação duram 90 dias e mudam a cada uso.
  • Escopos: read e suggest (mostrado a quem escreve como Ler e adicionar).

Token de acesso pessoal

Para clientes configurados à mão, como o Codex, o Claude Code ou um script. Quem escreve cria o token no Musael em Configurações → Apps conectados, escolhendo um nome, os projetos, o acesso e quando expira.

  • Os tokens começam com sti_ e são mostrados uma vez; o Musael guarda apenas um hash deles.
  • Uma conta pode ter até 20 tokens ativos. Revogar desativa um token na hora.
  • Envie-o no cabeçalho Authorization. Nunca o ponha na URL.

Acesso e limites

  • Cada chamada age como a pessoa que conectou, dentro do acesso que ela tem naquele momento, nos projetos escolhidos para a conexão.
  • Nenhuma ferramenta altera ou exclui o texto de quem escreve. As ferramentas que adicionam criam novos atos, capítulos, cenas ou entradas do Mundo; suggest_edit deixa uma proposta que a pessoa aceita ou rejeita no Musael.
  • Toda ferramenta é sempre listada. Uma ferramenta que o plano ou a conexão não permite responde com o motivo e não faz nada.
  • Até 300 chamadas a cada cinco minutos por token. Respostas com mais de 200.000 caracteres são cortadas, com um aviso para ler um capítulo ou cena de cada vez.

Ferramentas

15 ferramentas. Ler o texto do livro e propor edições vêm com o plano Press.

FerramentaO que fazPlanoAcesso
list_projectsOs projetos que esta conexão enxerga, com o espaço de trabalho, o papel da pessoa, as cenas e a última alteração. Use primeiro: toda outra ferramenta precisa de um id de projeto.Todos os planosLeitura
get_profileA conta do Musael conectada: um id que nunca muda, o nome e o e-mail.Todos os planosLeitura
get_outlineA estrutura de um projeto: livros, atos, capítulos com sinopse, cenas na ordem de leitura com status, PDV e palavras, e as tarefas em aberto.Todos os planosLeitura
create_projectUm novo projeto a partir de uma ideia, com atos, capítulos, cenas vazias com sinopse e entradas do Mundo.Todos os planosLer e adicionar
add_to_planNovos atos, capítulos e cenas em um projeto existente.Todos os planosLer e adicionar
add_world_entriesNovos personagens, lugares, objetos e facções. Um nome que já existe é deixado como está.Todos os planosLer e adicionar
read_sceneUma cena em Markdown, com capítulo, status, PDV, lugar e sinopse.PressLeitura
read_chapterTodas as cenas de um capítulo, em ordem, em Markdown.PressLeitura
search_projectPalavras nas cenas e no Mundo, com trechos curtos.PressLeitura
list_worldAs entradas do Mundo por tipo, com outros nomes, etiquetas e o início das notas.PressLeitura
get_world_entryUma entrada do Mundo completa: notas, relações, fatos registrados e as cenas que a mencionam.PressLeitura
get_timelineOs eventos do Mundo na ordem da história, com a cena que mostra cada um, marcando os contados fora de ordem.PressLeitura
get_style_reportO relatório de estilo do app sobre uma cena, feito por regras fixas, sem IA.PressLeitura
get_reader_statsOs leitores do livro publicado, capítulo a capítulo, para quem é dono do projeto e para quem edita.PressLeitura
suggest_editUma substituição proposta para um trecho, ou um comentário sobre ele. O texto só muda se quem escreve aceitar.PressLer e adicionar

Role para o lado para ver a tabela inteira.

Exemplos

Defina MUSAEL_TOKEN com um token de acesso pessoal. Depois de initialize, envie notifications/initialized e então liste ou chame as ferramentas.

Inicializar

curl https://app.musael.com/api/mcp?lang=pt-BR \
  -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 as ferramentas

curl https://app.musael.com/api/mcp?lang=pt-BR \
  -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=pt-BR \
  -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"}'

Chamar uma ferramenta

curl https://app.musael.com/api/mcp?lang=pt-BR \
  -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=pt-BR"
bearer_token_env_var = "MUSAEL_TOKEN"

Claude Code

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

Sem 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"}