ADK 的 MongoDB MCP 工具¶
Supported in ADKPythonTypeScriptGo
MongoDB MCP 服务器 将你的 ADK 智能体连接到 MongoDB 数据库和 MongoDB Atlas 集群。此集成使你的智能体能够使用自然语言查询集合、管理数据库并与 MongoDB Atlas 基础设施进行交互。
使用场景¶
-
数据探索和分析:使用自然语言查询 MongoDB 集合、运行聚合和分析文档模式,而无需手动编写复杂的查询。
-
数据库管理:通过对话命令列出数据库和集合、创建索引、管理用户并监控数据库统计信息。
-
Atlas 基础设施管理:直接从你的智能体创建和管理 MongoDB Atlas 集群、配置访问列表并查看性能建议。
前置条件¶
- 对于数据库访问:MongoDB 连接字符串(本地、自托管或 Atlas 集群)
- 对于 Atlas 管理:带有 API 凭据(客户端 ID 和密钥)的 MongoDB Atlas 服务账户
与智能体一起使用¶
from google.adk.agents import Agent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams
from mcp import StdioServerParameters
# 对于数据库访问,使用连接字符串:
CONNECTION_STRING = "mongodb://localhost:27017/myDatabase"
# 对于 Atlas 管理,使用 API 凭据:
# ATLAS_CLIENT_ID = "YOUR_ATLAS_CLIENT_ID"
# ATLAS_CLIENT_SECRET = "YOUR_ATLAS_CLIENT_SECRET"
root_agent = Agent(
model="gemini-flash-latest",
name="mongodb_agent",
instruction="帮助用户查询和管理 MongoDB 数据库",
tools=[
McpToolset(
connection_params=StdioConnectionParams(
server_params=StdioServerParameters(
command="npx",
args=[
"-y",
"mongodb-mcp-server",
"--readOnly", # 写入操作请移除此项
],
env={
# 对于数据库访问,请使用:
"MDB_MCP_CONNECTION_STRING": CONNECTION_STRING,
# 对于 Atlas 管理,请使用:
# "MDB_MCP_API_CLIENT_ID": ATLAS_CLIENT_ID,
# "MDB_MCP_API_CLIENT_SECRET": ATLAS_CLIENT_SECRET,
},
),
timeout=30,
),
)
],
)
import { LlmAgent, MCPToolset } from "@google/adk";
// 对于数据库访问,使用连接字符串:
const CONNECTION_STRING = "mongodb://localhost:27017/myDatabase";
// 对于 Atlas 管理,使用 API 凭据:
// const ATLAS_CLIENT_ID = "YOUR_ATLAS_CLIENT_ID";
// const ATLAS_CLIENT_SECRET = "YOUR_ATLAS_CLIENT_SECRET";
const rootAgent = new LlmAgent({
model: "gemini-flash-latest",
name: "mongodb_agent",
instruction: "帮助用户查询和管理 MongoDB 数据库",
tools: [
new MCPToolset({
type: "StdioConnectionParams",
serverParams: {
command: "npx",
args: [
"-y",
"mongodb-mcp-server",
"--readOnly", // 写入操作请移除此项
],
env: {
// 对于数据库访问,请使用:
MDB_MCP_CONNECTION_STRING: CONNECTION_STRING,
// 对于 Atlas 管理,请使用:
// MDB_MCP_API_CLIENT_ID: ATLAS_CLIENT_ID,
// MDB_MCP_API_CLIENT_SECRET: ATLAS_CLIENT_SECRET,
},
},
}),
],
});
export { rootAgent };
package main
import (
"context"
"log"
"os"
"os/exec"
"github.com/modelcontextprotocol/go-sdk/mcp"
"google.golang.org/genai"
"google.golang.org/adk/v2/agent"
"google.golang.org/adk/v2/agent/llmagent"
"google.golang.org/adk/v2/cmd/launcher"
"google.golang.org/adk/v2/cmd/launcher/full"
"google.golang.org/adk/v2/model/gemini"
"google.golang.org/adk/v2/tool"
"google.golang.org/adk/v2/tool/mcptoolset"
)
// 对于数据库访问,使用连接字符串:
const connectionString = "mongodb://localhost:27017/myDatabase"
// 对于 Atlas 管理,使用 API 凭据:
// const atlasClientID = "YOUR_ATLAS_CLIENT_ID"
// const atlasClientSecret = "YOUR_ATLAS_CLIENT_SECRET"
func main() {
ctx := context.Background()
model, err := gemini.NewModel(ctx, "gemini-flash-latest", &genai.ClientConfig{
APIKey: os.Getenv("GOOGLE_API_KEY"),
})
if err != nil {
log.Fatalf("创建模型失败:%v", err)
}
args := []string{
"-y", "mongodb-mcp-server",
"--readOnly", // 写入操作请移除此项
}
server := exec.CommandContext(ctx, "npx", args...)
// 只转发 npx 所需的内容,外加 MongoDB 凭据。父环境
// 可能包含无关的机密信息,例如上面的 GOOGLE_API_KEY。
server.Env = []string{
// 对于数据库访问,请使用:
"MDB_MCP_CONNECTION_STRING=" + connectionString,
// 对于 Atlas 管理,请使用:
// "MDB_MCP_API_CLIENT_ID=" + atlasClientID,
// "MDB_MCP_API_CLIENT_SECRET=" + atlasClientSecret,
}
for _, k := range []string{
"PATH", "HOME", // POSIX
"APPDATA", "LOCALAPPDATA", "TEMP", "USERPROFILE", // Windows
} {
if v, ok := os.LookupEnv(k); ok {
server.Env = append(server.Env, k+"="+v)
}
}
mongodb, err := mcptoolset.New(mcptoolset.Config{
Transport: &mcp.CommandTransport{Command: server},
})
if err != nil {
log.Fatalf("创建 MongoDB 工具集失败:%v", err)
}
rootAgent, err := llmagent.New(llmagent.Config{
Model: model,
Name: "mongodb_agent",
Instruction: "帮助用户查询和管理 MongoDB 数据库",
Toolsets: []tool.Toolset{mongodb},
})
if err != nil {
log.Fatalf("创建智能体失败:%v", err)
}
l := full.NewLauncher()
cfg := &launcher.Config{AgentLoader: agent.NewSingleLoader(rootAgent)}
if err := l.Execute(ctx, cfg, os.Args[1:]); err != nil {
log.Fatalf("运行失败:%v\n\n%s", err, l.CommandLineSyntax())
}
}
可用工具¶
MongoDB 数据库工具¶
| 工具 | 描述 |
|---|---|
find |
针对 MongoDB 集合运行查找查询 |
aggregate |
针对 MongoDB 集合运行聚合 |
count |
获取集合中的文档数量 |
list-databases |
列出 MongoDB 连接的所有数据库 |
list-collections |
列出给定数据库的所有集合 |
collection-schema |
描述集合的模式 |
collection-indexes |
描述集合的索引 |
insert-many |
将文档插入到集合中 |
update-many |
更新匹配过滤器的文档 |
delete-many |
删除匹配过滤器的文档 |
create-collection |
创建一个新集合 |
drop-collection |
从数据库中删除一个集合 |
drop-database |
删除一个数据库 |
create-index |
为集合创建一个索引 |
drop-index |
从集合中删除一个索引 |
rename-collection |
重命名一个集合 |
db-stats |
获取数据库的统计信息 |
explain |
获取查询执行统计信息 |
export |
以 EJSON 格式导出查询结果 |
MongoDB Atlas 工具¶
Note
Atlas 工具需要 API 凭据。设置 MDB_MCP_API_CLIENT_ID 和 MDB_MCP_API_CLIENT_SECRET 环境变量以启用它们。
| 工具 | 描述 |
|---|---|
atlas-list-orgs |
列出 MongoDB Atlas 组织 |
atlas-list-projects |
列出 MongoDB Atlas 项目 |
atlas-list-clusters |
列出 MongoDB Atlas 集群 |
atlas-inspect-cluster |
检查集群的元数据 |
atlas-list-db-users |
列出数据库用户 |
atlas-create-free-cluster |
创建一个免费的 Atlas 集群 |
atlas-create-project |
创建一个 Atlas 项目 |
atlas-create-db-user |
创建一个数据库用户 |
atlas-create-access-list |
配置 IP 访问列表 |
atlas-inspect-access-list |
查看 IP 访问列表条目 |
atlas-list-alerts |
列出 Atlas 警报 |
atlas-get-performance-advisor |
获取性能建议 |
配置¶
环境变量¶
| 变量 | 描述 |
|---|---|
MDB_MCP_CONNECTION_STRING |
用于数据库访问的 MongoDB 连接字符串 |
MDB_MCP_API_CLIENT_ID |
用于 Atlas 工具的 Atlas API 客户端 ID |
MDB_MCP_API_CLIENT_SECRET |
用于 Atlas 工具的 Atlas API 客户端密钥 |
MDB_MCP_READ_ONLY |
启用只读模式 (true 或 false) |
MDB_MCP_DISABLED_TOOLS |
逗号分隔的要禁用的工具列表 |
MDB_MCP_LOG_PATH |
日志文件的目录 |
只读模式¶
--readOnly 标志将服务器限制为仅进行读取、连接和元数据操作。这会阻止任何创建、更新或删除操作,使其能够安全地进行数据探索而没有意外修改的风险。
禁用工具¶
你可以使用 MDB_MCP_DISABLED_TOOLS 禁用特定工具或类别:
- 工具名称:
find、aggregate、insert-many等。 - 类别:
atlas(所有 Atlas 工具)、mongodb(所有数据库工具) - 操作类型:
create、update、delete、read、metadata