MCPサーバーのプロンプトをつくる

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

やりたいこと

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

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

を試したい。

今回は「プリミティブ」をやる。

サンプルコード

このリポジトリの「ReviewPrompt」ブランチでプロンプトをためした。

github.com

C#コード

https://github.com/tera1707/McpJikkenApp/blob/feature/ReviewPrompt/ReviewWithOurCodingRulesMcpServer/ReviewWithOurCodingRulesPrompts.cs

using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Text.Json;
using ModelContextProtocol;
using Microsoft.Extensions.AI; // or the appropriate namespace

namespace ReviewWithOurCodingRulesMcpServer;

[McpServerPromptType]
class ReviewWithOurCodingRulesPrompts
{
    [McpServerPrompt(Name = "ReviewWithOurCppCodingRule")]
    [Description("私たちのC++コーディングルールを依頼するためのプロンプト")]
    public static string PromptForCppReviewRequest() => """
        ReviewWithMyRulesのMCPサーバーを使って、私たちのC++のためのコーディングルールを元に、コードをレビューしてください。
        """;
        
    [McpServerPrompt(Name = "ReviewWithOurCsCodingRule")]
    [Description("私たちのC#コーディングルールを依頼するためのプロンプト")]
    public static string PromptForCsReviewRequest() => """
        ReviewWithMyRulesのMCPサーバーを使って、私たちのC#のためのコーディングルールを元に、コードをレビューしてください。
        """;
}

こんな感じで書くだけで、プロンプトができる。

引数を取るプロンプトというのもできるらしいが、今回は試さず。(使い道が思いつかなかったので後回しにした)

プロンプトをMCPサーバーに持たせておくと、VSCodeからそれを使ったときに、チャット欄に「/」を入力すると、プロンプトの候補が表示され、選んだらそれがチャット欄にパッと出てくる。 (おそらくだが、「/」を入力するとプロンプト候補が出てくる、というのはVSCodeの仕様で、他のチャットクライアントの場合はまた別のプロンプトの使われ方があるような気がする。(未確認、未検証))

参考

MCP の Prompt をC# SDK で作る方法

https://zenn.dev/microsoft/articles/mcp-prompt-001