跳到主要内容
翻译页面

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

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

StackQL 的 MCP 服务器可以在已编译的 Go 程序内运行,无需 npx,无需单独安装,也没有运行时依赖。stackql-mcp-go 库在官方 Go MCP SDK 客户端的背后通过 stdio 启动已签名的 StackQL 二进制文件,因此你的 Go 应用可以获得一个受治理、自描述的 SQL 接口,用于访问 StackQL 注册表中的每个云和 SaaS Provider。这就是 sandboxctl 所采用的模式,它是一个按需基础设施管家,以单个二进制文件发布。

步骤​

  1. 添加库:
go get github.com/stackql/stackql-mcp-go
  1. 启动嵌入式服务器并调用工具。 服务器默认以 read_only 模式启动:
import (
"context"
"github.com/modelcontextprotocol/go-sdk/mcp"
stackqlmcp "github.com/stackql/stackql-mcp-go/embed"
)

func main() {
ctx := context.Background()
client, err := stackqlmcp.StartServer(ctx, stackqlmcp.Options{
Binary: StackqlMCPBinary(),
})
if err != nil {
// handle error
}
defer client.Close()

res, err := client.Session.CallTool(ctx, &mcp.CallToolParams{
Name: "run_select_query",
Arguments: map[string]any{"sql": "SELECT name FROM google.compute.regions WHERE project = 'my-project'"},
})
_ = res
}
  1. 选择模式。 Options.Mode 默认为 read_only。仅当应用需要预配资源时,才将其设置为 safe、delete_safe 或 full_access。权限提升必须显式进行。

使用 go:embed 发布单个二进制文件​

要生成自包含的可执行文件,添加一个 go:generate 获取步骤,由它下载平台二进制文件并进行 sha256 校验,然后使用 go:embed 将其嵌入构建:

//go:generate go run github.com/stackql/stackql-mcp-go/cmd/stackql-mcp-fetch -platform auto -package main

运行时 StackqlMCPBinary() 返回嵌入的二进制文件,因此无需在首次运行时下载。如果不使用 vendoring,二进制文件会在首次运行时下载,经校验后存入位于 ~/.stackql/mcp-server-bin/ 的共享缓存。

演示应用​

sandboxctl 是一个基础设施管家:将嵌入式 StackQL MCP 服务器和 Claude 智能体循环集成在一个 Go 二进制文件中,在审批门控之下规划、检查成本并预配临时云沙箱。