mcpField
M
MCP_Server_Setup

MCP_Server_Setup

ローカル
github.com/DikshantBadawadagi開発ツール080 週間前に更新

MCP_Server_Setup について

MCP_Server_Setupは、開発者向けのPython MCPサーバー構築・実行例です。ツールやリソースの定義、テスト、stdioまたはSSEでのクライアント接続を扱います。

主な機能

  1. 01MCPツールとリソースの定義
  2. 02MCP Inspectorでのテスト
  3. 03Claude Desktopへの登録
  4. 04stdioとSSEの利用

活用シーン

  1. 01MCPサーバーのローカルテスト
  2. 02Claude Desktopへのサーバー接続
  3. 03stdioまたはSSEでのクライアント接続

MCP 対応

MCPサーバーの構築方法と、stdioまたはSSEによるMCPクライアントとの接続方法を示します。定義したツールやリソースをクライアントに公開できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("DemoServer")

@mcp.tool()
def say_hello(name: str) -> str:
    """Say hello to someone

    Args:
        name: The person's name to greet
    """
    return f"Hello, {name}! Nice to meet you."

if __name__ == "__main__":
    mcp.run()
サーバーの実行

MCP サーバーを実行する方法はいくつかあります。

1. MCP Inspector を使った開発モード

サーバーをテストする最も簡単な方法は、MCP Inspector を使うことです。

mcp dev server.py

これにより、サーバーがローカルで実行され、サーバーのツールやリソースを直接操作できるウェブベースのツールである MCP Inspector に接続されます。テストに最適です。

2. Claude Desktop との連携

Claude Desktop がインストールされている場合、Claude で使えるようにサーバーをインストールできます。

mcp install server.py

これにより、サーバーが Claude Desktop の設定に追加され、Claude から利用できるようになります。

3. 直接実行(必要な場合、または SSE の場合のみ)

サーバーを直接実行することもできます。

# Method 1: Running as a Python script
python server.py

# Method 2: Using UV (recommended)
uv run server.py
MCP サーバーを実行するとどうなるか

MCP サーバーを実行すると、次の処理が行われます。

  1. サーバーは、定義した機能(ツール、リソースなど)を初期化します。
  2. 特定のトランスポートで接続を待ち受けます。

デフォルトでは、MCP サーバーは従来のウェブサーバー用ポートを使いません。代わりに、次のいずれかを使います。

  • stdio トランスポート:サーバーは標準入力と標準出力を介して通信します(mcp run のデフォルトで、Claude Desktop との連携に使用されます)。
  • SSE トランスポート:HTTP ベースの通信に使用されます(明示的に設定した場合に使用されます)。

特定のポートを使って HTTP 経由でサーバーを公開するには、SSE トランスポートを使うようにサーバーを変更する必要があります。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("MyServer", host="127.0.0.1", port=8050)

# Add your tools and resources here...

if __name__ == "__main__":
    # Run with SSE transport on port 8000
    mcp.run(transport="sse")

その後、次のように実行できます。

python server.py

これにより、サーバーが http://127.0.0.1:8050 で起動します。

クライアント側の実装(標準入出力を使用)

それでは、サーバーを使うクライアントの作成方法を見てみましょう。

import asyncio
import nest_asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    server_params = StdioServerParameters(
        command="python",  # The command to run your server
        args=["server.py"],  # Arguments to the command
    )

    async with stdio_client(server_params) as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()

            tools_result = await session.list_tools()
            print("Available tools:")
            for tool in tools_result.tools:
                print(f"  - {tool.name}: {tool.description}")

            result = await session.call_tool("add", arguments={"a": 2, "b": 3})
            print(f"2 + 3 = {result.content[0].text}")


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

このクライアントは、次の処理を行います。

  1. stdio 経由でサーバーへの接続を作成します。
  2. MCP セッションを確立します。
  3. 利用可能なツールを一覧表示します。
  4. 引数を指定して add ツールを呼び出します。
クライアント側の実装(Server-Sent Events を使用)

SSE を使ってサーバーに接続する方法は次のとおりです。

import asyncio
import nest_asyncio
from mcp import ClientSession
from mcp.client.sse import sse_client

async def main():
    async with sse_client("http://localhost:8050/sse") as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()

            tools_result = await session.list_tools()
            print("Available tools:")
            for tool in tools_result.tools:
                print(f"  - {tool.name}: {tool.description}")

            result = await session.call_tool("add", arguments={"a": 2, "b": 3})
            print(f"2 + 3 = {result.content[0].text}")


if __name__ == "__main__":
    asyncio.run(main())
どちらの方法を選ぶべきか
  • stdio を使用するのは、クライアントとサーバーが同じプロセス内で実行される場合、またはクライアントからサーバープロセスを直接起動する場合です。
  • HTTP を使用するのは、サーバーがクライアントとは別に実行される場合です。異なるマシンやコンテナで実行されることもあります。

ほとんどの本番環境におけるバックエンド連携では、HTTP 方式のほうが分離性とスケーラビリティに優れています。一方、stdio 方式は開発環境や密結合システムでは、よりシンプルな場合があります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。