Skip to content
This page has been auto-translated and may contain errors.View in English

Model Context Protocol을 로컬에서 실행하기

이 페이지를 사용하여 추출한 TypeScript MCP 서버를 실행하고 날씨 도구와 리소스를 MCP Inspector에서 시도해볼 수 있습니다. 서버는 표준 입출력을 통해 클라이언트와 통신하므로, 프로젝트 페이지나 애플리케이션 포트를 열지 않고 클라이언트가 접속할 때까지 기다립니다.

먼저 준비할 것

Node 24를 설치합니다. MCP Inspector는 최소 Node 버전을 요구하고 있으며 (작성 시점 기준 22.19), Node 24는 이 최소 요구사항을 충족하는 반면 구 버전의 LTS 릴리스는 테스팅 UI를 시작하지 못할 수 있습니다.

이 프로젝트는 API 키나 .env 파일이 필요하지 않습니다. MCP 클라이언트는 서버를 자식 프로세스로 실행하므로, 서버가 실행되는 Node 버전과 환경은 머신에서 이를 실행하는 것에서 나옵니다.

Juno먼저 준비할 것 Node 24를 설치하면 되고, 그게 요구사항의 전부입니다. API 키도, .env 파일도 필요 없습니다. 이 서버는 웹 페이지를 열지 않는다는 점이 조금 의외인데요. 클라이언트를 기다리면서 조용히 있다 보니 처음 실행했을 때 저도 완전히 헷갈렸습니다.
Juno먼저 준비할 것 Node 24는 TypeScript 서버와 Inspector 양쪽 모두의 최소 Node 버전 요구사항을 충족하므로, 한 번 설치로 두 가지를 다 처리할 수 있습니다. 이 프로젝트는 HTTP 포트가 아니라 표준 입출력으로 통신하기 때문에, 절대 나타나지 않을 URL을 기다릴 필요가 없습니다.
Juno먼저 준비할 것 클라이언트가 이 서버를 자식 프로세스로 실행하므로, Node 버전과 환경은 이를 실행하는 클라이언트에서 나오지 서버 폴더에서는 나오지 않습니다. 서버 자체가 키와 포트를 필요로 하지 않지만 클라이언트 쪽 Node 설치가 중요한 이유입니다. "서버는 아무것도 필요 없다"는 말은 이를 실행하는 클라이언트가 지원되는 Node 버전을 실행할 때만 참입니다.

서버 설치 및 복구

package.json이 있는 추출한 서버 폴더에서 터미널을 엽니다.

bash
$ cd path-to-your-downloaded-project
$ npm ci
$ npm install --save-dev tsx

마지막 명령어는 TypeScript 파일을 실행하는 도구인 tsx를 기록합니다. 추출한 "start": "tsx server.ts" 스크립트가 이를 요구합니다.

표준 입출력 서버를 바로 시작할 수 있습니다.

bash
$ npm start

브라우저 URL을 출력하지 않고 MCP 클라이언트가 접속할 때까지 기다립니다. Inspector를 시작하기 전에 Ctrl+C로 중지합니다.

Juno서버 설치 및 복구npm ci를 실행하고, TypeScript 파일을 실행하는 tsx 도구를 추가한 다음, npm start를 시도합니다. 터미널이 조용해지면 뭔가 잘못된 게 아닙니다. 서버가 클라이언트와 대화할 때까지 기다리고 있는 거예요. 누가 설명해주기 전까지 저는 서버를 세 번이나 다시 시작했었습니다!
Juno서버 설치 및 복구 패키지의 start 스크립트는 이미 tsx를 기대하고 있으므로, 이를 개발 의존성으로 기록하는 것이 가장 작은 반복 가능한 복구입니다. 그리고 표준 입출력을 기다리는 프로세스는 행(hang)이 아니라 성공적인 시작입니다. 계속 재시작하려는 충동을 참으세요.
Juno서버 설치 및 복구npm ci는 제공된 lockfile이 기록한 것만 설치했고, tsx는 그 안에 없었습니다. --save-dev로 설치하면 tsxpackage.json과 lockfile에 기록됩니다. 이 기록된 의존성이 나중에 클라이언트가 어떤 디렉터리에서든 npm exec로 서버를 실행할 수 있게 해줍니다. 매니페스트에 기록된 복구는 남지만, 셸 히스토리에만 존재하는 것들은 남지 않습니다.

MCP Inspector로 테스트하기

같은 프로젝트 폴더에서 공식 MCP Inspector를 실행합니다.

bash
$ npx @modelcontextprotocol/inspector npx tsx server.ts

npx는 Inspector를 다운로드하고 시작하며, 일회성 설치 권한을 요청할 수 있습니다. 패키지가 @modelcontextprotocol/inspector인지 확인한 후 수락하고, 반복 가능한 팀 사용을 위해서는 가장 최신 릴리스에 무제한 의존하기보다는 검토된 버전을 고정하세요. Inspector는 그 다음 npx tsx server.ts를 표준 입출력 자식 프로세스로 서버를 실행합니다. 웹 UI는 자신의 로컬 포트에서 실행되며, 서버와의 표준 입출력 연결과는 별개입니다. 터미널에 출력된 로컬 URL을 열면 되며, 자동으로 열리지 않으면 직접 엽니다.

Inspector에서 서버에 연결하고, 도구와 리소스를 나열한 다음, 코스에서 사용된 입력 중 하나로 날씨 도구를 호출합니다. 도구 사용 챕터에서는 이 같은 도구 정의가 모델에 무엇을 제공하는지 설명합니다. 테스트하는 동안 터미널을 열어둔 후, Ctrl+C로 Inspector와 자식 서버를 중지합니다.

JunoMCP Inspector로 테스트하기 Inspector 명령어를 실행하고, 로컬 URL을 열고, 연결한 다음 코스 도구와 리소스를 나열하고 호출합니다. 웹 주소를 열기 전에 확인하는 것처럼 다운로드를 수락하기 전에 패키지 이름을 확인하세요.
JunoMCP Inspector로 테스트하기 Inspector가 여기서 클라이언트이고 server.ts를 표준 입출력 자식으로 실행합니다. 호출 전에 발견을 확인하세요. 도구 목록이 비어 있다면 뭔가를 호출하는 것은 의미가 없습니다. 터미널을 열어둔 후 Ctrl+C로 두 프로세스를 모두 중지합니다.
JunoMCP Inspector로 테스트하기 내부 명령어는 다음 섹션이 데스크탑 클라이언트에 제시하는 것과 같은 프로세스 계약입니다. 여기서 작동하도록 하면 나중에 클라이언트 구성은 값을 복사하는 것이 되고 디버깅이 아닙니다. Inspector의 웹 UI 포트는 표준 입출력 전송과는 별개입니다. 바쁜 포트는 웹 UI를 차단하지만 서버 자체는 계속 실행됩니다.

다른 MCP 클라이언트 연결하기

데스크톱 클라이언트는 같은 표준 입출력 서버를 실행하기 위한 실행 명령어와 인수가 필요합니다. 먼저 추출한 프로젝트 폴더와 그 server.ts 파일의 절대 경로를 복사합니다. 이 프로세스 계약으로 클라이언트를 구성하며, 두 예시 경로 모두 바꿉니다.

text
command: npm
arguments:
  - --prefix
  - /absolute/path/to/project
  - exec
  - --
  - tsx
  - /absolute/path/to/project/server.ts

--prefix 값은 npm이 데스크톱 클라이언트가 다른 작업 디렉터리에서 시작되더라도 그 프로젝트에 설치된 tsx 의존성을 사용하도록 합니다. 클라이언트가 앞에 npm --prefix 없이 tsx를 자체적으로 실행하도록 구성되어 있다면, 대신 전역 설치와 클라이언트의 PATH에 의존하는데, 이는 터미널의 경로와 다른 경우가 많습니다. 각 인수를 별개의 항목으로 유지하여 공백을 포함한 경로가 하나의 값으로 남도록 합니다. URL이나 포트를 추가하지 마세요. 이 서버는 표준 입출력으로 통신합니다.

이렇게 서버를 연결하는 것이 데스크톱 클라이언트가 모델에 도구를 제공하는 방식입니다. 에이전트 챕터에서는 이러한 도구를 사용하는 루프를 다룹니다.

클라이언트 구성 형식이 다르므로, 그 명령어와 인수를 클라이언트의 현재 MCP 설정 지침에 있는 필드에 매핑합니다. 구성을 변경한 후 클라이언트를 다시 시작합니다. 다른 프로젝트를 다운로드할 필요가 없습니다. 이미 테스트한 추출한 서버에 연결하면 됩니다.

Juno다른 MCP 클라이언트 연결하기 명령어를 npm으로 설정하고, 두 절대 경로를 채운 문서화된 인수를 추가한 후 클라이언트를 다시 시작합니다. Inspector가 테스트한 같은 추출한 서버를 재사용하고 있으므로, 거기서 작동했다면 서버 쪽은 이미 증명되었습니다.
Juno다른 MCP 클라이언트 연결하기 클라이언트 구성 문법은 다르지만, 프로세스 계약은 같습니다. npm --prefix는 프로젝트를 선택하고, exec -- tsx는 표준 입출력을 통해 TypeScript 서버를 실행합니다. 이 조각들을 클라이언트가 사용하는 필드 이름에 매핑하세요.
Juno다른 MCP 클라이언트 연결하기tsx를 자체적으로 실행하도록 구성된 클라이언트는 이미 전역 설치가 있는 머신에서만 작동하고, 데스크톱 클라이언트는 터미널의 PATH를 상속받는 경우가 드뭅니다. npm --prefixexec 명령어는 실행을 프로젝트의 기록된 의존성에 고정합니다. 실행 환경에 의존하는 구성은 두 번째 머신에서 실패하는 것들입니다.

문제 해결

tsx: command not found: 프로젝트 폴더에서 npm install --save-dev tsx를 실행합니다. 데스크톱 클라이언트의 경우, 명령어가 npm이고 인수가 --prefix 다음에 절대 프로젝트 경로로 시작하는지 확인합니다.

Inspector가 Node 버전을 거부합니다: Node 24를 설치하고, node --version으로 확인한 다음, 터미널을 다시 엽니다.

npm start가 멈춘 것처럼 보입니다: 이는 클라이언트를 기다리는 표준 입출력 서버의 예상된 동작입니다. Inspector를 사용해 상호작용합니다.

Inspector에 도구가 표시되지 않습니다: 터미널에서 TypeScript 또는 연결 오류를 확인하고 최종 명령어가 npx tsx server.ts로 끝나는지 확인합니다.

Juno문제 해결tsx가 누락되면 설치하고, Inspector가 시작을 거부하면 Node 24로 이동하고, 조용한 서버는 깨진 게 아니라 기다리는 서버라는 것을 기억하세요. 이 페이지의 거의 모든 문제가 이 세 가지 중 하나입니다.
Juno문제 해결 세 가지 실패 계층을 분리합니다. tsx 설치, Inspector의 최소 Node 버전, 표준 입출력 연결 자체. 도구 등록이 실패했다고 가정하기 전에 터미널 출력을 확인하세요. 실제 오류는 대개 이미 거기 인쇄되어 있습니다.
Juno문제 해결 순서대로 체인을 추적합니다. 외부 Inspector 프로세스, 자식 실행 명령어, TypeScript 실행, MCP 초기화. 이 체인의 어떤 단계든 도구 목록을 비울 수 있고, 뭔가를 재시작하기 전에 터미널을 읽으면 무엇이 깨졌는지 알 수 있습니다. 먼저 재시작하는 것이 일반적인 본능이고, 그것은 거의 아무것도 알려주지 않습니다.