Skip to content

用于 ADK 的 AgentMail MCP 工具

Supported in ADKPythonTypeScriptGo

AgentMail MCP 服务器 将你的 ADK 智能体连接到 AgentMail(一种为 AI 智能体构建的电子邮件收件箱 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 更新邮件属性(例如已读状态)

其他资源