🛠️

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 に対応しています。Teams アプリに 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