MCPサーバーのツールをつくる

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

MCPサーバーの3大プリミティブ(基本機能)の

  • ツール
  • プロンプト
  • リソース

を試したい。

今回は「ツール」をやる。

サンプルコード

下記のコードで、「ツール」を作った。

github.com

「ツール」の記述は下記のようにして、

using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Text.Json;

namespace ReviewWithOurCodingRulesMcpServer;

[McpServerToolType]
internal static class ReviewWithOutCodingRulesTools
{
    [McpServerTool, Description("Get C++ Coding Rules For Code Review. 私たちのC++コーディングルールを取得する")]
    public static async Task<string> GetCppCodingRulesForCodeReview()
    {
        var url = @"https://tera1707.com/entry/2025/07/20/230051";
        return await GetMarkdownFromUrlAsync(url);
    }

    [McpServerTool, Description("Get C# Coding Rules For Code Review. 私たちのC#コーディングルールを取得する")]
    public static async Task<string> GetCsCodingRulesForCodeReview()
    {
        var url = @"https://tera1707.com/entry/2025/07/20/235616";
        return await GetMarkdownFromUrlAsync(url);
    }

    private static async Task<string> GetMarkdownFromUrlAsync(string url)
    {
        using var client = new HttpClient();
        var response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode();
        var markdown = await response.Content.ReadAsStringAsync();
        return markdown;
    }
}

それの登録をメイン側でやればそれだけで「ツール」ができる。
(ツールの登録は.WithToolsFromAssembly();の部分。)

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol;
using System.Net.Http.Headers;

var builder = Host.CreateEmptyApplicationBuilder(settings: null);

builder.Services.AddMcpServer()
    .WithStdioServerTransport()
    .WithPromptsFromAssembly()
    .WithToolsFromAssembly();

var app = builder.Build();

await app.RunAsync();

参考

github公式 mcpサーバーの作り方

https://modelcontextprotocol.io/quickstart/server#c%23