Skip to main content
Glama

MCP + LangChain デモ

これは、MCP(モデルコンテキストプロトコル)サーバーを構築し、LangChainとLangGraphを使用してLLMエージェントに接続する方法を示す初心者向けのプロジェクトです。


MCPとは?

MCP(モデルコンテキストプロトコル) は、カスタムツール(関数)を標準化された方法でLLMに公開できるオープンプロトコルです。AIモデルのためのユニバーサルプラグインシステムと考えてください。

主要な概念:

用語

定義

MCPサーバー

トランスポート(stdioまたはHTTP)を介してツール(関数)を公開するプロセス。LLMはこれらのツールを呼び出すことができます。

MCPクライアント

1つ以上のMCPサーバーに接続し、そのツールを発見してLLMに転送するプロセス。

ツール

@mcp.tool() でデコレートされたPython関数であり、LLMが呼び出すことができます。

トランスポート

クライアントとサーバー間の通信方法。stdio = 同じマシン上で標準入出力を介して。streamable-http = HTTPを介して。

FastMCP

mcp ライブラリの高レベルPythonクラスで、MCPサーバーを簡単に作成できます。


Related MCP server: Model Context Protocol Multi-Agent Server

プロジェクト構造

MCPLEARNING/
├── mathserver.py      # MCP Server 1 - Math tools (stdio transport)
├── weather.py         # MCP Server 2 - Weather tool (HTTP transport)
├── client.py          # LangChain agent that connects to both servers
├── .env               # API keys (NOT pushed to GitHub)
├── .gitignore
├── requirements.txt
└── pyproject.toml

仕組み(ステップバイステップ)

ステップ 1: MCPサーバー — mathserver.py

このファイルは、「Math」 という名前のMCPサーバーを作成し、2つのツールを公開します:

  • add(a, b) — 2つの整数の合計を返します。

  • multiply(a, b) — 2つの整数の積を返します。

これはstdioトランスポートで実行されます。つまり、クライアントがそれをサブプロセスとして起動し、標準入出力を介して通信します。ポートは必要ありません。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Addition of two numbers"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """Multiplication of two numbers"""
    return a * b

if __name__ == "__main__":
    mcp.run(transport="stdio")

ステップ 2: MCPサーバー — weather.py

このファイルは、「Weather」 という名前のMCPサーバーを作成し、1つのツールを公開します:

  • get_weather(location) — 指定された場所の天気情報を返します。

これはstreamable-httpトランスポートで実行されます。つまり、http://127.0.0.1:8000/mcp でWebサーバーを起動します。クライアントはHTTPを介して接続します。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Weather")

@mcp.tool()
async def get_weather(location: str) -> str:
    """Get the weather"""
    return "It's always raining in California"

if __name__ == "__main__":
    mcp.run(transport="streamable-http")

ステップ 3: クライアントエージェント — client.py

これはプロジェクトの頭脳です。以下のことを行います:

  1. 両方のMCPサーバーに接続します(MultiServerMCPClient を使用)。

  2. 両方のサーバーからすべてのツールを発見します(addmultiplyget_weather)。

  3. Groq LLM(ホスト型オープンソースモデル)を作成し、ツールをそれにバインドします。

  4. LangGraphエージェントを構築します。これは以下のようなステートマシンです:

    • LLMは、ツールを呼び出すか直接応答するかを決定します。

    • ツールが呼び出された場合、その結果は最終的な回答のためにLLMにフィードバックされます。

  5. 2つのクエリをテストします:

    • 「3 + 5は何ですか?」 → add ツールを使用します。

    • 「カリフォルニアの天気はどうですか?」 → get_weather ツールを使用します。


前提条件

  • Python 3.13+

  • uv パッケージマネージャー(推奨)または pip

  • Groq APIキーconsole.groq.com から無料で取得できます


セットアップ

1. リポジトリをクローンする

git clone https://github.com/<YOUR_USERNAME>/MCPLEARNING.git
cd MCPLEARNING

2. 仮想環境を作成してアクティブ化する

# Using uv (recommended)
uv venv
uv pip install -r requirements.txt

# Or using pip
python -m venv .venv
.venv\Scripts\activate        # Windows
source .venv/bin/activate     # Mac/Linux
pip install -r requirements.txt

3. APIキーを設定する

プロジェクトルートに .env ファイルを作成します:

GROQ_API_KEY=your_groq_api_key_here

重要: .env ファイルは絶対にコミットしないでください。.gitignore によって除外されています。


プロジェクトの実行

2つのターミナルを開く必要があります:

ターミナル 1 — Weather MCPサーバーを起動する

python weather.py

次のように表示されるはずです:

INFO: Uvicorn running on http://127.0.0.1:8000

注: weather.py のみ手動で起動する必要があります。mathserver.py はクライアントによって自動的に起動されます(stdioトランスポート)。

ターミナル 2 — クライアントを実行する

python client.py

期待される出力

Available MCP tools:
- add
- multiply
- get_weather

==============================
Testing Math MCP
==============================

Math Response: 3 + 5 = 8.

==============================
Testing Weather MCP
==============================

Weather Response: It's always raining in California.

独自のMCPサーバーを作成する方法

  1. MCPライブラリをインストールします:

pip install mcp
  1. 新しいPythonファイルを作成します(例: myserver.py):

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("MyServer")

@mcp.tool()
def my_tool(param: str) -> str:
    """Description of what this tool does."""
    return f"Result: {param}"

if __name__ == "__main__":
    mcp.run(transport="stdio")        # For stdio transport
    # mcp.run(transport="streamable-http")  # For HTTP transport
  1. クライアントで接続しますMultiServerMCPClient 設定に追加します:

client = MultiServerMCPClient({
    "myserver": {
        "command": "python",
        "args": ["myserver.py"],
        "transport": "stdio",
    },
})

トランスポートの比較

トランスポート

仕組み

いつ使用するか

stdio

クライアントがサーバーをサブプロセスとして起動します。標準入出力を介して通信します。

ローカルツール、シンプルなセットアップ、ネットワーク不要。

streamable-http

サーバーがWebサーバーとして実行されます。クライアントはHTTPを介して接続します。

リモートツール、複数クライアント、マシン間アクセス。


使用されている主要なライブラリ

ライブラリ

目的

mcp

FastMCP を使用してMCPサーバーを構築します。

langchain-mcp-adapters

MCPサーバーとLangChainツール間のブリッジ。

langchain-groq

Groqホスト型LLMのためのLangChain統合。

langgraph

エージェントワークフローをグラフとして構築(エージェント ↔ ツールループ)。

python-dotenv

.env ファイルからAPIキーをロードします。


注意すべき重要な点

  1. クライアントの前にWeatherサーバーが実行されている必要があります — HTTPトランスポートを使用するため、サーバープロセスを最初に起動する必要があります。Mathサーバー(stdio)はクライアントによって自動的に起動されます。

  2. Groq APIキーが必要です — これがないと、LLM呼び出しは失敗します。console.groq.com から無料のキーを取得してください。

  3. .env をコミットしないでください — コードをプッシュする前に、必ず .gitignore.env を追加してください。

  4. ポートの競合 — Weatherサーバーはデフォルトでポート8000を使用します。別のプロセスがそのポートを使用している場合、サーバーは起動に失敗します。

  5. Windowsのエンコーディングの問題 — Windowsでは、コンソールがLLMから返されるUTF-8文字をサポートしない場合があります。client.pysys.stdout.reconfigure(encoding="utf-8") でこれを処理します。

  6. モデルの可用性 — Groqモデル名(openai/gpt-oss-120b)は、Groqプラットフォーム上で有効で利用可能である必要があります。現在のオプションについては、Groqのモデルリスト を確認してください。

F
license - not found
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for AI dialogue using various LLM models via AceDataCloud

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

View all MCP Connectors

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/Reyansh1996/MCPLEARNING'

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