셀프 호스팅 설치의 MCP
셀프 호스팅 Nodaro의 MCP 서버를 활성화하면 Claude, Cursor, ChatGPT 같은 MCP 클라이언트가 전용 MCP 호스트 이름에서 OAuth로 내 설치를 사용할 수 있습니다.
Nodaro MCP 서버를 사용하면 Claude, Cursor, Cline, Continue, Goose, ChatGPT 같은 AI 클라이언트가 사용자를 대신해 셀프 호스팅 설치의 도구를 쓸 수 있습니다. 기본적으로는 꺼져 있습니다. 활성화하려면 MCP 전용 호스트 이름을 정하고, 그 호스트 이름을 API로 라우팅하고, 변수 두 개를 설정하세요. 그러면 사용자는 자신의 클라이언트에서 OAuth로 내 설치에 로그인합니다.
MCP 제공 방식
- API가 MCP를 제공합니다. 경로는
/mcp이고,nodaro컨테이너 안의 포트9000에서 제공됩니다. - 포트
3000의 웹 서버는 MCP 요청을 거부합니다. 앱의 기본 주소로/mcp를 요청하면wrong_mcp_host오류와 실제 엔드포인트 주소와 함께405로 응답합니다. - 따라서 MCP에는 전용 호스트 이름이 필요합니다.
mcp.nodaro.example.com처럼, 트래픽이 API에 직접 닿는 호스트 이름입니다. - 로그인은 기본 도메인에서 이루어집니다. OAuth 검색 문서
/.well-known/oauth-authorization-server와 동의 화면은PUBLIC_URL에서 제공됩니다.
MCP 활성화
MCP 호스트 이름을 API로 라우팅
내 서버를 가리키는 mcp.<your-domain> DNS 레코드를 만드세요. CDN으로 프록시하지 마세요. 프록시는 MCP가 쓰는 오래 유지되는 Server-Sent Events 연결을 끊습니다.
Compose 파일은 API 포트를 공개하지 않습니다. nodaro 서비스 아래에서 루프백 인터페이스에 공개하세요.
nodaro:
ports:
- "3000:3000"
- "127.0.0.1:9000:9000"그런 다음 리버스 프록시에 MCP 호스트용 두 번째 사이트를 추가해 127.0.0.1:3000 대신 127.0.0.1:9000으로 전달하게 하세요. nginx 예시처럼 응답 버퍼링은 꺼 두세요.
MCP 호스트 이름을 백엔드 서비스의 커스텀 도메인으로 추가하세요.
railway domain add mcp.your-domain.com --service backend또는 Railway 대시보드에서 Project › backend service › Settings › Domains › Add custom domain으로 이동하세요. 그런 다음 DNS 공급자에서 CNAME 레코드를 추가하세요.
변수 설정
MCP_ENABLED=true # required; the default is off
MCP_PUBLIC_URL=https://mcp.your-domain.com # the hostname from step 1Compose 스택에서는 Compose 파일이 .env에서 이 두 변수를 전달하지 않으므로, nodaro 서비스의 environment: 아래에 둘 다 추가하세요. 그런 다음 docker compose -f docker-compose.community.yml up -d를 실행하세요.
MCP_PUBLIC_URL은 검색 엔드포인트가 보호된 리소스(RFC 9728)의 ID로 알리는 값이며, 도구가 반환하는 업로드 링크의 기준 주소이기도 합니다. 이 값이 없으면 내 설치는 Nodaro Cloud의 MCP 호스트를 알립니다. 하위 도메인 대신 기본 도메인에서 MCP를 제공한다면 PUBLIC_URL과 같은 값으로 설정하세요. 이때도 /mcp 요청은 API 포트에 직접 닿아야 합니다.
검색 엔드포인트 확인
curl https://mcp.your-domain.com/.well-known/oauth-protected-resource
curl https://your-domain.com/.well-known/oauth-authorization-server둘 다 상태 200과 함께 JSON을 반환해야 합니다.
클라이언트에 커넥터 추가
MCP 엔드포인트는 https://mcp.your-domain.com/mcp입니다. Claude에서는 Settings › Connectors › Add custom connector를 열고 그 URL을 입력하세요. 다른 클라이언트는 클라이언트 연결을 참조하고, Nodaro Cloud의 URL 대신 내 MCP URL을 쓰세요.
등록할 수 있는 클라이언트
MCP 클라이언트는 OAuth로 로그인합니다. 지원되는 클라이언트는 동적 클라이언트 등록(RFC 7591)으로 내 설치에 스스로 등록합니다. 이를 제어하는 변수는 두 개이며, 기본값은 대부분의 설치에 적합합니다.
| 변수 | 기본값 | 역할 |
|---|---|---|
MCP_DYNAMIC_REGISTRATION | allowlist | allowlist는 MCP_DCR_ALLOWLIST에 있는 클라이언트 이름만 받습니다. open은 모든 클라이언트를 받습니다. off는 동적 등록을 끕니다. |
MCP_DCR_ALLOWLIST | 알려진 클라이언트 14개 | allowlist 모드에서 받는 클라이언트 이름을 쉼표로 구분한 목록입니다. |
기본 허용 목록은 Claude, Claude Code, Cursor, Cline, Continue, Goose, ChatGPT, OpenAI, Lovable, Gemini, Gemini CLI, Codex, MCP Inspector, mcp-inspector입니다. 내 클라이언트를 추가하려면 전체 목록을 설정하세요.
MCP_DCR_ALLOWLIST=Claude,Cursor,Cline,Continue,Goose,YourCustomClient권장 모드는 allowlist입니다.
클라이언트가 할 수 있는 것
MCP 서버는 이미지, 동영상, 오디오, 캐릭터, 장소, 오브젝트 생성 도구와 갤러리, 워크플로, 앱, 저장된 컴포넌트, 모델용 도구를 제공합니다. 각 사용자는 내 설치에서 자신의 계정으로 작업합니다. MCP 도구 레퍼런스와 MCP 문제 해결을 참조하세요.
자주 묻는 질문
셀프 호스팅 Nodaro에서 MCP는 기본적으로 켜져 있나요?
아니요. MCP_ENABLED=true와 MCP_PUBLIC_URL을 설정하고, MCP 호스트 이름을 API로 라우팅한 다음 재시작하세요. Compose 스택에서는 Compose 파일이 .env에서 이 두 변수를 전달하지 않으므로, nodaro 서비스의 environment 블록 아래에 추가하세요.
MCP 클라이언트가 405 wrong_mcp_host를 받는 이유는 무엇인가요?
클라이언트가 앱의 기본 주소를 쓰고 있고, 그 주소의 웹 서버는 MCP 요청을 거부합니다. 클라이언트를 MCP 호스트인 https://your-mcp-host/mcp로 지정하세요. 이 호스트는 포트 9000의 API에 직접 닿아야 합니다.
어떤 MCP 클라이언트가 내 설치에 등록할 수 있나요?
기본적으로 Claude, Claude Code, Cursor, Cline, Continue, Goose, ChatGPT, Codex를 포함한 알려진 클라이언트 14개입니다. MCP_DCR_ALLOWLIST에 이름을 추가하거나, 모든 클라이언트를 받으려면 MCP_DYNAMIC_REGISTRATION=open으로 설정하세요.
MCP 호스트 앞에 CDN을 둘 수 있나요?
트래픽을 프록시하는 CDN은 안 됩니다. MCP는 오래 유지되는 Server-Sent Events 연결을 열어 두는데, 프록시하는 CDN은 이 연결을 끊습니다. DNS를 서버로 직접 지정하세요.
관련 문서
Nodaro MCP
클라이언트 연결
MCP 도구 레퍼런스
리버스 프록시와 HTTPS
구성
최종 업데이트