🌟

.NET で MCP サーバー・クライアントを試してみよう その 2

2025/04/01に公開

先日 .NET で MCP サーバー・クライアントを試してみよう で MCP サーバー・クライアントを試してみましたが、今回はその続きとして、Claude のデスクトップアプリから MCP サーバーの連携を試してみます。ローカル PC 内での連携の場合は標準入出力を通じた連携が可能なので、そちらのやり方も紹介します。

といっても前回やった /sse のエンドポイントの定義は自前で定義が必要でしたが、今回の標準入出力を通じた連携は非常に簡単にやれるようになっています。AddMcpServer メソッドに続いて WithStdioServerTransport を呼ぶだけで、標準入出力を通じた連携が可能になります。

C# の Worker Service のプロジェクトに ModelContextProtocol NuGet パッケージを追加して、以下のようなコードを書くだけで標準入出力を通じた連携が可能になります。

using ModelContextProtocol.Server;
using System.ComponentModel;

var builder = Host.CreateEmptyApplicationBuilder(null);
builder.Services.AddMcpServer()
    .WithStdioServerTransport()
    .WithPromptsFromAssembly();

builder.Build().Run();

続けて適当な天気の情報を返すようなツールを定義します。ここら辺は前回の記事でやったのとほぼ同じですね。

[McpServerToolType]
class WeatherForecastTool
{
    private static readonly string[] Summaries =
    [
        "Freezing", "Bracing", "Chilly", "Cool", "Mild",
        "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    ];

    [McpServerTool, Description("天気予報の提供地域の名前を提供します。")]
    public string[] GetForecastLocations() => ["東京", "大阪", "名古屋", "福岡", "札幌"];

    [McpServerTool, Description("指定された地域の天気予報を提供します。")]
    public WeatherForecast GetForecast(
        [Description("天気予報を取得する日付。")]
        DateOnly date,
        [Description("天気予報を取得する地域の名前。")]
        string location)
    {
        var rng = Random.Shared;
        return new WeatherForecast(date,
            rng.Next(-20, 55),
            rng.GetItems(Summaries, 1)[0]);
    }

    [McpServerTool, Description("今日の日付を提供します。")]
    public DateTime GetToday() => DateTime.Now;
}

public record WeatherForecast(
    [Description("天気予報の日付。")]
    DateOnly Date,
    [Description("天気予報の最高気温。")] 
    int TemperatureC,
    [Description("天気予報の概要。")]
    string Summary);

ここまで書いたら発行して exe を作成しておきます。この exe ファイルを後で Claude のデスクトップアプリから指定します。

では For Claude Desktop Users にしたがって設定をしていきます。まだ JSON ファイルを生でいじる必要があるので、若干ハードコアですね。

私の場合は先ほどのプロジェクトは WeatherForecastTool という名前で、発行した exe は D:\Labs\WeatherForecastTool\WeatherForecastTool\bin\Release\net9.0\publish\WeatherForecastTool.exe にあります。そのため以下のような設定を claude_desktop_config.json に追加することで MCP で定義したツールを使ってくれるようになります。

claude_desktop_config.json
{
    "mcpServers": {
        "filesystem": {
            "command": "D:\\Labs\\WeatherForecastTool\\WeatherForecastTool\\bin\\Release\\net9.0\\publish\\WeatherForecastTool.exe"
        }
    }
}

そして Claude のデスクトップアプリを起動してチャットの入力欄のすぐ下にあるハンマーのアイコンをクリックすると、設定したツールが以下のように表示されます。

そして「天気予報で対応している地域を教えてください」と聞くと以下のようにツールを実行していいかという確認ダイアログが出てきます。

許可をすると以下のようにちゃんとツールで返した内容を踏まえて返事をしてくれます。

いい感じですね。色々試していたら無料枠を食いつぶしてしまったので他の動作確認はできませんでしたがいい感じに動いてくれていそうです。

まとめ

適当な AI ツールに自作の MCP サーバーを連携させるのはとても手軽なので、MCP のサーバーを作れるようになっていると色々つぶしが効くような気がします。
まぁ、代表的なサービスについては今でも MCP サーバーが提供され始めているので、あまり自分で作る必要はないかもしれませんが、MCP サーバーを自分で作れるようになっておくと色々なサービスに連携できるようになるのと C# でもこの記事と前の記事みたいに簡単に作れるので、興味のある方はぜひ試してみてください。

次の記事

.NET で MCP サーバー・クライアントを試してみよう その 3

Microsoft (有志)

Discussion