コンテンツにスキップ

MCPサーバの活用と構築

Author: Kazukichi
  • 前回はMCPがどんなプロトコルか、という部分にフォーカスして紹介した
  • 今回は実際にMCPサーバを利用したり、作成したりしてみる
  • 検証にはRoo Codeを利用する
    • 他の主要なAIエージェントはMCPに対応しているはず
  • Clineを利用している場合
    • Cline | MCP Marketplace
    • MCPサーバをシームレスに利用するためのエコシステムが出来上がりつつある
    • Roo Codeでは使えなかった😭
  • その他(汎用的)
  • Knowledge Graph Memory Server を使ってみる
    • コンテキストを超えて記憶を引き継ぐためのMCPサーバ
    • Middle Dive MCP でも少し触れた
    • マスタの情報はローカルのJSONファイルに保存し、それをベクトル化したものをさらにChromaDBに保存し、適宜ベクトル検索するという仕組みらしい
  • mcp_settings.json
    • Roo Codeの場合はこんな感じの設定
{
"mcpServers": {
"memory": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-memory"
],
}
}
}
  • 使ってみた感想
    • タスクやプロジェクトを跨いでも情報を思い出せるのは便利
    • MCPがシームレスに呼び出されるかというと微妙で、具体的なMCPサーバ名をプロンプトに含めないといけないことも多かった
    • まだクラウド対応のメモリ関連のMCPサーバは成熟していない感じがするので今後に期待
    • また、これはMCPサーバ全般に言えることだが、現状はまだローカルでMCPサーバを起動して標準入出力で接続するというのが一般的
      • Node.jsだと npx が使えるのでまだ良いが、基本的にインストールが手間
      • 今後はOAuth 2.1 + Streamable HTTPでクラウドにあるMCPサーバに接続する、というのが一般的になってくるはず
      • この辺の仕様に関しては Middle Dive MCP でも触れた
    • GitHub MCP Server は設定はしたけどまだ使えていない
Terminal window
$ poetry add "mcp[cli]"
  • now.py
    • FastAPIっぽい書きあじで個人的には好き
from mcp.server.fastmcp import FastMCP
from datetime import datetime
mcp = FastMCP("Now Time MCP Server")
@mcp.tool(description="Returns the current time (ISO8601 format)")
def now() -> str:
now = datetime.now()
return now.isoformat()
if __name__ == "__main__":
mcp.run()
  • mcp_settings.json
    • コマンド以外は基本的にGUIから設定できる
{
"mcpServers": {
"NowTimeServer": {
"command": "poetry",
"args": [
"run",
"python",
"/path/to/now.py"
]
}
}
}
  • プロンプトで現在時刻を聞くと、MCPサーバが呼び出されて現在時刻が取得できた
  • 使ってみた感想
    • 小規模なサンプル程度であれば容易に構築できることは分かった
    • すでに様々なMCPサーバがリリースされている中で、自分が作るべきMCPサーバは何か?と問われると非常に悩ましい
    • このあたりはすでにある便利なMCPサーバを段階的に導入しつつ、日常や業務の中で意識的にMCPサーバとして分離できそうな「隙間家具」的な単位を日々、模索する必要がありそう