Skip to main content
Glama
MCP_SERVER_TROUBLESHOOTING_GUIDE.md4.97 kB
# MCP 서버 연결 문제 해결 가이드 **중요도: 🔴 CRITICAL** - MCP 서버 개발 시 반드시 참조할 문서 ## 발견된 핵심 문제 ### 🚨 **Entry Point Check 문제** **증상:** - `claude mcp list`에서 "✗ Failed to connect" 표시 - MCP 서버 코드는 정상이고 직접 실행도 가능 - 다른 모든 설정은 올바름 **원인:** ```javascript // ❌ 문제가 되는 코드 if (import.meta.url === `file://${process.argv[1]}`) { main().catch(console.error); } ``` Windows 환경에서 이 조건문이 **false**로 평가되어 `main()` 함수가 실행되지 않음. **해결책:** ```javascript // ✅ 올바른 코드 main().catch(console.error); ``` 단순히 조건 없이 `main()` 함수를 직접 호출. --- ## 문제 해결 과정 ### 1단계: 최소 MCP 서버 생성 ```javascript // minimal-test.js - 연결만 확인하는 기본 서버 const server = new Server({ name: 'minimal-test', version: '0.1.0' }, { capabilities: { tools: {} } }); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [] }; }); main().catch(console.error); // 조건 없이 바로 실행 ``` ### 2단계: 단계별 기능 추가 - 기본 서버가 연결되는 것을 확인한 후 - 하나씩 기능을 추가하면서 어디서 문제가 생기는지 확인 ### 3단계: 차이점 비교 ```bash diff src/test-server.js src/minimal-test.js ``` --- ## 자주 발생하는 MCP 서버 연결 문제들 ### 1. Entry Point Check 문제 ⭐ **가장 흔함** ```javascript // ❌ Windows에서 문제 발생 if (import.meta.url === `file://${process.argv[1]}`) { main().catch(console.error); } // ✅ 항상 작동 main().catch(console.error); ``` ### 2. Arguments Destructuring 문제 ```javascript // ❌ 잠재적 문제 const { name, arguments: args } = request.params; // ✅ 안전한 방법 const { name } = request.params; const args = request.params.arguments || {}; ``` ### 3. Package.json 설정 누락 ```json { "type": "module", // ES Modules 사용 시 필수 "dependencies": { "@modelcontextprotocol/sdk": "^0.4.0" } } ``` ### 4. 잘못된 경로 등록 ```bash # ❌ 상대경로 사용 claude mcp add test-server -- node src/test-server.js # ✅ 절대경로 사용 (Windows) claude mcp add test-server -- node "C:\\full\\path\\to\\src\\test-server.js" ``` --- ## 확실한 MCP 서버 템플릿 ```javascript #!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'; const server = new Server( { name: 'your-mcp-server', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'your_tool', description: 'Your tool description', inputSchema: { type: 'object', properties: {}, additionalProperties: false } } ] }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name } = request.params; const args = request.params.arguments || {}; if (name === 'your_tool') { return { content: [ { type: 'text', text: 'Tool response' } ] }; } throw new Error(`Unknown tool: ${name}`); }); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error('MCP Server started'); } // ⭐ 핵심: 조건 없이 바로 실행 main().catch(console.error); ``` --- ## 디버깅 절차 ### 1. 기본 연결 확인 ```bash claude mcp list # 해당 서버가 ✓ Connected인지 확인 ``` ### 2. 서버 직접 실행 테스트 ```bash cd /path/to/mcp/server node src/your-server.js # 에러 메시지 없이 시작되는지 확인 ``` ### 3. 최소 서버로 점진적 테스트 - 최소한의 기능만 있는 서버부터 시작 - 하나씩 기능 추가하며 어디서 문제 발생하는지 확인 ### 4. 경로 및 권한 확인 ```bash # Windows 절대경로 사용 claude mcp add server-name -- node "C:\\full\\path\\to\\server.js" ``` --- ## 경험 기반 팁 1. **MCP 서버 개발 시 가장 먼저 확인할 것:** - Entry point check 제거 - 절대경로로 등록 - `type: "module"` 설정 확인 2. **문제 발생 시 접근 방법:** - 최소 서버부터 시작 - 단계적으로 기능 추가 - diff로 차이점 비교 3. **재시작이 필요한 경우:** - MCP 서버 등록 후 Claude Code 재시작 필요할 수 있음 - 특히 새로 등록한 서버의 도구가 보이지 않을 때 --- **저장일:** 2025-01-05 **발견 세션:** 3번째 MCP 서버 개발 중 **중요도:** CRITICAL - 모든 MCP 서버 개발 시 필수 참조

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/foswmine/workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server