개발자

Musael MCP 서버

MCP 클라이언트를 작가의 Musael 프로젝트에 연결하세요. 서버는 Streamable HTTP를 사용하며 OAuth 로그인이나 개인 액세스 토큰을 받아요.

서버

서버 URL
https://app.musael.com/api/mcp?lang=ko
전송 방식
Streamable HTTP, 상태 없는 JSON 응답. JSON-RPC 메시지는 POST로 보내세요. GET과 DELETE는 405로 응답해요.
서버 이름
musael

인증

모든 요청에 Authorization: Bearer <token> 헤더가 필요해요. 토큰이 없거나 해제·만료·잘못된 토큰이면 서버는 OAuth 메타데이터를 가리키는 WWW-Authenticate 헤더와 함께 401로 응답해요.

OAuth 로그인

ChatGPT, Claude, Cursor, VS Code 등 로그인으로 연결하는 클라이언트용이에요. 클라이언트는 MCP 인증 사양에 따라 401 응답에서 모든 정보를 찾아요:

  • 보호된 리소스 메타데이터 (RFC 9728): https://app.musael.com/.well-known/oauth-protected-resource/api/mcp
  • 인증 서버 메타데이터 (RFC 8414): https://app.musael.com/.well-known/oauth-authorization-server
  • 동적 클라이언트 등록 (RFC 7591): 비밀 키 없는 공개 클라이언트만 가능하고, 리디렉션 주소는 HTTPS, 루프백에 한한 HTTP, 또는 앱 스킴이에요.
  • PKCE(S256만)를 사용하는 인증 코드. 작가가 로그인하고 ‘읽기 전용’ 또는 ‘읽기 및 추가’와 프로젝트를 선택한 뒤 허용하거나 취소해요.
  • 액세스 토큰은 1시간, 리프레시 토큰은 90일 유효하며 사용할 때마다 교체돼요.
  • 스코프: read, suggest (작가에게는 ‘읽기 및 추가’로 표시돼요).

개인 액세스 토큰

Codex, Claude Code, 스크립트처럼 직접 설정하는 클라이언트용이에요. 작가는 Musael의 설정 → 연결된 앱에서 이름, 프로젝트, 권한, 만료일을 정해 토큰을 만들어요.

  • 토큰은 sti_로 시작하며 한 번만 표시돼요. Musael은 해시만 보관해요.
  • 계정당 활성 토큰은 최대 20개예요. ‘해제’하면 토큰이 즉시 꺼져요.
  • Authorization 헤더로 보내세요. URL에 넣지 마세요.

접근과 한도

  • 각 호출은 연결한 작가의 권한으로, 그 시점의 접근 범위 안에서, 연결에 선택된 프로젝트에 대해 실행돼요.
  • 어떤 도구도 작가의 텍스트를 바꾸거나 삭제하지 않아요. 추가 도구는 새 막, 챕터, 장면, 세계관 항목을 만들고, suggest_edit는 작가가 Musael에서 수락하거나 거절하는 제안을 남겨요.
  • 모든 도구는 항상 나열돼요. 요금제나 연결에서 허용하지 않는 도구는 이유를 알려 주고 아무것도 하지 않아요.
  • 토큰당 5분에 최대 300회 호출해요. 20만 자를 넘는 응답은 잘리며, 챕터나 장면을 하나씩 읽으라는 안내가 붙어요.

도구

도구 15개. 책 본문 읽기와 수정 제안은 Press 요금제에서 제공해요.

도구기능요금제접근
list_projects이 연결이 볼 수 있는 프로젝트와 워크스페이스, 작가의 역할, 장면, 마지막 변경이에요. 가장 먼저 사용하세요. 다른 모든 도구에 프로젝트 ID가 필요해요.모든 요금제읽기
get_profile연결된 Musael 계정의 변하지 않는 ID, 이름, 이메일이에요.모든 요금제읽기
get_outline프로젝트의 구조예요. 책, 막, 시놉시스가 있는 챕터, 읽는 순서대로의 장면(상태, 시점, 단어 수 포함), 남은 할 일이 있어요.모든 요금제읽기
create_project아이디어로 새 프로젝트를 만들어요. 막, 챕터, 시놉시스가 있는 빈 장면, 세계관 항목이 포함돼요.모든 요금제읽기 및 추가
add_to_plan기존 프로젝트에 새 막, 챕터, 장면을 추가해요.모든 요금제읽기 및 추가
add_world_entries새 인물, 장소, 사물, 세력을 추가해요. 이미 있는 이름은 그대로 둬요.모든 요금제읽기 및 추가
read_scene장면 하나를 Markdown으로 읽어요. 챕터, 상태, 시점, 장소, 시놉시스가 함께 나와요.Press읽기
read_chapter챕터의 모든 장면을 순서대로 Markdown으로 읽어요.Press읽기
search_project장면과 세계관의 단어를 짧은 발췌문과 함께 검색해요.Press읽기
list_world세계관의 항목을 종류별로 보여 줘요. 다른 이름, 태그, 노트의 앞부분이 함께 나와요.Press읽기
get_world_entry세계관 항목 하나를 전부 보여 줘요. 노트, 관계, 기록된 사실, 이 항목을 언급한 장면이 포함돼요.Press읽기
get_timeline세계관의 이벤트를 이야기 순서대로 보여 주고 각각을 보여 주는 장면을 표시해요. 순서와 다르게 서술된 것도 표시해요.Press읽기
get_style_report고정 규칙으로 만든, AI를 쓰지 않는 앱의 장면 스타일 보고서예요.Press읽기
get_reader_stats게시된 책의 챕터별 독자를 소유자와 편집자에게 보여 줘요.Press읽기
suggest_edit구절의 대체안이나 그에 대한 댓글을 제안해요. 작가가 수락해야만 텍스트가 바뀌어요.Press읽기 및 추가

표 전체를 보려면 옆으로 스크롤하세요.

예시

MUSAEL_TOKEN을 개인 액세스 토큰으로 설정하세요. initialize 뒤에 notifications/initialized를 보낸 다음 도구를 나열하거나 호출하세요.

초기화

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

도구 나열

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

도구 호출

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

Claude Code

claude mcp add --transport http --scope user musael https://app.musael.com/api/mcp?lang=ko --header "Authorization: Bearer $MUSAEL_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"}