用于 ADK 的 AgentMail MCP 工具¶
Supported in ADKPythonTypeScriptGo
AgentMail MCP 服务器 将你的 ADK 智能体连接到 AgentMail(一种为 AI 智能体构建的电子邮件收件箱 API)。此集成使你的智能体拥有自己的电子邮件收件箱,并能够使用自然语言发送、接收、回复和转发邮件。
使用场景¶
-
为智能体提供它们自己的收件箱:为你的智能体创建专用电子邮件地址,以便它们可以像人类团队成员一样独立发送和接收电子邮件。
-
自动化电子邮件工作流:让你的智能体端到端处理电子邮件对话,包括发送初始外联邮件、阅读回复以及跟进会话。
-
跨收件箱管理对话:列出并搜索会话和邮件、转发电子邮件以及检索附件,以保持你的智能体知识同步并快速响应。
先决条件¶
- 创建一个 AgentMail 帐号
- 在 AgentMail 控制面板 中生成 API 密钥
在智能体中使用¶
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
AGENTMAIL_API_KEY = "YOUR_AGENTMAIL_API_KEY"
root_agent = Agent(
model="gemini-flash-latest",
name="agentmail_agent",
instruction="帮助用户管理邮件收件箱并发送邮件",
tools=[
McpToolset(
connection_params=StdioConnectionParams(
server_params=StdioServerParameters(
command="npx",
args=[
"-y",
"agentmail-mcp",
],
env={
"AGENTMAIL_API_KEY": AGENTMAIL_API_KEY,
}
),
timeout=30,
),
)
],
)
import { LlmAgent, MCPToolset } from "@google/adk";
const AGENTMAIL_API_KEY = "YOUR_AGENTMAIL_API_KEY";
const rootAgent = new LlmAgent({
model: "gemini-flash-latest",
name: "agentmail_agent",
instruction: "帮助用户管理邮件收件箱并发送邮件",
tools: [
new MCPToolset({
type: "StdioConnectionParams",
serverParams: {
command: "npx",
args: ["-y", "agentmail-mcp"],
env: {
AGENTMAIL_API_KEY: AGENTMAIL_API_KEY,
},
},
}),
],
});
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 agentmailAPIKey = "YOUR_AGENTMAIL_API_KEY"
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)
}
server := exec.CommandContext(ctx, "npx", "-y", "agentmail-mcp")
// 只转发 npx 所需的内容,外加 AgentMail 密钥。父环境可能
// 包含无关的机密信息,例如上面读取的 GOOGLE_API_KEY。
server.Env = []string{"AGENTMAIL_API_KEY=" + agentmailAPIKey}
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)
}
}
agentmail, err := mcptoolset.New(mcptoolset.Config{
Transport: &mcp.CommandTransport{Command: server},
})
if err != nil {
log.Fatalf("创建 AgentMail 工具集失败:%v", err)
}
rootAgent, err := llmagent.New(llmagent.Config{
Model: model,
Name: "agentmail_agent",
Instruction: "帮助用户管理邮件收件箱并发送邮件",
Toolsets: []tool.Toolset{agentmail},
})
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())
}
}
可用工具¶
收件箱管理¶
| 工具 | 描述 |
|---|---|
list_inboxes |
列出所有收件箱 |
get_inbox |
获取特定收件箱的详情 |
create_inbox |
使用用户名和域名创建一个新收件箱 |
delete_inbox |
删除收件箱 |
会话管理¶
| 工具 | 描述 |
|---|---|
list_threads |
列出收件箱中的会话 |
get_thread |
获取特定会话及其邮件 |
get_attachment |
从邮件中下载附件 |
邮件操作¶
| 工具 | 描述 |
|---|---|
send_message |
从收件箱发送一封新邮件 |
reply_to_message |
回复现有邮件 |
forward_message |
将邮件转发给另一位收件人 |
update_message |
更新邮件属性(例如已读状态) |