🛠️

Teams AI Library v2 で MCP サーバーを立ててみる

に公開

はじめに

Teams AI Library v2 では、MCP サーバー機能が提供されています。MCP (Model Context Protocol) は、生成 AI と外部 API を連携させるためのプロトコルです。従来も RAG の実現などで生成 AI と外部 API の連携は行われていましたが、MCP を導入することで、より疎結合な接続が可能となり、AI エージェントを多様なアプリケーションへ展開できるようになります。Teams アプリは Teams クライアントや Microsoft 365 Copilot に対応していますが、MCP サーバーを実装することで、これら以外のサービスにも柔軟に対応可能となります。

詳細なドキュメントは下記にて公開されていますが、現時点では C# セクションにも関わらず、サンプル コードが TypeScript で記載されています。

https://microsoft.github.io/teams-ai/csharp/in-depth-guides/ai/mcp/mcp-server

GitHub 上のリポジトリにあるサンプルが参考になります。今回は、サンプルをそのままコピーするのではなく、手順を追って実装方法を解説します。

https://github.com/microsoft/teams.net/tree/4baad384246fb711794eb5e533a2119f7ee9056a/Samples/Samples.Mcp

実行手順

まず、クイック スタートに従い Quote.Agent エージェントを作成します。

npm install -g @microsoft/teams.cli@preview
teams new csharp quote-agent --template echo

MCP サーバーの構築には、Microsoft.Teams.Plugins.External.Mcp パッケージの追加が必要です。

dotnet add package Microsoft.Teams.Plugins.External.Mcp --version 2.0.0-preview.4

Program.cs

MCP サーバーのセットアップと MCP サーバーから呼び出されるプロンプトの定義を追加します。

  var builder = WebApplication.CreateBuilder(args);
  builder.AddTeams();
  builder.AddTeamsDevTools();
+ builder.AddTeamsMcp();
+ builder.AddOpenAI<MainPrompt>();

  builder.Services.AddTransient<MainController>();

+ builder.Services.AddMcpServer()
+     .WithTeamsChatPrompts()
+     .WithHttpTransport();

MainPrompt.cs

サンプルをそのままコピーします。入力された文字列をそのまま返却するだけです。

[Prompt("main")]
public class MainPrompt
{
    private readonly IServiceProvider _services;

    public MainPrompt(IServiceProvider provider)
    {
        _services = provider;
    }

    [Function("echo")]
    [Function.Description("echos back whatever you said")]
    public string Echo([Param] string text)
    {
        return text;
    }
}

appsettings.json

サンプルには記載がありませんがこのまま実行するとエラーになります。AddOpenAI メソッドが OpenAI を呼び出すようなので appsettings.json に OpenAI の情報を追加します。Azure OpenAI Service は使えないようです。

{
  "OpenAI": {
    "ApiKey": "{{api-key}}",
    "Model": "{{model-name}}"
  }
}

実行結果

MCP サーバーのエンドポイント URL は http://localhost:3978/mcp です。デバッグを開始したら Postman を使って接続します。

一覧に main.echo が表示されるので実行してみます。

結果が返ってくるのが確認できました。

おわりに

同じリソースで Microsoft 365 Copilot のエージェントとしても MCP サーバーとしても動作させることができるのは大きなメリットです。プレビューなので現時点ではサンプルが動く程度ですが今後も注目していきたいです。

Discussion