다른 사람이 만들어놓은 MCP 서버를 등록해서 사용하는 방법부터 살펴보자.
클라이언트/호스트 ↔ MCP 서버
npx
또는 uvx
명령어로 외부 MCP 서버를 설치와 동시에 실행할 수 있다.index.ts
경로나 실행 스크립트를 claude_desktop_config.json에 등록해서 실행할 수도 있다.MCP Server SDK를 활용하면 직접 서버를 구현할 수 있다. 구현 후에는 Claude Desktop과 연동해서 동작 확인이 가능하다.
다음 패키지들이 설치되어 있어야 한다.
brew install uv git sqlite
sqlite3 ~/test.db <<EOF
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
price REAL
);
INSERT INTO products (name, price) VALUES
('Widget', 19.99),
('Gadget', 29.99),
('Gizmo', 39.99),
('Smart Watch', 199.99),
('Wireless Earbuds', 89.99),
('Portable Charger', 24.99);
EOF
{
"mcpServers": {
"sqlite": {
"command": "uvx",
"args": ["mcp-server-sqlite", "--db-path", "/Users/YOUR_USERNAME/test.db"]
}
}
}
claude_desktop_config.json
파일을 기준으로 MCP 서버를 초기화한다.Claude Desktop이 MCP 서버와 상호작용하는 흐름은 다음과 같다:
uvx
명령어는 mcp-server-sqlite
패키지를 PyPI에서 자동으로 설치하고 실행한다.
npx
명령어는 https://www.npmjs.com/ 에서 패키지를 자동으로 설치하고 실행한다.
💡 마치 Docker 이미지가 로컬에 없을 경우 Docker Hub에서 받아오는 것과 비슷한 구조다 (추측)
{
"mcpServers": {
"sqlite": {
"command": "uvx",
"args": ["mcp-server-sqlite", "--db-path", "/Users/YOUR_USERNAME/test.db"]
}
}
}
📚 참고 자료: 6MCP서버예제구현
해당 문서의 예제만으로는 실행이 정상적으로 되지 않으며, 몇 가지 보완이 필요하다.
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
dotenv.config({ path: path.resolve(__dirname, "../.env") });
private setupHandlers(): void {
this.setupResourceHandlers();
this.setupToolHandlers();
}
if (typeof global.AbortController === "undefined") {
global.AbortController = (await import("abort-controller")).default;
}
npx
실행 시 "Would you like to install this server for Claude.app?"라는 질문이 나오면 y
를 입력할 것.claude_desktop_config.json
에 MCP 서버가 등록된다.{
"mcpServers": {
"weather-server": {
"command": "node",
"args": [
"/Users/gimmingi/Desktop/Study/weather-server/build/index.js"
]
}
}
}
setupResourceHandlers()
Claude가 리소스 URI(weather://Seoul/current
)에 접근하면 이 핸들러가 호출됨.
→ 실시간 날씨 요청 처리.
setupToolHandlers()
Claude가 도구(get_forecast
)를 실행하면 호출됨.
→ 날씨 예보 기능.
핵심적으로 MCP 서버는 리소스 및 툴 리스트를 전달하고,
실행 시 그 핸들러가 호출된다.
리소스는 주로 정적인 데이터 전달용으로 쓰는 것이 좋다.
날씨처럼 동적 데이터는 툴로 처리하는 것이 더 적절해 보인다.
전체 코드
https://github.com/93minki/weather-forecast-mcp-server/blob/main/src/index.ts
📚 참고 자료