もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
以前作ったMCPサーバーでは、 MCPサーバー本体のexeの中に、ツールも実装していた。
が、いろいろな事情で、本体exeとは別のdllにツールを実装したい。
やったこと
別のdllにツールを定義して、それをMCPサーバー本体exeの冒頭で読み込み、
以前は
var builder = Host.CreateEmptyApplicationBuilder(settings: null); builder.Services.AddMcpServer() .WithStdioServerTransport() .WithToolsFromAssembly(); var app = builder.Build();
としていたのを
var builder = Host.CreateEmptyApplicationBuilder(settings: null); var mcp = builder.Services.AddMcpServer() .WithStdioServerTransport() .WithToolsFromAssembly(); // ツールを定義したDLL(ここではMcpServer1.dll)読み込み処理 // 本体exeと同じフォルダにdllもいる前提 var baseDir = AppContext.BaseDirectory; var pluginPath = Path.Combine(baseDir, "McpServer1.dll"); if (File.Exists(pluginPath)) { var externalAssembly = Assembly.LoadFrom(pluginPath); mcp.WithToolsFromAssembly(externalAssembly); // ★←ここが肝 } var app = builder.Build();
とする。
※dll側に書くツールは、exe側に書いていた内容と全く同じでOK。