はじめに#

前回はMCPサーバーを構築する方法について説明しました。今回はMCPサーバーに接続する方法を説明します。

一般的には、ChatGPTのようなWebサービスやアプリケーションからMCPサーバーのURLを指定しますが、本記事ではPythonから直接MCPサーバーに接続し、その動作を試す方法を説明します。

PythonからMCPを利用する準備: ローカルでのツール呼び出し#

LLMクライアントを定義します。2025年5月現在、無料で使えるGOOGLEのLLMを使ってみます。

まずはLLMがMCPを使わず、ローカルで定義された関数(ツールと呼ばれるもの)を使って、基本的な仕組みを見ていきます。この理解が、後にMCPサーバーを利用する際の基礎となります。

実は、最近ReActエージェントという重要な概念が基本となっています。MCPサーバーというネットワーク越しの要素から切り離して、純粋な形で説明するほうが良いかと思います。

この基礎を固めた上で、実際にMCPサーバーに接続するステップに進むことで、よりスムーズに学習を進められます。

必要なライブラリのインストール#

installは、

uv add langgraph langchain-google-genai geopy requests fastmcp`

GeminiのAPIキーを取得#

GEMINIのAPIKeyを取得します。 https://aistudio.google.com/apikey

取得したAPIキーは、プログラム内で直接指定するか、環境変数(例: GOOGLE_API_KEY)として設定してください。

ローカルでの実行例#

それでは、Pythonコードを実行します。

from langchain_core.tools import tool
from langchain_google_genai import ChatGoogleGenerativeAI
from langgraph.prebuilt import create_react_agent

# Read your API key from the environment variable or set it manually
api_key = "..."  # os.getenv("GEMINI_API_KEY")


@tool
def magic_function(input: int) -> int:
    """Applies a magic function to an input."""
    return input + 2


def main():
    print("Hello from mcpc!")
    # Create LLM class
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.0-flash",
        temperature=1.0,
        max_retries=2,
        google_api_key=api_key,
    )

    tools = [magic_function]
    query = "what is the value of magic_function(3)?. use tools"

    agent = create_react_agent(llm, tools)
    messages = agent.invoke({"messages": [("human", query)]})

    print(messages)

if __name__ == "__main__":
    main()

toolデコレーターの関数をLLMが参照するようになります。

これはtool calling といわれていますが、こういう関数を定義すれば、LLMが参照できるようになります。mcpサーバーでもtoolというデコレーターが出てきました。実はこうした名前はtool callingの名前が倣って踏襲されています。

create_react_agent とは#

最近ではReActエージェントを使う手法が主流ですが、それを作る関数になります。簡単に言うとReActエージェントは思考する、というプロセスが入っているものです。参考

簡単には、ReActエージェントの特徴は次のようになります。

  • より複雑なタスクへの対応: 複数ステップの推論や、外部ツールとの連携が必要な複雑なタスクを、段階的に解決していく
  • 柔軟な問題解決: 途中で予期せぬ結果が得られても、それを「観察」として次の「思考」に活かし、計画を修正しながら目標達成を目指。
  • 透明性の向上: 「思考」のプロセスがログとして残ることが多いため、エージェントがなぜそのような判断をしたのかを理解しやすくなる。

独自のcreate_react_agent的な関数を作ることも出来ます。ここが参考になります。

MCPサーバーに接続する#

さて、いよいよ前回構築したようなMCPサーバー(または公開されている他のMCPサーバー)に接続し、そのツールをLLMエージェントから利用してみましょう。

import asyncio

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

async def main2():
    # Connect via SSE
    llm = ChatGoogleGenerativeAI(
        model="gemini-2.0-flash",
        temperature=1.0,
        max_retries=2,
        google_api_key=api_key,
    )

    async with MultiServerMCPClient(
        {
            "magic_function": {
                # make sure you start your weather server on port 8000
                "url": "http://localhost:8000/sse",
                "transport": "sse",
            }
        }
    ) as client:
        agent = create_react_agent(llm, client.get_tools())
        query = "what is the value of magic_function(3)?. use tools"

        weather_response = await agent.ainvoke({"messages": query})
        print(weather_response)


if __name__ == "__main__":
    asyncio.run(main2())
   

MultiServerMCPClientを使ってClientを作って接続していたところが変更点です。

ローカルでツールを呼び出す場合と殆ど一緒でLLM、ツール(今回はMCPサーバー経由)、そしてエージェント作成という流れは共通です。

わかってしまえば、これだけでMCPサーバーを利用できるクライアントを作成することができました。

最後に#

今回は、Pythonを使ってMCPサーバーに接続し、そのツールをLLMエージェントから利用する方法について解説しました。ローカルでツールを定義する場合と、MCPサーバー上のツールを利用する場合で、ReActエージェントの基本的な考え方やLangChain/LangGraphの使い方が共通していることをご理解いただけたかと思います。

FastMCPとLangChainのようなライブラリを組み合わせることで、LLMに外部の機能や情報源へのアクセス能力を付与し、より高度で実用的なアプリケーションを比較的簡単に構築できます。

ぜひ、ご自身でも様々なツールを持つMCPサーバーを構築し、LLMエージェントから連携させて、その可能性を探求してみてください。

参照#

https://github.com/langchain-ai/langchain-mcp-adapters/tree/langchain-mcp-adapters%3D%3D0.0.9?tab=readme-ov-file#client-1 https://gofastmcp.com/getting-started/installation https://python.langchain.com/docs/how_to/migrate_agent/#memory