第2ç« â Model Context Protocol (MCP) ã®æ£äœ
LLM Primer IV: MCPã§èšèšããAIèªç¥ ã®ãŠã©ãŒã¯ã¹ã«ãŒç¬¬2åã§ããä»åã¯ãæ¬æžã®æ®ããæ¯ããããçšåºŠã«äžå¯§ã«ãã¡ã³ã¿ã«ã¢ãã«ãçµã¿ç«ãŠãŸã â 3ã€ã®åœ¹å²ãJSON-RPCã®ã¯ã€ã€åœ¢åŒãåçãªãã£ã¹ã«ããªé¢ããããŠã»ãã·ã§ã³ã»ã©ã€ããµã€ã¯ã«ã
ãªããã®ç« ãããã®ã
第1ç« ã¯åé¡ã«ååãä»ããŸããããã®ç« ã¯ãçãã®ã¡ã³ã¿ã«ã¢ãã«ãçµã¿ç«ãŠãŸããMCPã¯äžæã§èŠçŽã§ããäžæ®µèœã§èª€è§£ãããŸãããªã®ã§æéããããŸã â ã¯ã€ã€ã»ã¬ãã«ã§ã®ãããã³ã«ã®æ£äœã3ã€ã®åœ¹å²ãäœãæå³ãäœãææããã®ããæ¬çªã§æ¬åœã«å¹ããŠããå Žé¢ã§RESTãšã©ãéãã®ããæ¥ç¶ããçµäºãŸã§ã»ãã·ã§ã³ã®äžã§äœãèµ·ããã®ãããã®ç« ãèªã¿çµããããã«ã¯ãæ¬¡ç« ãèªãåã«ããµãŒããŒããªããã£ãã¯ã©ããã圢ã§ãªããã°ãªããªãããã¯ã©ã€ã¢ã³ãããªããã£ãã¯ã©ããã圢ã§ãªããã°ãªããªããããããŠMCPããªãä»ã®æ§é ãéžãã ã®ãããèªåã§äºæž¬ã§ããç¶æ ãç®æããŸãã
2.1 MCPãšã¯äœãããAIã®USB-Cãã®æ¬åœã®æå³
Model Context Protocolã¯ãLLMã¢ããªã±ãŒã·ã§ã³ãå€éšã®èœåãçºèŠããèšè¿°ããåŒã³åºãããã®ãªãŒãã³ä»æ§ã§ããã¯ã€ã€äžã¯JSON-RPC 2.0ããå°æ°ã®ãã©ã³ã¹ããŒãã®ãã¡ã®ã©ããã«ä¹ããŸããã¢ãŒããã¯ãã£äžã¯ããã¹ããã©ã®æºæ ãµãŒããŒãšãç¹æ³šã®çµ±åã³ãŒããªãã«åããå¥çŽã§ãããããã³ã«ã«å¯ŸããŠäžåºŠäœãããããŒã«ã¯ãããã話ããã¹ãŠã®ãã¹ãã§åããŸãããããã³ã«ã«å¯ŸããŠäžåºŠäœããããã¹ãã¯ãããã話ããã¹ãŠã®ããŒã«ã䜿ããŸãã
å®çããèšãåãã¯ãAIã®USB-Cãã§ããåœ¢ã¯æ¬åœã«USB-Cã«äŒŒãŠããŸã â éãããããã€ã¹çŸ€ãšéããããã¹ã矀ã®éããã²ãšã€ã®æ¥ç¶æšæºã仲ä»ãããæ¯å©ã®éçãååãä»ãã䟡å€ããããŸããUSB-Cã¯ã³ãã¯ã¿ãšãã®äžã®ã¹ã¿ãã¯ãæšæºåãããMCPã¯ãããã³ã«ã ããæšæºåãããUSB-Cã¯é»æ°çãªã¿ã€ã ã¹ã±ãŒã«ã§åããããŒããŠã§ã¢ããã¬ãŒãã³ã°ã匷å¶ãããMCPã¯ãããã¯ãŒã¯çãªã¿ã€ã ã¹ã±ãŒã«ã§åãããã¬ãŒãã³ã°ã¯ãœãããŠã§ã¢å®çŸ© â ã ããããæè»ã§ãã代ããã«ãåããæ¥ç¶ãšé ããã¢ãèªåã§æ±ããªããã°ãªããŸããã
ãšã³ãžãã¢ã«ãšã£ãŠè¿ãã®ã¯LSPã§ããLanguage Server Protocolã¯ãã©ã®ãšãã£ã¿ãšã©ã®èšèªãµãŒããŒã話ãããããã³ã«ãå®çŸ©ããŸãããMCPã¯ãã©ã®LLMãã¹ããšã©ã®èœåãããã€ãã話ãããããã³ã«ãå®çŸ©ããŸããåã¡çã®åœ¢ã¯åã â å€å¯Ÿå€ãå ±æãããã³ã«ã§å æ³çã«ã¹ã±ãŒã«ãã圢ã«ç³ãŸããããšãããã®ãæ°ããã¯ã€ã€åœ¢åŒãçºæããã®ã§ã¯ãªãJSON-RPC 2.0ãéžãã ã®ã¯æå³çã§ããå°ãããŠãæçããŠããŠãèšèªéäŸåã§ãå°å³ãé¢çœãã¢ãŒããã¯ãã£äžã®éžæã¯ã¯ã€ã€ã¬ãã«ã«ã¯ãããŸãããHostã»Clientã»Serverãã©ã責任ãåæ ããããããã«ãããŸãã
2.2 Hostã»Clientã»Server â ãããããææãããã®
MCPã¯3ã€ã®åœ¹å²ãå®çŸ©ããŸãããŸãçè§£ãã¹ãã¯ãããã§èšããClientããšãServerããã仿ã§ã®æå³ãšã¯éãããšã§ããServer ã¯èœåãå ¬éããŸã â ããŒã«ããªãœãŒã¹ãããã³ãããClient ã¯ããã£ãšå€§ããªã¢ããªã±ãŒã·ã§ã³ã®äžã§ç®¡çããããã²ãšã€ã®ãµãŒããŒãžã®åäžã®ãããã³ã«æ¥ç¶ã§ãããã®å€§ããªã¢ããªã±ãŒã·ã§ã³ã HostãHostã¯ã¢ãã«ããŠãŒã¶ãŒã®ã»ãã·ã§ã³ããããŠã¢ãã«ãäœãããŠãããã®ããªã·ãŒãææããŸããServers ã¯ããããã®èœåé¢ãææããŸããClients ã¯ãã®éãçµã¶é ç·ã§ããµãŒããŒ1ã€ã«ã€ã1ã€ã§ãã
ãã®åå²ãå¹ãã®ã¯ããããããéã責任ãšéãä¿¡é Œå§¿å¢ãæã€ããã§ãããŠãŒã¶ãŒèŠç¹ã§æå³ã®ããä¿¡é Œå¢çã¯ãã¹ãããã以å€ã¯ãã¹ãŠããã¹ãããå ¥ããããšã«æ±ºããããã®ã5ã€ã®ãµãŒããŒãšè©±ããã¹ãã¯ãå éšã«5ã€ã®Clientãèµ°ããããããããèªåã®ã»ãã·ã§ã³ç¶æ ãèªåã®ãµãã¹ã¯ãªãã·ã§ã³ãèªåãäº€æžæžã¿ã®èœåã®èŠãæ¹ãæã¡ãŸãããããµãŒããŒãã¯ã©ãã·ã¥ããã°ã察å¿ããClientãã¯ã©ãã·ã¥ãããä»ã®Clientã¯çãç¶ããHostã¯çãç¶ããŸããClients ã¯ãæªããµãŒããŒãã»ãã·ã§ã³å šäœãæ±æããªãããã«ããæ¥ç¶ããšã®çµ¶çžäœã§ãã
åå²ã«ã¯ã»ãã¥ãªãã£äžã®è«æ ããããŸããã©ã®ãµãŒããŒããæäœéã誰ãä»äººãæžããã³ãŒãã§ãããµãŒããŒããã¹ãã«åœ±é¿ããããã¹ãŠ â éç¥ãElicitationãSamplingèŠæ±ãå ¬éãªãœãŒã¹ â ãClientã仲ä»ãããµãŒããŒããšã®ããªã·ãŒã宿ãå Žæã«ãªããŸããHostã»Clientã»Serverã¯è«ççãªåœ¹å²ã§ãå³å¯ã«ç©ççãªãã®ã§ã¯ãããŸãããããŒã«ã«æ§æã§ã¯ Server ã¯ãã°ãã° stdio ã§åããµãããã»ã¹ããªã¢ãŒãã®ãããã€ã§ã¯HTTPããŒã¹ã®ãã©ã³ã¹ããŒãäžã®ãµãŒãã¹ããããã³ã«ã¯æ°ã«ããŸããã圹å²ã®å¢çãæ°ã«ããŸãã
2.3 MCPãšRESTã®éã â åçãã£ã¹ã«ããªãšæå³çèšè¿°
ãã£ãšããªè³ªåã¯ãããã¯RESTã§ãããªãããã§ããéãã¯åç²§ã§ã¯ãããŸãããæã倧ããã®ã¯ãåçãã£ã¹ã«ããªãLLMåãã«æžãããæå³çèšè¿°ããããŠåæ¹åã¡ãã»ãŒãžã¢ãã«ã
REST APIã¯ãšã³ããã€ã³ãã人éã®éçºè
åãã®ããã¥ã¡ã³ãã§å
¬éããŸããã¯ã©ã€ã¢ã³ãã䜿ããšã³ããã€ã³ãéåã¯ãã«ãæã«åºå®ã§ãæ°ãããšã³ããã€ã³ãã¯åãããã€ãå¿
èŠã§ããMCPã¯éåãã§ããã»ãã·ã§ã³éå§æã«ClientããäœãæäŸããŸããããšåããServerã¯åä»ãã«ã¿ãã° â ã¹ããŒãã説æãã¡ã¿ããŒã¿ â ãè¿ãããã¹ããããã°ã©ã ã§äœ¿ããŸãããµãŒããŒãããšããããŒã«ã远å ããã°ãlistChanged éç¥ãåèµ·åãªãã«ã»ãã·ã§ã³äžã®ClientãæŽæ°ããŸããServerãèªåã®èœåã«ã€ããŠã®æš©åšããçå®ã®æºæ³ã§ã説æã¯å®è£
ããããªããã§ããŸãã â ããªããããããã®ã¯ã©ã€ã¢ã³ãåŽã®ã³ããŒãååšããªãããã§ãã
2ã€ç®ã®éãã¯æå³çèšè¿°ã§ããRESTãšã³ããã€ã³ãã®ããã¥ã¡ã³ãã¯ãèªãã§å€æããéçºè
ã®ããã«æžãããŸããMCPããŒã«ã®èšè¿°ã¯ãèªåã®ããã³ããã®äžéšãšããŠèªã¿ãèªåŸçã«å€æããLLMã®ããã«æžãããŸãããPOST /users/:id/ordersããšæžããŠãã説æã¯LLMã«ã¯ç¡äŸ¡å€ã§ããLLMã¯ããã®ããŒã«ãã©ããªæŠå¿µçæäœãè¡ãã®ãããã€åªå
ãã¹ãããå¯äœçšã¯äœããå
¥åããã¡ã€ã³çã«ã©ãããæå³ãªã®ããå¿
èŠãšããŸããAPIãLLMãèªããçšèªã«ç¿»èš³ããäœæ¥ã¯ãèœåã«æãè¿ã人ãä¿å®ã§ããå Žæ â ãµãŒã㌠â ã«äžåºŠã ãæŒã蟌ãŸããŠããŸãã
3ã€ç®ã®éãã¯åæ¹åæ§ã§ããRESTã¯ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ãæ¥ç¶ã¯éããŸããMCPã¯èšèšäžåæ¹åã§ãããµãŒããŒã¯ãã€ã§ãéç¥ãéããClientãžSamplingèŠæ±ãèµ·ããããããŒã®éäžã§ãŠãŒã¶ãŒã«åãè¿ããŸããã©ããRESTã§æè¡çã«äžå¯èœã§ã¯ãããŸãããã©ããRESTã§ã¯äžæ Œå¥œã§ããMCPã§ã¯æšæºã®äžéšã§ãã
2.4 èœå亀æžãšã»ãã·ã§ã³ã®ã©ã€ããµã€ã¯ã«
ã»ãã·ã§ã³ã¯ãClientããã©ã³ã¹ããŒããéããŠãèªåã®ãããã³ã«ããŒãžã§ã³ãšèœåãèŒãã initialize ãªã¯ãšã¹ããéããšããããå§ãŸããŸããServerã¯èªåã®èœåã§å¿ããŸã â ããŒã«ãå
¬éãããããªãœãŒã¹ãå
¬éãããããµãã¹ã¯ãªãã·ã§ã³ãæäŸããããé«åºŠãªæ©èœãæã€ããClient㯠initialized éç¥ã§ç¢ºå®ããŸããã»ãã·ã§ã³ã¯éçšç¶æ
ã«å
¥ãã䜿ããã¡ãã»ãŒãžåã¯ã¡ããã©äž¡è
ãåæããéšåéåã«ãªããŸãã
ãã®äº€æžã®ãããã§ãæ©èœã»ãããéãClientãšServerãçç£çã«å ±åã§ããŸããããŒãžã§ã³ãããã§æ±ãããŸã â Serverã¯äž¡è ããµããŒãããæãé«ãããŒãžã§ã³ãéžã³ãŸããéçšäžã®å«æããããŸããåæåã¯ã¿ãã§ã¯ãããŸãã â ã©ãŠã³ãããªããã»ã³ã¹ããããããªã¢ãŒããµãŒããŒãªãæ¥ç¶ã»ããã¢ãããä¹ããŸããé·åœãªã»ãã·ã§ã³ãæšå¥šãã¿ãŒã³ãèœåã®å€åã¯åæ¥ç¶ã§ã¯ãªãéç¥ã§æµããŸãããããå°éãããã¹ã â ã»ãã·ã§ã³ãæž©ããä¿ã¡ããããã¯ãŒã¯ã®ç¬æã®ããšããã¯ã°ã©ãŠã³ãã§åæ¥ç¶ãããã¹ã â ã¯ã¬ã€ãã³ã·ãç®ã«èŠããŠè¯ããªããŸãããªã¯ãšã¹ãããšã«åè§£ããŠåæåãçŽããã¹ãã¯ãæ£ããåããŸããå¹çã¯æªãã
æŒãããŠããããé察称æ§: ãªã¯ãšã¹ãã«ã¯è¿ä¿¡ããããéç¥ã«ã¯ãããŸãããlist-changedã€ãã³ãã¯éç¥ãªã®ã§ãèŠéããClient㯠list_tools ãååŒã³ããŠèªåã®èŠãæ¹ãæŽæ°ã§ããçšæãå¿
èŠã§ããéç¥ã¯æé©åã§ãã£ãŠä¿èšŒã§ã¯ãããŸãããå
ç¢ãªMCPã³ãŒãã¯éç¥ããã³ããšããŠæ±ããèšé²ãšããŠã¯æ±ããŸããã
第2ç« ãèžãŸããŠ
ããã§ã¡ã³ã¿ã«ã¢ãã«ãæããŸãããMCPã¯ã3ã€ã®åœ¹å²ãæã€JSON-RPCãããã³ã«ã§ãServerãèªåã®èœåã«ã€ããŠæš©åšããååšã«ããåçãã£ã¹ã«ããªãLLMèŽè¡åãã«æžãããèšè¿°ãéç¥ãšServerçºã®ãªã¯ãšã¹ããå«ãåæ¹åã¡ãã»ãŒãžã¢ãã«ããããŠæç€ºçãªèœå亀æžã§éããäž¡è ãåæããéšåéåã®äžã§éçšããã©ã€ããµã€ã¯ã«ãæã€ãããã ãè¶³å Žãããã°ãServerãšClientãããããäœãå ¬éããããå ·äœçã«è©±ããŸã â æ¬¡ã®2ç« ãããããããŸãã
次å â 第3ç« : ãµãŒããŒããªããã£ã â Resourcesã»Promptsã»Toolsã ãµãŒããŒãæäŸã§ãã3ã€ã®åè©ãããããã®æå³ããããŠé©åãªããªããã£ããéžã¶èŠåŸ â é£ã®é åã«æŒã蟌ãŸãªãããšã