ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘(Claude Desktop)에 MCP μ„œλ²„λ“€μ„ μ—°κ²°ν•΄λ³΄λ©΄μ„œ κ²½ν—˜ν–ˆλ˜ 였λ₯˜μ™€ ν•΄κ²° 방법에 λŒ€ν•΄μ„œ κ³΅μœ ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ„œλ‘œ λ‹€λ₯Έ 컴퓨터 ν™˜κ²½μœΌλ‘œ 인해 생각보닀 λ§Žμ€ μ‚¬λžŒλ“€μ΄ μ˜λ„μΉ˜μ•Šκ²Œ μ‚½μ§ˆμ„ ν•˜κ³  μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 아직은 MCP μ„œλ²„λ“€μ΄ 완성도 있게 μž‘μ„±λ˜λŠ” μƒνƒœλŠ” μ•„λ‹ˆλ―€λ‘œ 였λ₯˜μ™€ μ‹€νŒ¨μ— λŒ€ν•œ κ²½ν—˜μ΄ 더 μ€‘μš”ν•˜μ§€ μ•Šμ„κΉŒ μ‹ΆμŠ΅λ‹ˆλ‹€.

μš΄μ˜μ²΄μ œλ³„ λ…Έλ“œ 및 파이썬 νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λ‘œ μΈν•œ 였λ₯˜

command not found: /Users/username/Desktop

μ•€νŠΈλ‘œν”½μ΄ 기본적으둜 μ œκ³΅ν•˜λŠ” Filesystem MCP ServerλŠ” TypeScript MCP SDK둜 μž‘μ„±λœ κ°€μž₯ 기본적인 MCP μ„œλ²„μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ, λ…Έλ“œλ₯Ό nvm κ³Ό 같은 νŒ¨ν‚€μ§€ 관리 λ„κ΅¬λ‘œ μ„€μΉ˜ν–ˆλ‹€λ©΄ μ˜¬λ°”λ₯΄κ²Œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” 상황을 λ§Œλ‚  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ λ°œμƒν•œ 경우 ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘μ΄ λ°”λΌλ³΄λŠ” npx 의 전체 경둜λ₯Ό λͺ…μ‹œν•˜λŠ”κ²Œ ν•΄κ²°μ±…μ΄μ§€λ§Œ servers#64 이슈의 λŒ“κΈ€μ²˜λŸΌ ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘μ„ μœ„ν•œ μ‰˜ 슀크립트λ₯Ό λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•΄λ„ λ©λ‹ˆλ‹€.

$ sudo vi /usr/local/bin/npx-for-claude

---
#!/usr/bin/env bash
export PATH="/Users/username/.nvm/versions/node/v22.14.0/bin:$PATH"
exec npx "$@"
---

$ sudo chmod +x /usr/local/bin/npx-for-claude
{
  "mcpServers": {
    "filesystem": {
      "command": "npx-for-claude",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop"
      ]
    }
  }
}
spawn uvx ENOENT
2025-04-09T04:55:27.164Z [time] [info] Initializing server... 2025-04-09T04:55:27.186Z [time] [error] spawn uvx ENOENT {"context":"connection","stack":"Error: spawn uvx ENOENT\n at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n at onErrorNT (node:internal/child_process:483:16)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"} 2025-04-09T04:55:27.187Z [time] [error] spawn uvx ENOENT {"stack":"Error: spawn uvx ENOENT\n at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n at onErrorNT (node:internal/child_process:483:16)\n at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"} 2025-04-09T04:55:27.188Z [time] [info] Server transport closed 2025-04-09T04:55:27.188Z [time] [info] Client transport closed 2025-04-09T04:55:27.189Z [time] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log. 2025-04-09T04:55:27.189Z [time] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) {"context":"connection"}

Python MCP SDK둜 μž‘μ„±λ˜λŠ” MCP μ„œλ²„λ“€μ„ λ§₯ ν™˜κ²½μ—μ„œ uvx 둜 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ uv λ₯Ό μ„€μΉ˜ν•œ κ²½μš°μ—λ„ λ™μΌν•©λ‹ˆλ‹€. μ‰˜ 슀크립트 기반으둜 μ„€μΉ˜ν•˜λŠ” 경우 /usr/.local/bin κ²½λ‘œμ— μ„€μΉ˜λ˜λŠ”λ° ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘μ—μ„œ μ‚¬μš©λ˜λŠ” κ²½λ‘œκ°€ μ•„λ‹™λ‹ˆλ‹€. 이 κ²½μš°μ—λ„ 전체 경둜λ₯Ό λͺ…μ‹œν•˜κ±°λ‚˜ Homebrew둜 μ„€μΉ˜ν•˜λ©΄ ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘μ΄ λ°”λΌλ³΄λŠ” κ²½λ‘œμ— μ œλŒ€λ‘œ μ„€μΉ˜λ©λ‹ˆλ‹€.

Google Drive MCP μ—μ„œ 도컀 μ»¨ν…Œμ΄λ„ˆλ‘œ 인증할 수 μ—†λŠ” 문제

servers#1289 μ΄μŠˆμ™€ 같이 Google Drive MCP μ„œλ²„λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ꡬ글 OAuth2 μ‚¬μš©μž 정보λ₯Ό 톡해 ν¬λ ˆλ΄μ…œμ„ λ°œκΈ‰ν•˜λ €κ³  ν• λ•Œ @google-cloud/local-authμ—μ„œ 랜덀 포트둜 μ‹€ν–‰λ˜μ–΄ README에 기재된 λ‚΄μš©κ³Ό λ‹€λ₯΄κ²Œ 인증 κ²°κ³Όκ°€ μ •μƒμ μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈλ  수 μ—†λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

OAuth ν΄λΌμ΄μ–ΈνŠΈ 아이디λ₯Ό λ§Œλ“€λ•Œ Desktop App μœ ν˜•μœΌλ‘œ λ§Œλ“€λ©΄ installed λ₯Ό ν‚€λ‘œ κ°€μ§€λŠ” JSON νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ, κ°€μ΄λ“œμ— 기재된 λͺ…λ Ήμ–΄λŒ€λ‘œ 3000 포트둜 μˆ˜μ‹ ν•˜κΈ° μœ„ν•΄μ„œλŠ” web 으둜 λ³€κ²½ν•˜κ³  μ‹€ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€.

{
  "web": {
    "client_id": "YOUR_CLIENT_ID",
    "project_id": "YOUR_PROJECT_ID",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "YOUR_CLIENT_SECRET",
    "redirect_uris": ["http://localhost"]
  }
}

Redis MCPκ°€ μ»€μ„œ μ•±μ—μ„œ μ—΄λ¦¬λŠ” 문제

μœˆλ„μš° ν™˜κ²½μ—μ„œ ν΄λ‘œλ“œ λ°μŠ€ν¬νƒ‘μ΄ Redis MCP Serverλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ index.js 파일이 μ»€μ„œ μ•±μœΌλ‘œ μ‹€ν–‰λ˜λŠ” 증상을 κ²½ν—˜ν–ˆμŠ΅λ‹ˆλ‹€. Redis MCP μ„œλ²„ 섀정은 λ‹€μŒκ³Ό 같이 별닀λ₯Έ 뢀뢄이 μ—†λŠ” μƒνƒœμž…λ‹ˆλ‹€.

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
}
2025-04-10T12:45:00.248Z [redis] [info] Initializing server...
2025-04-10T12:45:00.487Z [redis] [info] Server started and connected successfully
2025-04-10T12:45:00.604Z [redis] [info] Message from client: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
2025-04-10T12:45:43.369Z [redis] [info] Server transport closed
2025-04-10T12:45:43.369Z [redis] [info] Client transport closed
2025-04-10T12:45:43.369Z [redis] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log.
2025-04-10T12:45:43.370Z [redis] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) {"context":"connection"}
2025-04-10T12:45:43.371Z [redis] [info] Client transport closed

μ•€νŠΈλ‘œν”½μ΄ μ œκ³΅ν•œ MCP λŒ€μ‹ μ— GongRzhe/REDIS-MCP-Serverλ₯Ό μ‚¬μš©ν–ˆμ„λ•ŒλŠ” λ°œμƒν•˜μ§€ μ•Šμ•˜λŠ”λ° νƒ€μž…μŠ€ν¬λ¦½νŠΈ SDK둜 μž‘μ„±λœ λ‹€λ₯Έ MCP μ„œλ²„λ“€μ„ μ‚΄νŽ΄λ³Έ κ²°κ³Ό, λ…Έλ“œμ— λŒ€ν•œ Shebang이 μƒλž΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€λ§Œ 이것이 μ›μΈμΌμ§€λŠ” 잘 λͺ¨λ₯΄κ² μœΌλ‚˜ 이슈둜 등둝해놓은 μƒνƒœμž…λ‹ˆλ‹€.

Redis MCP μ—μ„œ λΉ„λ°€λ²ˆν˜Έ 인증이 ν•„μš”ν•œ 경우

Redis MCP Server의 README νŒŒμΌμ—λŠ” λ‘œμ»¬μ— μ‹€ν–‰ν•œ λ ˆλ””μŠ€μ— μ—°κ²°ν•˜λŠ” μ˜ˆμ‹œλ‘œ μ•ˆλ‚΄ν•΄μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½, requirepass μ˜΅μ…˜μ΄ 적용된 λ ˆλ””μŠ€μ— μ—°κ²°ν•˜λ €λ©΄ URL에 λΉ„λ°€λ²ˆν˜Έκ°€ ν¬ν•¨λœ ν˜•νƒœλ‘œ μ„€μ •ν•΄μ•Όν•©λ‹ˆλ‹€.

docker run --name redis -d -p 6379:6379 redis redis-server --requirepass 1234
{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@gongrzhe/server-redis-mcp@1.0.0", "redis://:1234@localhost:6379"]
    }
  }
}

Github MCP μ—μ„œ 쑰직 λ¦¬νŒŒμ§€ν† λ¦¬ κΆŒν•œμ΄ μ—†μŒ

github-mcp-server#153처럼 Github MCP μ„œλ²„λ₯Ό μœ„ν•œ μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰ν•  λ•Œ Fine-grained PAT 둜 λ°œκΈ‰ν•˜λ©΄ 쑰직 κ³„μ •μ˜ λ¦¬νŒŒμ§€ν† λ¦¬λ₯Ό μ‘°νšŒν•  수 μžˆλŠ” κΆŒν•œμ΄ μ—†λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, ν΄λž˜μ‹(classic) ν† ν°μœΌλ‘œ λ°œκΈ‰λ°›μ•„μ„œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

Time MCP: No time zone found with key KST

Traceback (most recent call last):
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/zoneinfo/_common.py", line 12, in load_tzdata
    return resources.files(package_name).joinpath(resource_name).open("rb")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/pathlib.py", line 1013, in open
    return io.open(self, mode, buffering, encoding, errors, newline)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/.cache/uv/archive-v0/S2oZOdPKchj5YFK67-25o/lib/python3.12/site-packages/tzdata/zoneinfo/KST'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/username/.cache/uv/archive-v0/S2oZOdPKchj5YFK67-25o/bin/mcp-server-time", line 12, in <module>
    sys.exit(main())
             ^^^^^^
  File "/Users/username/.cache/uv/archive-v0/S2oZOdPKchj5YFK67-25o/lib/python3.12/site-packages/mcp_server_time/__init__.py", line 15, in main
    asyncio.run(serve(args.local_timezone))
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/Users/username/.cache/uv/archive-v0/S2oZOdPKchj5YFK67-25o/lib/python3.12/site-packages/mcp_server_time/server.py", line 119, in serve
    local_tz = str(get_local_tz(local_timezone))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/username/.cache/uv/archive-v0/S2oZOdPKchj5YFK67-25o/lib/python3.12/site-packages/mcp_server_time/server.py", line 45, in get_local_tz
    return ZoneInfo(str(tzinfo))
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/username/Library/Application Support/uv/python/cpython-3.12.9-macos-aarch64-none/lib/python3.12/zoneinfo/_common.py", line 24, in load_tzdata
    raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key KST'
2025-04-10T02:15:25.495Z [time] [info] Server transport closed
2025-04-10T02:15:25.495Z [time] [info] Client transport closed
2025-04-10T02:15:25.495Z [time] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log.
2025-04-10T02:15:25.495Z [time] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) {"context":"connection"}

Time MCP Serverλ₯Ό μ„€μ •ν•  λ•Œ νƒ€μž„μ‘΄ μ˜΅μ…˜μ„ μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ μ‹œμŠ€ν…œ νƒ€μž„μ‘΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, IANA νƒ€μž„μ‘΄ ν‘œκΈ°κ°€ μ•„λ‹Œ 경우 μœ„μ™€ 같은 였λ₯˜κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— κ°€μ΄λ“œ λ¬Έμ„œμ—μ„œλŠ” 선택 μ˜΅μ…˜μ΄μ§€λ§Œ --local-timezone μ˜΅μ…˜μ„ μ§€μ •ν•˜λŠ” 것을 ꢌμž₯ν•˜λŠ” λ°”μž…λ‹ˆλ‹€.

{
  "mcpServers": {
    "time": {
      "command": "uvx",
      "args": ["mcp-server-time", "--local-timezone=Asia/Seoul"]
    }
  }
}

MCP μ„œλ²„ μ„€μ • μ‹œ κ³ μƒν•˜λŠ” λ§Žμ€ λΆ„λ“€μ—κ²Œ 도움이 되길 λ°”λžλ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.