Dla programistów

Serwer MCP Musael

Połącz klienta MCP z projektami Musael osoby piszącej. Serwer mówi Streamable HTTP i przyjmuje logowanie OAuth lub osobisty token dostępu.

Serwer

Adres serwera
https://app.musael.com/api/mcp?lang=pl
Transport
Streamable HTTP, bezstanowe odpowiedzi JSON. Wysyłaj wiadomości JSON-RPC przez POST; GET i DELETE odpowiadają 405.
Nazwa serwera
musael

Uwierzytelnianie

Każde żądanie wymaga nagłówka Authorization: Bearer <token>. Bez tokenu albo z unieważnionym, wygasłym lub błędnym serwer odpowiada 401 z nagłówkiem WWW-Authenticate wskazującym jego metadane OAuth.

Logowanie OAuth

Dla ChatGPT, Claude, Cursor, VS Code i innych klientów łączących się przez logowanie. Klient odkrywa wszystko z odpowiedzi 401, zgodnie ze specyfikacją autoryzacji MCP:

  • Metadane chronionego zasobu (RFC 9728): https://app.musael.com/.well-known/oauth-protected-resource/api/mcp
  • Metadane serwera autoryzacji (RFC 8414): https://app.musael.com/.well-known/oauth-authorization-server
  • Dynamiczna rejestracja klienta (RFC 7591): tylko klienci publiczni, bez sekretu; adresy przekierowań w HTTPS, HTTP tylko na loopback albo schemat aplikacji.
  • Kod autoryzacji z PKCE (tylko S256). Osoba pisząca loguje się, wybiera Tylko odczyt albo Odczyt i dodawanie oraz projekty, potem zezwala lub anuluje.
  • Tokeny dostępu trwają godzinę; tokeny odświeżania 90 dni i zmieniają się przy każdym użyciu.
  • Zakresy: read i suggest (pokazywane osobie piszącej jako Odczyt i dodawanie).

Osobisty token dostępu

Dla klientów konfigurowanych ręcznie, jak Codex, Claude Code lub skrypt. Osoba pisząca tworzy token w Musael w Ustawieniach → Połączone aplikacje, wybierając nazwę, projekty, dostęp i wygaśnięcie.

  • Tokeny zaczynają się od sti_ i są pokazywane raz; Musael zachowuje tylko ich skrót.
  • Konto może mieć do 20 aktywnych tokenów. Unieważnienie wyłącza token natychmiast.
  • Wyślij go w nagłówku Authorization. Nigdy nie umieszczaj go w adresie URL.

Dostęp i limity

  • Każde wywołanie działa jako osoba, która się połączyła, w ramach jej dostępu w danej chwili, na projektach wybranych dla połączenia.
  • Żadne narzędzie nie zmienia ani nie usuwa tekstu osoby piszącej. Narzędzia dodające tworzą nowe akty, rozdziały, sceny lub wpisy Świata; suggest_edit zostawia propozycję, którą osoba pisząca przyjmuje lub odrzuca w Musael.
  • Każde narzędzie jest zawsze wymienione. Narzędzie niedozwolone przez plan lub połączenie odpowiada powodem i nic nie robi.
  • Do 300 wywołań na pięć minut na token. Odpowiedzi dłuższe niż 200 000 znaków są ucinane, z notatką, by czytać jeden rozdział lub scenę naraz.

Narzędzia

Narzędzia: 15. Czytanie tekstu książki i proponowanie zmian są w planie Press.

NarzędzieCo robiPlanDostęp
list_projectsProjekty widoczne dla tego połączenia, z przestrzenią roboczą, rolą osoby piszącej, scenami i ostatnią zmianą. Użyj go najpierw: każde inne narzędzie potrzebuje id projektu.Każdy planOdczyt
get_profilePołączone konto Musael: niezmienne id, nazwa i e-mail.Każdy planOdczyt
get_outlineStruktura projektu: książki, akty, rozdziały ze streszczeniem, sceny w kolejności czytania ze statusem, punktem widzenia i słowami oraz otwarte zadania.Każdy planOdczyt
create_projectNowy projekt z pomysłu, z aktami, rozdziałami, pustymi scenami ze streszczeniem i wpisami Świata.Każdy planOdczyt i dodawanie
add_to_planNowe akty, rozdziały i sceny w istniejącym projekcie.Każdy planOdczyt i dodawanie
add_world_entriesNowe postacie, miejsca, przedmioty i frakcje. Istniejąca nazwa zostaje bez zmian.Każdy planOdczyt i dodawanie
read_sceneJedna scena jako Markdown, z rozdziałem, statusem, punktem widzenia, miejscem i streszczeniem.PressOdczyt
read_chapterWszystkie sceny rozdziału, w kolejności, jako Markdown.PressOdczyt
search_projectSłowa w scenach i Świecie, z krótkimi fragmentami.PressOdczyt
list_worldWpisy Świata według rodzaju, z innymi nazwami, tagami i początkiem notatek.PressOdczyt
get_world_entryJeden wpis Świata w całości: notatki, relacje, zapisane fakty i sceny, które go wspominają.PressOdczyt
get_timelineWydarzenia Świata w kolejności historii ze sceną pokazującą każde, z zaznaczeniem opowiedzianych poza kolejnością.PressOdczyt
get_style_reportRaport stylu aplikacji dla sceny, tworzony stałymi regułami bez AI.PressOdczyt
get_reader_statsCzytelnicy opublikowanej książki rozdział po rozdziale, dla właściciela i redaktorów.PressOdczyt
suggest_editPropozycja zamiany fragmentu albo komentarz do niego. Tekst zmienia się tylko wtedy, gdy osoba pisząca ją przyjmie.PressOdczyt i dodawanie

Przewiń na bok, aby zobaczyć całą tabelę.

Przykłady

Ustaw MUSAEL_TOKEN na osobisty token dostępu. Po initialize wyślij notifications/initialized, potem wylistuj lub wywołaj narzędzia.

Initialize

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

Wylistuj narzędzia

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

Wywołaj narzędzie

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

Claude Code

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

Bez tokenu

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

{"error":"TOKEN_INVALID"}