跳到主要内容
翻译页面

本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。

如何在 .NET 应用中嵌入 StackQL MCP 服务器

StackQL 的 MCP 服务器可以在 .NET 应用内运行,无需单独安装,也没有运行时依赖。StackQL.Mcp 包在官方 C# MCP SDK 客户端的背后通过 stdio 启动已签名的 StackQL 二进制文件,因此 worker 服务或智能体可以获得一个受治理、自描述的 SQL 接口,用于访问 StackQL 注册表中的每个云和 SaaS Provider。这就是 driftwatch 所采用的模式,它是一个定时执行漂移检查的 worker 服务。

步骤​

  1. 添加包:
dotnet add package StackQL.Mcp

可选的 StackQL.Mcp.AgentFramework 包提供 Agent Framework 集成。需要 .NET 8 或更高版本(这些包同时以 net8.0 和 net9.0 为目标)。

  1. 启动服务器并调用工具。 构建器默认使用 StackqlMode.ReadOnly:
using StackQL.Mcp;

await using var server = await StackqlMcp.CreateBuilder()
.WithMode(StackqlMode.ReadOnly)
.WithAuth("github", "null_auth")
.StartAsync();

var tools = await server.ListToolsAsync();
var result = await server.CallToolAsync("list_services",
new() { ["provider"] = "github", ["row_limit"] = 5 });

构建器还提供 .WithBinary()、.WithBundlePath()、.WithApproot() 和 .WithCommand()。

  1. 选择模式。 .WithMode() 默认为 StackqlMode.ReadOnly。仅当应用需要预配资源时,才设置 StackqlMode.Safe、StackqlMode.DeleteSafe 或 StackqlMode.FullAccess。权限提升必须显式进行。

发布自包含的可执行文件​

获取二进制文件有两种方式:

  • Sidecar(默认):平台 bundle 在首次运行时下载,经 sha256 校验后缓存到 ~/.stackql/mcp-server-bin/<version>/<platform-key>/,并通过 stdio 启动。
  • Vendored:将 bundle 作为构建资源嵌入:
dotnet build -p:StackqlVendorBundle=/path/to/stackql-mcp-windows-x64.mcpb

可在运行时通过 STACKQL_MCP_BIN 或 STACKQL_MCP_BUNDLE 环境变量覆盖二进制文件或 bundle。

演示应用​

driftwatch 是一个 .NET Worker Service,它嵌入只读的 StackQL 服务器,定时运行一组 SQL 漂移检查(公开暴露、缺少标签或许可证、基线漂移),并将检查结果发布到 Teams Adaptive Card。