ð§ Ultimate MCP Client
ð§ Ultimate MCP Client ã«ã€ããŠ
å€éšããŒã«ãã³ã³ããã¹ãããŒã¿ã䜿ã AI ã¢ãã«åãã®éåæ Python MCP ã¯ã©ã€ã¢ã³ãã§ãã察話å CLI ãš Web UI ã«å ãããµãŒããŒæ€åºãäŒè©±ã®åå²ãç£èŠæ©èœãåããŠããŸãã
äž»ãªæ©èœ
- 01察話å CLI ãšãªã¢ã¯ãã£ã㪠Web UI
- 02stdioãSSEãstreaming HTTP ã§æ¥ç¶
- 03ããŒã«ã«ããããã¯ãŒã¯ãã¬ãžã¹ããªã®ãµãŒããŒæ€åº
- 04äŒè©±ã®åå²ãšæ°žç¶å
- 05OpenTelemetry ãšããã·ã¥ããŒãã«ããç£èŠ
- 06èšå®å¯èœãª TTL ã«ããããŒã«çµæã®ãã£ãã·ã¥
掻çšã·ãŒã³
- 01Claude ãš MCP ãµãŒããŒã®ããŒã«ã䜿ã£ã察話
- 02ããŒã«ã«ãããã¯ãŒã¯äžã® MCP ãµãŒããŒã®æ€åºãšæ¥ç¶
- 03è€æ°ã®äŒè©±åå²ã®æ€èš
- 04ãµãŒããŒã®ç¶æ ãããŒã«ã®çšŒåç¶æ³ã®ç¢ºèª
MCP 察å¿
stdioãSSEãstreaming HTTP ãéã㊠MCP ãµãŒããŒã«æ¥ç¶ãã管çããŸããããŒã«ã«ãã¹ãmDNSãããŒãã¹ãã£ã³ããªã¢ãŒãã¬ãžã¹ããªãããµãŒããŒãæ€åºããã¢ãã«ã®ããŒã«åŒã³åºããé©åãªãµãŒããŒã«æ¯ãåããŸãã
詳现
ð§ Ultimate MCP Client
**Model Context ProtocolïŒMCPïŒ**åãã®å æ¬çãªéåæã¯ã©ã€ã¢ã³ãã§ããAnthropic ã® Claude ã®ãããªåŒ·å㪠AI ã¢ãã«ãšãå€éšããŒã«ãããŒã«ã«ïŒãªã¢ãŒããµãŒããŒãã³ã³ããã¹ãããŒã¿ãœãŒã¹ã®äžçãã€ãªããè€éã§ç¶æ ãä¿æããã€ã³ã¿ã©ã¯ã·ã§ã³ãå¯èœã«ããŸãã

Jeffrey Emanuel ã«ãã£ãŠéçºãããŸãã
ð¯ ç®çãšèæ¯
Model Context ProtocolïŒMCPïŒã¯ãAI ã¢ãã«ãå€éšæ©èœïŒããŒã«ããªãœãŒã¹ãããã³ããïŒãšé£æºããæ¹æ³ãæšæºåããŸãããã®ã¯ã©ã€ã¢ã³ãã¯ãMCP ãæŽ»çšããããã®ç©¶æ¥µã®ã€ã³ã¿ãŒãã§ãŒã¹ãç®æããæ¬¡ã®æ©èœãæäŸããŸãã
- å
ç¢ãªæ¥ç¶æ§ïŒ å埩åãé«åºŠãªãšã©ãŒåŠçãã€ã³ããªãžã§ã³ããªæ€åºæ©èœãåãã倿§ãª MCP ãµãŒããŒïŒ
stdioãsseïŒãžç¢ºå®ã«æ¥ç¶ããŸãã - åªãããŠãŒã¶ãŒäœéšïŒ 匷åãªå¯Ÿè©±å CLI ãšææ°ã®ãªã¢ã¯ãã£ã㪠Web UI ã®äž¡æ¹ãæäŸãã倿§ãªã¯ãŒã¯ãããŒã§äœ¿ãããããå®çŸããŸãã
- é«åºŠãªç¶æ 管çïŒ åçŽãªãã£ããå±¥æŽã«ãšã©ãŸãããåå²å¯èœãªäŒè©±ã°ã©ããã»ãã·ã§ã³ããŸããã§ä¿æãããç¶æ ãã¹ããŒããªã³ã³ããã¹ãæé©åææ³ãåããŠããŸãã
- éçºè åãã®å éšæ å ±ïŒ OpenTelemetry ã®ã¡ããªã¯ã¹ãšãã¬ãŒã¹ã«ãã詳现ãªå¯èŠ³æž¬æ§ã«å ããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®å¥å šæ§ãããã©ãŒãã³ã¹ãç£èŠããã©ã€ãããã·ã¥ããŒããæäŸããŸãã
- ã·ãŒã ã¬ã¹ãªçµ±åïŒ ããŒã«ã«ã®ãã¡ã€ã«ã·ã¹ãã ã¹ã¯ãªãããããŒã«ã«ãããã¯ãŒã¯ïŒmDNSïŒãµãŒããŒãããŒã«ã«ããŒãã¹ãã£ã³ã®çµæããªã¢ãŒãã¬ãžã¹ããªã®ãšã³ããªãããã«ã¯ Claude Desktop ã¢ããªã®ãããªæ¢åããŒã«ã®èšå®ãç°¡åã«æ€åºããŠçµ±åã§ããŸãã
ãã®ãããžã§ã¯ãã¯ãä¿¡é Œæ§ã®é«ã stdio éä¿¡ãéåæç¶æ
管çãCLI ãš Web ã€ã³ã¿ãŒãã§ãŒã¹ã®äž¡æ¹ã§äžè²«ããäœéšãæäŸããããšãªã©ãé倧ãªãšã³ãžãã¢ãªã³ã°äžã®èª²é¡ã«åãçµã¿ãçã«å
æ¬ç㪠MCP ã¯ã©ã€ã¢ã³ããœãªã¥ãŒã·ã§ã³ãå®çŸããŸãã
ð äž»ãªæ©èœ
-
2 çš®é¡ã®ã€ã³ã¿ãŒãã§ãŒã¹ïŒWeb UI ãš CLI
- Web UIïŒ Alpine.jsãDaisyUIãTailwind CSS ã§æ§ç¯ããããçŸãããªã¢ã¯ãã£ããªã€ã³ã¿ãŒãã§ãŒã¹ã§ããWebSocket ã«ãããªã¢ã«ã¿ã€ã ã®ãã£ããã¹ããªãŒãã³ã°ããµãŒããŒïŒããŒã«ç®¡çã¢ãŒãã«ãèŠèŠçãªäŒè©±åå²ãã¥ãŒãèšå®ãè€æ°ã®ããŒãåãæ¿ãïŒã³ãŒãã®ãã€ã©ã€ã衚瀺ã§ã©ã€ãïŒããŒã¯ã¢ãŒããåæ ïŒãããŒã«ã®çŽæ¥å®è¡æ©èœãåããŠããŸãã
- CLIïŒ æ©èœè±å¯ãªå¯Ÿè©±åã·ã§ã«ïŒ
/commandsãèªåè£å®ãRich ã«ãã Markdown ã¬ã³ããªã³ã°ïŒãšãTyper ã䜿ã£ããããã¢ãŒãã§ã®æäœãæäŸããŸããç£èŠçšã®ã©ã€ã Textual User InterfaceïŒTUIïŒããã·ã¥ããŒããå«ãŸããŠããŸãã
-
å ç¢ãªãµãŒããŒæ¥ç¶ãšç®¡ç
stdioãsseïŒHTTP Server-Sent EventsïŒãããã³streaming-httpMCP ãµãŒããŒããµããŒãããŸãã- é«åºŠãª STDIO åŠçïŒäž»èŠãªãšã³ãžãã¢ãªã³ã°ã®åãçµã¿ïŒïŒ ãã€ãºãå€ãããŸãã¯ä»æ§ã«æºæ ããŠããªãå¯èœæ§ã®ãã
stdioãµãŒããŒãé©åã«åŠçããããã«èšèšããããã«ã¹ã¿ã ã®RobustStdioSessionãåããŠããŸããæ¬¡ã®æ©èœãå«ãŸããŸãã- ãã€ãºãã£ã«ã¿ãªã³ã°ïŒ ãããã³ã«ãç Žæãããå¯èœæ§ã®ãããJSON-RPC 以å€ã®åºåãç¡èŠããŸãã
- Future ã®çŽæ¥è§£æ±ºïŒ è€éãªãã¥ãŒã€ã³ã°ãé¿ããå¿çåŠçãé«éåããŸãã
- ããã»ã¹ã®ã©ã€ããµã€ã¯ã«ç®¡çïŒ
stdioãµãŒããŒããã»ã¹ã確å®ã«èµ·åãç£èŠãçµäºã匷å¶çµäºããŸãã - éèŠãª STDIO å®å
šå¯ŸçïŒ å€å±€ã·ã¹ãã ïŒ
StdioProtectionWrapperãsafe_stdoutã³ã³ããã¹ããããŒãžã£ãŒãget_safe_console()颿°ïŒã«ãããsys.stdoutãžã®èª€ã£ãæžã蟌ã¿ãstdioãã£ãã«ãç Žæãããã®ãé²ããŸããããã«ãããè€æ°ã®stdioãµãŒããŒãšãŠãŒã¶ãŒåºåïŒå¿ èŠã«å¿ããŠstderrã«ãªãã€ã¬ã¯ãïŒãå®å šã«å ±åãããããŸããããã¯å®å®æ§ã®ç¢ºä¿ã«äžå¯æ¬ ã§ããã
- èé害æ§ïŒ ææ°ããã¯ãªããšãé害ãçºçãããµãŒããŒåãã®ãµãŒããããã¬ãŒã«ãŒïŒ
@retry_with_circuit_breakerïŒãçšããŠãèªåçã«æ¥ç¶ãå詊è¡ããŸããããã¯ã°ã©ãŠã³ãã®ãã«ã¹ã¢ãã¿ãªã³ã°ïŒServerMonitorïŒã§ãµãŒããŒã®å¿çæ§ã確èªããŸãã
-
ææ°ã®ãã©ã³ã¹ããŒãã®ãµããŒã
- Streaming-HTTPïŒ FastMCP ã©ã€ãã©ãªãéããŠãææ°ã®
streaming-httpãã©ã³ã¹ããŒããããã³ã«ããã€ãã£ãã«ãµããŒãããŸãããã®ãã©ã³ã¹ããŒãã¯ãã¹ããªãŒãã³ã°æ©èœãå èµããå¹çç㪠HTTP åæ¹åéä¿¡ãæäŸãããããææ°ã® MCP ãµãŒããŒã®ãããã€ã«æé©ã§ãã - ã€ã³ããªãžã§ã³ããªãã©ã³ã¹ããŒãæ€åºïŒ ãµãŒã㌠URL ãšæ€åºæ
å ±ã«åºã¥ããŠãé©åãªãã©ã³ã¹ããŒãã¿ã€ããèªåæ€åºããŠææ¡ããŸãã
- ããŒã«ã«ãã¡ã€ã«ãã¹ â
stdio /sseãŸãã¯/eventsãã¹ãå«ã URL âsse- äžè¬ç㪠HTTP/HTTPS URL â
streaming-httpïŒææ°ã®ãµãŒããŒã®ããã©ã«ãïŒ
- ããŒã«ã«ãã¡ã€ã«ãã¹ â
- Streaming-HTTPïŒ FastMCP ã©ã€ãã©ãªãéããŠãææ°ã®
-
ã€ã³ããªãžã§ã³ããªãµãŒããŒæ€åº
- èšå®ããããã¡ã€ã«ã·ã¹ãã ãã¹ã«ããããŒã«ã«ã®
stdioãµãŒããŒïŒPython/JS ã¹ã¯ãªããïŒãèªåæ€åºããŸãã - mDNS æ€åºïŒZeroconfïŒïŒ ããŒã«ã«ãããã¯ãŒã¯äžã® MCP ãµãŒããŒïŒ
_mcp._tcp.local.ïŒããªã¢ã«ã¿ã€ã ã§æ€åºããéç¥ããŸããLAN ãµãŒããŒã管çããããã®å¯Ÿè©±åã³ãã³ãïŒ/discover listã/discover connectãªã©ïŒãåããŠããŸãã - ããŒã«ã«ããŒãã¹ãã£ã³ïŒ èšå®å¯èœãªç¯å²ã®ããŒã«ã«ããŒãïŒäŸïŒ8000-9000ïŒãç©æ¥µçã«ã¹ãã£ã³ãã
initializeãã³ãã·ã§ã€ã¯ã詊ã¿ãŠ MCP ãµãŒããŒãæ€åºããŸãããã¹ãŠã®ãã©ã³ã¹ããŒãã¿ã€ãïŒstdioãsseãstreaming-httpïŒã®æ€åºããµããŒãããŸãã/config port-scan ...ã³ãã³ãã§èšå®ã§ããŸãã - ã¬ãžã¹ããªé£æºïŒ èšå®ã§æå®ããããªã¢ãŒã MCP ã¬ãžã¹ããªã«æ¥ç¶ããå ±æãµãŒããŒãèŠã€ããŠè¿œå ããŸãã
- Claude Desktop ã®ã€ã³ããŒãïŒ ãããžã§ã¯ãã®ã«ãŒãã«ãã
claude_desktop_config.jsonãèªåæ€åºããŸããèšå®ãã€ã³ããªãžã§ã³ãã«é©å¿ããŸããwsl.exe ... bash -c "cmd"ã®åŒã³åºãããLinux ã·ã§ã«ã®çŽæ¥å®è¡ïŒ/bin/bash -c "cmd"ïŒã«ãªãããããŸãã- åŒæ°å
ã® Windows 圢åŒã®ãã¹ïŒ
C:\...ïŒããadapt_path_for_platformã䜿çšã㊠Linux/WSL çžåœã®ãã¹ïŒ/mnt/c/...ïŒã«å€æããã·ãŒã ã¬ã¹ã«é£æºããŸãã
- èšå®ããããã¡ã€ã«ã·ã¹ãã ãã¹ã«ããããŒã«ã«ã®
-
匷å㪠AI 飿ºãšã¹ããªãŒãã³ã°
- å
¬åŒã®
anthropicSDK ãä»ã㊠Claude ã¢ãã«ãšæ·±ã飿ºããè€æ°ã¿ãŒã³ã«ãããããŒã«äœ¿çšã®ã·ããªãªããµããŒãããŸãã - ãªã¢ã«ã¿ã€ã ã¹ããªãŒãã³ã°ïŒ WebSocketïŒWeb UIïŒãš
Richã«ããã©ã€ãã¬ã³ããªã³ã°ïŒCLIïŒãéããŠãAI ã®å¿çãšããŒã«ã®ã¹ããŒã¿ã¹æŽæ°ãã¹ããªãŒãã³ã°ããŸããæ§é åå ¥åãå¿ èŠãšããããŒã«åãã®**éšåç㪠JSON å ¥åã®èç©ïŒinput_json_deltaïŒ**ãªã©ãè€éãªã¹ããªãŒãã³ã°ã€ãã³ããåŠçããŸãã - ã€ã³ããªãžã§ã³ããªããŒã«ã«ãŒãã£ã³ã°ïŒ èªã¿èŸŒãŸããæ©èœã«åºã¥ããŠããŒã«åŒã³åºããé©åãªéä¿¡å ãµãŒããŒã«æ¯ãåããŸããAPI äºææ§ã®ããã«ç¡å®³åããååã䜿çšããªãããå éšã§ã¯å ã®ååã远跡ããŸãã
- ããŒã«ã®çŽæ¥å®è¡ïŒ
/toolã³ãã³ãïŒCLIïŒãŸãã¯å°çšã¢ãŒãã«ïŒWeb UIïŒãããã«ã¹ã¿ã JSON ãã©ã¡ãŒã¿ãŒãæå®ããŠç¹å®ã®ããŒã«ãå®è¡ã§ããŸãã
- å
¬åŒã®
-
é«åºŠãªäŒè©±ç®¡ç
- ãã©ã³ãã³ã°: ãã©ãŒã¯å¯èœãªäŒè©±ã°ã©ã (
ConversationGraph) ã«ãããå±¥æŽã倱ããã«ç°ãªãã€ã³ã¿ã©ã¯ã·ã§ã³ãã¹ãæ¢çŽ¢ã§ããŸããWeb UI ã§èŠèŠçã«è¡šçŸãããããã²ãŒãå¯èœã§ãã - æ°žç¶å: äŒè©±ã°ã©ã (ãã¹ãŠã®ãã©ã³ããšã¡ãã»ãŒãžãå«ã) ã¯ãèšå®ãã£ã¬ã¯ããªã® JSON ãã¡ã€ã«ã«èªåçã«ä¿åãããã»ãã·ã§ã³éã§ã¹ããŒããä¿æãããŸãã
- ã³ã³ããã¹ãæé©å: æå®ããã AI ã¢ãã« (èšå®å¯èœ) ã䜿çšããé·ãäŒè©±å±¥æŽã®èªåãŸãã¯æåèŠçŽ (
/optimize) ã«ãããã³ã³ããã¹ãå¶éå ã«çãŸããŸãã - åçããã³ãã:
/promptã³ãã³ãã䜿çšããŠãµãŒããŒããååŸããäºåå®çŸ©ã®ããã³ãããã³ãã¬ãŒããçŸåšã®äŒè©±ã³ã³ããã¹ãã«æ³šå ¥ããŸãã - ã€ã³ããŒã/ãšã¯ã¹ããŒã: äŒè©±ãã©ã³ãå
šäœãç°¡åã«ä¿å (
/export) ããã³èªã¿èŸŒã¿ (/import) ã§ããå ±æãŸãã¯ããã¯ã¢ããçšã®ããŒã¿ãã« JSON 圢åŒã§å©çšã§ããŸãã
- ãã©ã³ãã³ã°: ãã©ãŒã¯å¯èœãªäŒè©±ã°ã©ã (
-
ãªãã¶ãŒãããªãã£ãšç£èŠ
- OpenTelemetry: ã¡ããªã¯ã¹ (ã«ãŠã³ã¿ãŒã
opentelemetry-sdkã䜿çšãããã¹ãã°ã©ã ) ãš ãã¬ãŒã¹ (ã¹ãã³) ã®çµ±åã«ãããã¯ã©ã€ã¢ã³ãæäœããµãŒããŒãªã¯ãšã¹ããããŒã«å®è¡ããã©ãŒãã³ã¹ãç£èŠã§ããŸãããããã°çšã«ã³ã³ãœãŒã«ãšã¯ã¹ããŒã¿ãŒãæå¹ã«ã§ããŸãã - ã©ã€ãããã·ã¥ããŒã:
- CLI:
Richã§æ§ç¯ããããªã¢ã«ã¿ã€ã TUI ããã·ã¥ããŒã (/dashboard) ã¯ããµãŒããŒãã«ã¹ãããŒã«äœ¿çšçµ±èšãããã³ã¯ã©ã€ã¢ã³ãæ å ±ã衚瀺ããŸãã - Web UI: ãµãŒããŒã¹ããŒã¿ã¹ããã«ã¹ã€ã³ãžã±ãŒã¿ãŒãããã³ã±ãŒãããªãã£æ°ãåçã«æŽæ°ããŸãã
- CLI:
- OpenTelemetry: ã¡ããªã¯ã¹ (ã«ãŠã³ã¿ãŒã
-
ã¹ããŒããã£ãã·ã³ã°
- ããŒã«çµæã®é床åäžãšã³ã¹ãåæžã®ããã®ãªãã·ã§ãã«ãªãã£ã¹ã¯ (
diskcache) ããã³ã¡ã¢ãªå ãã£ãã·ã³ã°ã - ããŒã«ã«ããŽãªãŒããš (äŸ:
weatherãfilesystem) ã®èšå®å¯èœãª Time-To-Live (TTL)ã - äŸåé¢ä¿è¿œè·¡: ããŒã«éã®é¢ä¿ãå®çŸ©ããŸãã1 ã€ã®ããŒã«ã®ãã£ãã·ã¥ãç¡å¹åãã (äŸ:
stock:lookup) ãšãäŸåãããã£ãã·ã¥ãèªåçã«ç¡å¹åã§ããŸã (äŸ:stock:analyze)ãã°ã©ãã¯/cache dependenciesã§è¡šç€ºã§ããŸãã
- ããŒã«çµæã®é床åäžãšã³ã¹ãåæžã®ããã®ãªãã·ã§ãã«ãªãã£ã¹ã¯ (
ðž ã¹ã¯ãªãŒã³ã·ã§ãã
Ultimate MCP Client ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®æ§åã§ãïŒ
察話åCLIïŒããŒã«åŒã³åºãã»çµæã®ã¹ããªãŒãã³ã°ã¬ã¹ãã³ã¹ã |
ã©ã€ãTUIããã·ã¥ããŒãïŒãªã¢ã«ã¿ã€ã ãµãŒããŒïŒããŒã«ç£èŠïŒ | |
Web UIïŒã¡ãã»ãŒãžãšããŒã«æäœã衚瀺ããã¡ã€ã³ãã£ããã€ã³ã¿ãŒãã§ãŒã¹ã |
Web UIïŒæ¥ç¶ã¹ããŒã¿ã¹ãšã³ã³ãããŒã«ä»ããµãŒããŒç®¡çã¿ãã |
Web UIïŒäŒè©±ã¿ããåå²ã°ã©ãæ§é ã衚瀺ã |
泚èšïŒ äžéšã®ã¹ã¯ãªãŒã³ã·ã§ããã«ã¯
llm_gateway:generate_completionãªã©ã®ããŒã«ãå«ãŸããŠããŸããããã㯠LLM Gateway MCP ServerïŒåãèè ã«ããå¥ã®ãããžã§ã¯ãïŒã«ãã£ãŠæäŸãããŸãããã®ãµãŒããŒã¯ MCP ãã€ãã£ãã²ãŒããŠã§ã€ãšããŠæ©èœããé«åºŠãªãšãŒãžã§ã³ãïŒãã®ã¯ã©ã€ã¢ã³ãã䜿çšãã Claude ãªã©ïŒãããŸããŸãªä»ã® LLMïŒäŸïŒGeminiãGPT-4o-miniïŒã«ã€ã³ããªãžã§ã³ãã«ã¿ã¹ã¯ãå§è²ã§ããããã«ããå€ãã®å Žåã³ã¹ããšããã©ãŒãã³ã¹ãæé©åããŸãã
ð ã¯ã€ãã¯ã¹ã¿ãŒã
äŸåé¢ä¿ãã€ã³ã¹ããŒã«
Python 3.13+ ãå¿ èŠã§ã
ãŸã uvïŒæšå¥šãããé«é㪠Python ããã±ãŒãžã€ã³ã¹ããŒã©ãŒïŒãã€ã³ã¹ããŒã«ããŠãã ããïŒ
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
次ã«ãªããžããªãã¯ããŒã³ããPython 3.13+ ã䜿çšããŠä»®æ³ç°å¢ãã»ããã¢ããããããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãïŒ
git clone https://github.com/Dicklesworthstone/ultimate_mcp_client
cd ultimate_mcp_client
# Create venv using uv (recommended)
uv venv --python 3.13
# Or using standard venv
# python3.13 -m venv .venv
# Activate environment
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows Powershell
# .\venv\Scripts\activate.bat # Windows CMD
# Install dependencies using uv (fastest)
uv sync --all-extras
# Or using pip (slower)
# pip install -e . # Installs only core dependencies
API ããŒãèšå®
Anthropic API ããŒãç°å¢å€æ°ãšããŠèšå®ããŸãïŒ
export ANTHROPIC_API_KEY="sk-ant-..."
# Or add ANTHROPIC_API_KEY="sk-ant-..." to a .env file in the project root
ãããã¯ã察話åCLI ã® /config api-key ... ã³ãã³ãã䜿çšããããWeb UI ã®èšå®ããã«ããåŸã§èšå®ããããšãã§ããŸãã
Web UI ãèµ·åïŒæšå¥šïŒ
mcpclient run --webui
次ã«ãã©ãŠã¶ã http://127.0.0.1:8017ïŒãŸãã¯ã«ã¹ã¿ãã€ãºããããã¹ã/ããŒãïŒã«éããŸãã
ãã¹ããšããŒããã«ã¹ã¿ãã€ãºã§ããŸãïŒ
mcpclient run --webui --host 0.0.0.0 --port 8080
察話åCLIã¢ãŒããå®è¡
mcpclient run --interactive
ã¯ã³ã·ã§ããã¯ãšãªãå®è¡
mcpclient run --query "What's the weather in New York?"
CLI ããã·ã¥ããŒãã衚瀺
mcpclient run --dashboard
ããŒãã¹ãã£ã³ãèšå®
# Enable port scanning (if disabled)
mcpclient config port-scan enable true
# Set the range (example)
mcpclient config port-scan range 8000 8999
äŒè©±ãã€ã³ããŒãã»ãšã¯ã¹ããŒã
# Export current conversation branch to a default filename
mcpclient export
# Export current branch to a specific file
mcpclient export --output my_conversation.json
# Export specific conversation branch by ID (first 8 chars often suffice)
mcpclient export --id 12345678 --output specific_branch.json
# Import a conversation file (creates a new branch under the current node)
mcpclient import-conv my_conversation.json
ð Web UI ã®æ©èœ
Web UIïŒmcpclient run --webuiïŒã¯ãAlpine.jsãTailwind CSSãDaisyUI ã§æ§ç¯ããããã¢ãã³ã§äœ¿ããããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã
- ãªã¢ã«ã¿ã€ã ãã£ããïŒ WebSocket çµç±ã§ Claude ããã®å¿çãã¹ããªãŒãã³ã°ãããªãã㪠Markdown ã¬ã³ããªã³ã°ïŒ
Marked.jsçµç±ïŒãã³ã㌠ãã¿ã³ä»ãã®ã³ãŒããããã¯ã®ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãïŒhighlight.jsçµç±ïŒã«å¯Ÿå¿ããŠããŸãããŸããã·ã¹ãã ã¡ãã»ãŒãžãã¹ããŒã¿ã¹æŽæ°ãæç¢ºã«è¡šç€ºããŸãã - ããŒã«ã®æäœïŒ ããŒã«åŒã³åºãïŒåŒæ°ïŒãšãã®çµæïŒæåãŸãã¯ãšã©ãŒïŒããã£ããã®æµãã®äžã§èŠèŠçã«åºå¥ããŠè¡šç€ºããŸããã¢ãŒãã«ãããå©çšå¯èœãªããŒã«ãã«ã¹ã¿ã JSON ãã©ã¡ãŒã¿ãŒã§çŽæ¥å®è¡ã§ããããããã¹ãããããã°ã«åœ¹ç«ã¡ãŸãã
- ãµãŒããŒç®¡çïŒ å°çšã®ãµã€ãããŒã¿ãã«ãèšå®æžã¿ã®ãµãŒããŒãäžèŠ§è¡šç€ºãããŸãããŠãŒã¶ãŒã¯æ¬¡ã®æäœãã§ããŸãã
- ã¢ãŒãã«ãã©ãŒã ããæ°ãããµãŒããŒïŒSTDIO/SSE/Streaming-HTTPïŒã远å ããã
- ã¹ããŒã¿ã¹ã€ã³ãžã±ãŒã¿ãŒïŒèªã¿èŸŒã¿äžãæ¥ç¶æžã¿ãåææžã¿ããšã©ãŒïŒã確èªããªããããµãŒããŒã«æ¥ç¶ãŸãã¯åæããã
- ãµãŒããŒãæå¹åãŸãã¯ç¡å¹åããïŒç¡å¹åãããšèªåçã«åæãããŸãïŒã
- ãµãŒããŒèšå®ãåé€ããã
- åºæ¬çãªçšŒåç¶æ³ïŒã¹ããŒã¿ã¹ãšãåãµãŒããŒãæäŸããããŒã«ã®æ°ã確èªããã
- æ€åºïŒ Servers ã¿ãã®ãã¿ã³ãããæ€åºã¹ãã£ã³ïŒããŒã«ã«ãã¡ã€ã«ã·ã¹ãã ããªã¢ãŒãã¬ãžã¹ããªãmDNSïŒãå®è¡ã§ããŸããæ€åºããããµãŒããŒã¯äžèŠ§è¡šç€ºãããã¯ã³ã¯ãªãã¯ã§èšå®ã«è¿œå ã§ããŸãã
- äŒè©±ã®åå²ïŒ Conversation ã¿ãã®ã€ã³ã¿ã©ã¯ãã£ããªããªãŒãã¥ãŒã§ã
ConversationGraphãèŠèŠåããŸããå¥ã®åå²ãã¯ãªãã¯ããŠãã§ãã¯ã¢ãŠããïŒãã£ããè¡šç€ºãæŽæ°ïŒãçŸåšã®ãã€ã³ãããåå²ããŠæ°ããåå²ãäœæã§ããŸãã - ã³ã³ããã¹ã管çïŒ Conversation ã¿ãã®ãã¿ã³ãããçŸåšã®åå²ã®ã¡ãã»ãŒãžãæ¶å»ïŒèŠªïŒã«ãŒãã®ç¶æ ã«ãªã»ããïŒããããAPI çµç±ã§ã³ã³ããã¹ãã®æé©åïŒèŠçŽãå®è¡ãããã§ããŸãã
- ã€ã³ããŒãïŒãšã¯ã¹ããŒãïŒ Conversation ã¿ãã®ãã¿ã³ãããçŸåšã®åå²ã JSON ãã¡ã€ã«ã«ãšã¯ã¹ããŒããããããã¡ã€ã«éžæã§ä»¥åã«ãšã¯ã¹ããŒããã JSON ãã¡ã€ã«ãã€ã³ããŒããããã§ããŸãïŒããã¯ãšã³ãã«ã¢ããããŒããããŸãïŒã
- èšå®ïŒ å°çšã®ãµã€ãããŒã¿ããããäž»èŠãªèšå®ãªãã·ã§ã³ïŒAPI ããŒãããã©ã«ãã¢ãã«ãæå€§ããŒã¯ã³æ°ãTemperatureãã¹ããªãŒãã³ã°ããã£ãã·ã¥ãèªåæ€åºãmDNS ãªã©ã®æ©èœåãæ¿ãïŒã確èªã»å€æŽã§ããŸãã倿Žå 容ã¯ãµãŒããŒã®èšå®ãã¡ã€ã«ã«ä¿åãããŸãã
- ããŒãã®åãæ¿ãïŒ ããããããŠã³ã¡ãã¥ãŒãããå¹ åºãçš®é¡ã® DaisyUI ããŒããéžæã§ããŸããUI ã¯ããã«åãæ¿ãããéžæããããŒãã«å¿ããŠã³ãŒãã®ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããã©ã€ãïŒããŒã¯ã®ã¹ã¿ã€ã«ã«èªåã§åãæ¿ãããŸãã
- ã¹ããŒã¿ã¹ã€ã³ãžã±ãŒã¿ãŒïŒ ãªã¢ã«ã¿ã€ã ã® WebSocket æ¥ç¶ã¹ããŒã¿ã¹ã¢ã€ã³ã³ããµãŒããŒå šäœã®æ¥ç¶æ°ãå©çšå¯èœãªããŒã«ã®åèšæ°ãããããŒã«è¡šç€ºãããŸããäžæçãªã¹ããŒã¿ã¹ã¡ãã»ãŒãžïŒäŸïŒãããŒã«ãå®è¡ããŠããŸãâŠãïŒã¯ãã£ããå ¥åæ¬ã®äžã«è¡šç€ºãããŸãã
ð API ãµãŒããŒ
--webui ãæå®ããŠå®è¡ãããšãFastAPI ãµãŒããŒããããã°ã©ã ã§ã¢ã¯ã»ã¹ã§ããŸãã
GET /api/status - Client overview (model, servers, tools, history count, current node)
GET /api/config - Get current (non-sensitive) configuration
PUT /api/config - Update configuration settings (e.g., { "temperature": 0.8 })
GET /api/servers - List all configured servers with status, health, tools
POST /api/servers - Add a new server configuration (Supports stdio/sse/streaming-http transports)
DELETE /api/servers/{server_name} - Remove a server configuration
POST /api/servers/{server_name}/connect - Connect to a specific server
POST /api/servers/{server_name}/disconnect - Disconnect from a specific server
PUT /api/servers/{server_name}/enable?enabled={true|false} - Enable/disable a server
GET /api/tools - List all available tools from connected servers
GET /api/resources - List all available resources
GET /api/prompts - List all available prompts
GET /api/conversation - Get current conversation state (messages, current node ID/name, full node graph)
POST /api/conversation/fork - Create a fork (optionally named) from the current conversation node
POST /api/conversation/checkout - Switch the current context to a different conversation node/branch (by ID)
POST /api/conversation/clear - Clear messages on the current node and switch to root
POST /api/conversation/optimize - Trigger context summarization for the current node (optional model/token args)
POST /api/tool/execute - Execute a specific tool with given parameters (Requires ToolExecuteRequest model)
WS /ws/chat - WebSocket endpoint for streaming chat (`query`, `command`), receiving updates (`text_chunk`, `status`, `query_complete`, `error`, `state_update`).
ïŒæ³šïŒServerAddRequest ã ToolExecuteRequest ãªã©ã®å®éã®ãªã¯ãšã¹ãïŒã¬ã¹ãã³ã¹ã¢ãã«ã¯ Python ã³ãŒãå
ã§å®çŸ©ãããŠãããFastAPI ã«ããæ€èšŒã«äœ¿çšãããŸããïŒ
âïž ã³ãã³ã
CLI ãªãã·ã§ã³
詳现ã«ã€ããŠã¯ãmcpclient --help ãŸã㯠mcpclient [COMMAND] --help ãå®è¡ããŠãã ããã
ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã³ãã³ãïŒmcpclient run --interactiveïŒ
/ ã«ç¶ããŠã³ãã³ããå
¥åããŸãã
/help Show this help message
/exit, /quit Exit the client
/config Manage configuration (api-key, model, max-tokens, history-size, auto-discover, discovery-path, port-scan)
/servers Manage MCP servers (list, add, remove, connect, disconnect, enable, disable, status)
/discover Discover/manage LAN servers (list, connect <NAME>, refresh, auto <on|off>)
/tools List available tools (optionally filter by server: /tools <server_name>)
/tool Directly execute a tool: /tool <tool_name> '{"param": "value"}'
/resources List available resources (optionally filter by server: /resources <server_name>)
/prompts List available prompt templates (optionally filter by server: /prompts <server_name>)
/prompt Apply a prompt template to the current conversation context: /prompt <prompt_name>
/model View or change the current AI model: /model [<model_name>]
/fork Create a new branch from the current conversation point: /fork [Optional Branch Name]
/branch Manage branches (list, checkout <node_id_prefix>)
/export Export current branch: /export [--id <node_id>] [--output <file.json>]
/import Import conversation file: /import <file.json>
/history View recent conversation history (optionally specify number: /history 10)
/cache Manage tool cache (list, clear [--all|tool_name], clean, dependencies [tool_name])
/dashboard Show the live Textual User Interface (TUI) dashboard (requires separate run)
/optimize Summarize current conversation context: /optimize [--model <model>] [--tokens <num>]
/reload Disconnect, reload capabilities, and reconnect to enabled servers
/clear Clear messages in the current branch and optionally reset to root
ðïž ã¢ãŒããã¯ãã£ãšãšã³ãžãã¢ãªã³ã°ã®ç¹é·
ãã®ã¯ã©ã€ã¢ã³ãã§ã¯ãå ç¢ã§æ©èœè±å¯ãªãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ãããã€ãã®ææ³ãæ¡çšããŠããŸãã
- éåæã³ã¢ïŒ ãããã¯ãŒã¯ I/OïŒHTTPãWebSocketsãSSEïŒããµãããã»ã¹ãšã®éä¿¡ïŒ
stdioïŒããã¡ã€ã«ã·ã¹ãã æäœïŒaiofilesïŒãããã¯ã°ã©ãŠã³ãã®äžŠè¡ã¿ã¹ã¯ïŒç£èŠãæ€åºãããŒãã¹ãã£ã³ïŒãå¹ççã«åŠçãããããå šé¢çã« Python ã®asyncioãåºç€ãšããŠããŸãã - ã³ã³ããŒãã³ãããŒã¹ã®èšèšïŒ 䜿ãããããèæ
®ããŠäž»ã«åäžã®ã¹ã¯ãªãããšããŠããã±ãŒãžåãããŠããŸãããå
éšã§ã¯é¢å¿äºã次ã®ã¯ã©ã¹ã«åé¢ããŠããŸãã
MCPClientïŒUI ã«ãŒããã³ãã³ãåŠçãã³ã¢ããžãã¯ãçµ±æ¬ããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã§ããServerManagerïŒãµãŒããŒã®èšå®ãã©ã€ããµã€ã¯ã«ïŒæ¥ç¶ãåæãåèµ·åïŒãæ€åºã¡ã«ããºã ãæ©èœïŒããŒã«ããªãœãŒã¹ãããã³ããïŒã®éçŽãåŠçãããµãŒããŒããã»ã¹ãšã»ãã·ã§ã³ã管çããŸãã確å®ãªãªãœãŒã¹è§£æŸã«ã¯AsyncExitStackã䜿çšããŸããFastMCP ãšã®çµ±åã«ãããææ°ã®streaming-httpãããã³ã«ãå«ããã¹ãŠã®ãã©ã³ã¹ããŒãã¿ã€ãããµããŒãããŸããRobustStdioSessionïŒéèŠãªãšã³ãžãã¢ãªã³ã°ã®åãçµã¿ïŒïŒstdioãµãŒããŒå°çšã«èª¿æŽãããmcp.ClientSessionã®ã«ã¹ã¿ã å®è£ ã§ããæ¬¡ã®ããžãã¯ãåããŠããŸãã- ãããã³ã«ãšã©ãŒãé²ãããããµãŒããŒã®
stdoutãã JSON-RPC 以å€ã®åºåããã£ã«ã¿ãªã³ã°ããŸãã - ãªã¯ãšã¹ã ID ã«é¢é£ä»ãããã
asyncio.Futureãªããžã§ã¯ããçŽæ¥è§£æ±ºããŠã¬ã¹ãã³ã¹ãåŠçããŸããããã«ããããã¥ãŒããŒã¹ã®ã¢ãããŒãããããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããŸãã stdoutã®èªã¿åããšãååŸããstderrã®ãã°ãã¡ã€ã«ãžã®éåææžã蟌ã¿ãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã§ç®¡çããŸãã- ããã»ã¹ã®çµäºãšã¯ãªãŒã³ã¢ãããé©åã«åŠçããŸãã
- ãããã³ã«ãšã©ãŒãé²ãããããµãŒããŒã®
- STDIO ã»ãŒããã£ã¡ã«ããºã ïŒéèŠïŒïŒ
stdioããŒã¹ã®ãããã³ã«ã«ãšã£ãŠèŽåœçãªãæå³ããªãstdoutã®æ··å ¥ãé²ãå€å±€é²åŸ¡ã§ããStdioProtectionWrapperïŒsys.stdoutãã°ããŒãã«ã«ã©ããããŠæžã蟌ã¿ãææããstdioãµãŒããŒã皌åããŠããå Žåã¯stderrã«ãªãã€ã¬ã¯ãããŸããsafe_stdout()ïŒãµãŒããŒæ¥ç¶ãªã©ã®éèŠãªåŠçäžã«ãstdoutãäžæçã«stderrã«ãªãã€ã¬ã¯ãããã³ã³ããã¹ããããŒãžã£ãŒã§ããget_safe_console()/safe_print()ïŒçšŒåäžã®stdioãµãŒããŒã«å¿ããŠãUI åºåïŒRichçµç±ïŒã«é©åãªã¹ããªãŒã ïŒstdoutãŸãã¯stderrïŒã䜿çšãããŠãŒãã£ãªãã£é¢æ°ã§ãã- ãããã®å¯Ÿçã«ãããæ©å¯æ§ã®é«ã
stdioãµãŒããŒãšéä¿¡ããŠããå Žåã§ããã¯ã©ã€ã¢ã³ã UI ãšãã°æ©èœãæ£ããåäœããŸãã
ConversationGraphïŒConversationNodeãªããžã§ã¯ãã䜿çšããŠãåå²ãæã€éç·åœ¢ã®äŒè©±æ§é ã管çããŸããJSON ãšã®çžäºä¿åãåŠçããŸããToolCacheïŒæ°žç¶åã«ã¯diskcacheãé«éåã«ã¯ã¡ã¢ãªå ã¬ã€ã€ãŒã䜿çšããŠããã£ãã·ã¥ããžãã¯ãå®è£ ããŸããTTL ã®ç®¡çãšäŸåé¢ä¿ã®ç¡å¹åãå«ãŸããŸããServerRegistry/ServerMonitorïŒmDNS/Zeroconf ã«ããæ€åºãšç»é²ãããã³åŸ©æ§ã®è©Šè¡ã䌎ãããã¯ã°ã©ãŠã³ãã®ãµãŒããŒãã«ã¹ãã§ãã¯ãåŠçããŸãã
- ãã¥ã¢ã«ã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ïŒ
- Web ããã¯ãšã³ãïŒ æŽçããã REST API æ§æã«ã¯
FastAPIãASGI ãµãŒããŒã«ã¯uvicornãåæ¹åã®ãªã¢ã«ã¿ã€ã ãã£ããã«ã¯websocketsã䜿çšããŸããFastAPI ã®lifespanã³ã³ããã¹ããããŒãžã£ãŒã«ãããèµ·åæã«MCPClientãé©åã«åæåãããçµäºæã«ã¯ãªãŒã³ã¢ãããããŸããäŸåæ§æ³šå ¥ã«ãã£ãŠããšã³ããã€ã³ãããã¯ã©ã€ã¢ã³ãã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã - Web ããã³ããšã³ãïŒ HTML å
ã§è»œéãªãªã¢ã¯ãã£ããã£ãšã³ã³ããŒãã³ãããžãã¯ãå®çŸããããã
Alpine.jsãæŽ»çšããŸããã¹ã¿ã€ã«ãšäºåæ§ç¯æžã¿ã³ã³ããŒãã³ãã«ã¯Tailwind CSSãšDaisyUIã䜿çšããŸããMarkdown ãšã³ãŒããå®å šãã€é åçã«è¡šç€ºãããããMarked.jsãhighlight.jsãDOMPurifyãå©çšããŸããããŒã«ãããã«ã¯Tippy.jsã䜿çšããŸãã - CLI/TUIïŒ ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ã®å®çŸ©ãšåŒæ°ã®è§£æã«ã¯
Typerã䜿çšããŸããæŽåœ¢æžã¿ã®ã³ã³ãœãŒã«åºåãããŒãã«ãããã°ã¬ã¹ããŒãMarkdown ã®ã¬ã³ããªã³ã°ãæ§æåŒ·èª¿è¡šç€ºãã©ã€ã TUI ããã·ã¥ããŒãã«ã¯Richãå€çšããŸããè€éãªæäœäžã«Rich Liveã®è¡šç€ºããã¹ãããŠåé¡ãèµ·ããªãããã_run_with_progressã_run_with_simple_progressãªã©ã®ãã«ããŒã§æ éã«ç®¡çããŸãã
- Web ããã¯ãšã³ãïŒ æŽçããã REST API æ§æã«ã¯
- ã¬ãžãªãšã³ã¹ãšãšã©ãŒåŠçïŒ ããŒã«å®è¡æã®ãªãã©ã€ãæšæºåããããšã©ãŒå ±åãªã©ãäžè¬çãªãã¿ãŒã³ã«ã¯ãã³ã¬ãŒã¿ãŒïŒ
@retry_with_circuit_breakerã@with_tool_error_handlingïŒã䜿çšããŸããå ç¢æ§ãé«ãããããå šäœãéããŠæ§é åãããtry...except...finallyãããã¯ã䜿çšããŠããŸãã - å¯èŠ³æž¬æ§ïŒ æ§é åã¡ããªã¯ã¹ïŒãªã¯ãšã¹ãã«ãŠã³ã¿ãŒãã¬ã€ãã³ã·ãŒãã¹ãã°ã©ã ãããŒã«å®è¡ïŒãšåæ£ãã¬ãŒã·ã³ã°ïŒã¯ãšãªåŠçããµãŒããŒæ¥ç¶ãããŒã«åŒã³åºããªã©ã®æäœãã¹ãã³ã§è¿œè·¡ïŒã«ã¯
OpenTelemetryãçµ±åããŠããŸããããã«ãããããã©ãŒãã³ã¹åæãšãããã°ã容æã«ãªããŸãã - èšå®ïŒ
config.yamlãã¡ã€ã«ãç°å¢å€æ°ïŒç¹ã«ANTHROPIC_API_KEYãªã©ã®æ©å¯ããŒïŒãã€ã³ã¿ã©ã¯ãã£ãã³ãã³ããŸã㯠Web UI ã®èšå®ãå©çšã§ããæè»ãªèšå®ã·ã¹ãã ã§ãã倿Žã¯ YAML ãã¡ã€ã«ã«ä¿åãããŸãã
ð ã¹ããŒããã£ãã·ã¥äŸåé¢ä¿ã®è¿œè·¡
ã¹ããŒããã£ãã·ã¥äŸåé¢ä¿ã·ã¹ãã ã§ã¯ãããŒã«ãã»ãã®ããŒã«ãžã®äŸåé¢ä¿ã宣èšã§ããŸãã
- ããŒã«ã®ãã£ãã·ã¥ãç¡å¹åããããšãäŸåé¢ä¿ã«ãããã¹ãŠã®ããŒã«ã®ãã£ãã·ã¥ãèªåçã«ç¡å¹åãããŸã
- ãµãŒããŒãããŒã«éã®é¢ä¿ã宣èšãããšãäŸåé¢ä¿ãç»é²ãããŸã
/cache dependenciesã§äŸåé¢ä¿ã®ã°ã©ãã衚瀺ã§ããŸã- é¢é£ããããŒã«ã§åžžã«ææ°ã®ããŒã¿ã䜿çšã§ãããããããŒã¿ã®äžè²«æ§ãåäžããŸã
äŸåé¢ä¿ã®æµãã®äŸïŒ
weather:current â weather:forecast â travel:recommendations
çŸåšã®å€©æ°ããŒã¿ãæŽæ°ããããšãäºå ±ãšæ è¡ã®ããããã®ãã£ãã·ã¥ãäž¡æ¹ãšãèªåçã«ç¡å¹åãããŸãã
ð ããŒã«ãšãµãŒããŒã®æ€åº
ãã®ã¯ã©ã€ã¢ã³ãã§ã¯ãMCP ãµãŒããŒãæ€çŽ¢ããŠçµ±åããæ¹æ³ãè€æ°å©çšã§ããŸãã
- èšå®æžã¿ãã¹ïŒ
config.yamlã®discovery_pathsã«æå®ãããŠãããã£ã¬ã¯ããªãæ€çŽ¢ããããŒã«ã«ã®stdioãµãŒããŒã¹ã¯ãªããïŒäŸïŒ.pyã.jsïŒãèŠã€ããŸããããã©ã«ãã§ã¯æ¬¡ã®ãã¹ãå«ãŸããŸãã.mcpclient_config/serversïŒãããžã§ã¯ãã®ã«ãŒãïŒ~/mcp-servers~/modelcontextprotocol/servers
- Claude Desktop ã®èšå®ïŒ
claude_desktop_config.jsonïŒïŒ ãã®ãã¡ã€ã«ããããžã§ã¯ãã®ã«ãŒãã«ããå Žåãã»ããã¢ããäžã«ã¯ã©ã€ã¢ã³ãããµãŒããŒå®çŸ©ãèªåçã«ã€ã³ããŒãããŸãã- ã³ãã³ãã®ã€ã³ããªãžã§ã³ããªé©å¿ïŒ
wsl.exe ... <shell> -c "command ..."ã®ãã¿ãŒã³ãæ€åºããŸãã- Linux ã®
<shell>ïŒäŸïŒbashãshïŒãš"command ..."ãæœåºããŸãã - èšå®ããç¹å®ããã Linux ã·ã§ã«ïŒäŸïŒ
/bin/bash -c "command ..."ïŒã§ã³ãã³ããçŽæ¥å®è¡ããããã«å€æŽããwsl.exeãçµç±ããªãããã«ããŸãã - ãã®ä»ã®ã³ãã³ãïŒäŸïŒ
npx ...ïŒã§ã¯ãadapt_path_for_platformã䜿çšããŠåŒæ°å ã® Windows 圢åŒã®ãã¹ïŒC:\Users\...ïŒãæ€çŽ¢ãã察å¿ãã/mnt/c/Users/...圢åŒã«å€æããããšã§ãWSL/Linux ã§ã¯ã©ã€ã¢ã³ããå®è¡ããéã®äºææ§ã確ä¿ããŸãã
- ã³ãã³ãã®ã€ã³ããªãžã§ã³ããªé©å¿ïŒ
- ãªã¢ãŒãã¬ãžã¹ããªïŒ
config.yamlã§å®çŸ©ããã MCP ã¬ãžã¹ããªãµãŒããŒã® URLïŒregistry_urlsïŒã«æ¥ç¶ããå ¬éãŸãã¯å ±æãããŠãããµãŒããŒïŒé垞㯠SSEïŒãæ€åºããŸãã - ããŒã«ã«ãããã¯ãŒã¯ïŒmDNS/ZeroconfïŒïŒ
zeroconfã©ã€ãã©ãªã䜿çšããŠããŒã«ã«ãããã¯ãŒã¯äžã§_mcp._tcp.local.ã®ãµãŒãã¹åç¥ããªãã¹ã³ããŸãã- æ°ãããµãŒããŒã®åºçŸãæ¶å€±ãã察話å CLI ã§ãªã¢ã«ã¿ã€ã ã«éç¥ããŸãã
/discoverã³ãã³ã矀ã䜿ã£ãŠãæ€åºãããµãŒããŒã管çã§ããŸãã/discover listïŒçŸåšè¡šç€ºãããŠãã LAN ãµãŒããŒã®è©³çްã衚瀺ããŸãã/discover connect <NAME>ïŒæ€åºãããµãŒããŒãèšå®ãã¡ã€ã«ã«è¿œå ããæ¥ç¶ã詊ã¿ãŸãã/discover refreshïŒãããã¯ãŒã¯ã®åã¹ãã£ã³ãæåã§éå§ããŸãã/discover auto [on|off]ïŒmDNS ã®ç¶ç¶çãªããã¯ã°ã©ãŠã³ãã¹ãã£ã³ãåãæ¿ããŸãïŒèšå®ã§enable_local_discovery: trueãå¿ èŠã§ãïŒã
- ããŒã«ã«ããŒãã¹ãã£ã³ïŒ
- æå¹ã«ãããšïŒ
config.yamlã®enable_port_scanning: trueããŸãã¯/config port-scan enable trueã䜿çšïŒãèµ·åæã®æ€åºäžã«ãæå®ããããŒã«ã« IP ã¢ãã¬ã¹ã®ããŒãç¯å²ãç©æ¥µçã«ã¹ãã£ã³ããŸãã - åããŒãã§åºæ¬ç㪠MCP ã®
initializeãã³ãã·ã§ã€ã¯ã詊ã¿ãå¿çãã MCP ãµãŒããŒãæ€åºããŸãããµãŒããŒã®å¿çãš HTTP ããããŒã«åºã¥ããsseããã³streaming-httpã®ãã©ã³ã¹ããŒãã¿ã€ããèªåçã«æ€åºã§ããŸãã - mDNS ã§ãµãŒãã¹ãåç¥ããªããµãŒããŒã®æ€åºã«åœ¹ç«ã¡ãŸãã
- ã¹ãã£ã³ããç¯å²ã察象 IPãåæå®è¡æ°ãã¿ã€ã ã¢ãŠãã¯ã
config.yamlãŸãã¯/config port-scan ...ã³ãã³ãã§èšå®ã§ããŸãã - æ€åºããããµãŒããŒã¯ãä»»æã§èšå®ã«è¿œå ã§ãããããã»ãã®æ€åºæžã¿ãµãŒããŒãšãšãã«è¡šç€ºãããŸãã
- æå¹ã«ãããšïŒ
ð¡ ãã¬ã¡ããªãŒ + ãããã°
- OpenTelemetryïŒ äž»èŠãªæäœã®ãã¬ãŒã¹ãšã¡ããªã¯ã¹ãçæããŸããããã©ã«ãã§ã¯ããŒã¿ã¯åéãããŸããããšã¯ã¹ããŒããããŸããããã¬ãŒã¹ãšã¡ããªã¯ã¹ããããã°ããããã«ã³ã³ãœãŒã«ãžå€§éã®åºåãæå¹ã«ããã«ã¯ã
mcpclient.pyã®å é ä»è¿ã§use_console_exporter = Trueã«èšå®ããŸããæ¬çªç°å¢ã§ã¯ãé©å㪠OTel ãšã¯ã¹ããŒã¿ãŒïŒäŸïŒJaegerãPrometheusïŒãèšå®ããŠãã ããã - ããã·ã¥ããŒãïŒ
- CLIïŒ
Richã䜿çšãããªã¢ã«ã¿ã€ã ã® TUI ç£èŠç»é¢ã衚瀺ããã«ã¯ãmcpclient run --dashboardãå®è¡ããŸãããµãŒããŒã®ã¹ããŒã¿ã¹ãå¥å šæ§ãæ¥ç¶ç¶æ ãåºæ¬çãªããŒã«äœ¿çšç¶æ³ã®çµ±èšãã¯ã©ã€ã¢ã³ãæ å ±ã衚瀺ãããŸãã宿çã«æŽæ°ãããŸãã - Web UIïŒ ãServersãã¿ãã«ã¯ãµãŒããŒã®ã¹ããŒã¿ã¹ïŒæ¥ç¶ç¶æ ãã¢ã€ã³ã³ã«ããå¥å šæ§ïŒãèŠèŠçã«è¡šç€ºãããããããŒã«ã¯å šäœã®ä»¶æ°ã衚瀺ãããŸãã
- CLIïŒ
- ãã®ã³ã°ïŒ Python æšæºã®
loggingã䜿çšããã³ã³ãœãŒã«ã«èŠãããåºåããããRichHandlerã§èšå®ãããŠããŸãïŒstdioãšã®ç«¶åãé¿ãããããåºåå ã¯stderrã§ãïŒã- 詳现ãªå
éšæ
å ±ã確èªããã«ã¯ã
--verboseãŸãã¯-vãã©ã°ã䜿çšããŠãã°ã¬ãã«ã DEBUG ã«äžããŸãã - 詳现ã¢ãŒãã§ã¯ã詳现ãª
stdioã»ãã·ã§ã³ãã®ã³ã°ïŒUSE_VERBOSE_SESSION_LOGGING = TrueïŒãæå¹ã«ãªããçã® JSON-RPC ã¡ãã»ãŒãžã確èªã§ããŸãïŒMCP ãµãŒããŒã®ãããã°ã«äŸ¿å©ã§ãïŒã
- 詳现ãªå
éšæ
å ±ã確èªããã«ã¯ã
- ãšã©ãŒãã¬ãŒã¹ããã¯ïŒ å®è¡åã«ç°å¢å€æ°
MCP_CLIENT_DEBUG=1ãèšå®ãããšãäºæããªããšã©ãŒãçºçããéã« CLI ã Python ã®å®å šãªãã¬ãŒã¹ããã¯ãåºåããã¯ã©ã€ã¢ã³ãåŽã®åé¡ã®ãããã°ã«åœ¹ç«ã¡ãŸãã - STDIO ãµãŒããŒãã°ïŒ
stdioãµãŒããŒããã®stderråºåã¯éåæã§ååŸãããèšå®ãã£ã¬ã¯ããªå ã®ãã°ãã¡ã€ã«ïŒäŸïŒ.mcpclient_config/<server_name>_stderr.logïŒã«æžã蟌ãŸããŸããããã¯ãµãŒããŒåŽã®åé¡ã蚺æããããã§éèŠã§ãã
ðŠ èšå®
- äž»èŠãã¡ã€ã«ïŒ èšå®ã¯ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ãã
.mcpclient_config/config.yamlããèªã¿èŸŒãŸããä¿åãããŸãã - ç°å¢å€æ°ïŒ
ANTHROPIC_API_KEY㯠API ããŒãæå®ããäž»ãªæ¹æ³ã§ãèšå®ãã¡ã€ã«ã«ä¿åãããŠããããŒããåªå ãããŸããEDITORã¯/config editã§äœ¿çšãããŸããMCP_CLIENT_DEBUG=1ãèšå®ãããšãã¬ãŒã¹ããã¯ãæå¹ã«ãªããŸãã - 察話å CLIïŒ
/configã³ãã³ãã䜿ããšãapi-keyãmodelãmax-tokensãdiscovery-pathãããŒãã¹ãã£ã³ã®ãã©ã¡ãŒã¿ãŒãªã©ã®èšå®ã衚瀺ã»å€æŽã§ããŸãã倿Žå 容ã¯config.yamlã«ä¿åãããŸãã - Web UI ã®èšå®ïŒ Web UI ã®ãSettingsãã¿ãã§ã¯ãäžè¬çãªèšå®é
ç®ãæäœã§ããŸããããã§è¡ã£ã倿Žã¯ API çµç±ã§éä¿¡ããã
config.yamlã«ä¿åãããŸãã
çŸåšã®èšå®ã衚瀺ïŒ
mcpclient config --show
# OR in interactive mode:
/config
èšå®ãã¡ã€ã«ãæåã§ç·šéïŒ
mcpclient config --edit
# (This will open .mcpclient_config/config.yaml in the editor specified by your $EDITOR environment variable)
𧪠éçºã«é¢ããæ³šæäºé
- ã³ã¢ïŒ Python 3.13+ã
asyncio - CLIïŒ
TyperãRich - WebïŒ
FastAPIãUvicornãWebSocketsãAlpine.jsãTailwind CSSãDaisyUI - MCPïŒ
mcpSDKïŒmcp>=1.0.0ïŒãfastmcpïŒstreaming-http ãã©ã³ã¹ããŒãçšïŒ - AIïŒ
anthropicSDKïŒanthropic>=0.15.0ïŒ - å¯èŠ³æž¬æ§ïŒ
opentelemetry-sdkãopentelemetry-apiãopentelemetry-instrumentation - ãŠãŒãã£ãªãã£ïŒ
httpxãPyYAMLãpython-dotenvãpsutilãaiofilesãdiskcacheãtiktokenãzeroconfãcolorama - ãªã³ãã£ã³ã°ïŒãã©ãŒãããïŒ
ruffã¯pyproject.tomlã§èšå®ãããŠããŸããuv run lintãŸãã¯ruff check . && ruff format .ã䜿çšããŠãã ããã - åãã§ãã¯ïŒ
mypyã¯pyproject.tomlã§èšå®ãããŠããŸããuv run typecheckãŸãã¯mypy mcpclient.pyã䜿çšããŠãã ããã
é
åžãšã³ãŒãã®ææ¡ã容æã«ããããããããžã§ã¯ãã®å€§éšå㯠mcpclient.py ã«ãŸãšããããŠããŸãããå
éšã§ã¯ã¯ã©ã¹ããŒã¹ã®ã¢ãžã¥ãŒã«åãç¶æãããŠããŸããWeb UI ã¯èªå·±å®çµåã® mcp_client_ui.html ãã¡ã€ã«ããæäŸãããã·ã³ãã«ããä¿ã€ããã« CDN ã§ãã¹ããããã©ã€ãã©ãªãå©çšããŠããŸããå
ç¢ãª stdio åŠçãéåæç®¡çãªã©ã®äž»èŠãªè€éãªããžãã¯ã¯ãRobustStdioSession ã ServerManager ãšãã£ãå°çšã¯ã©ã¹ã«é
眮ãããŠããŸãã
ð ã©ã€ã»ã³ã¹
MIT ã©ã€ã»ã³ã¹ïŒOpenAI/Anthropic Rider ä»ãïŒãLICENSE ãåç §ããŠãã ããã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã