使用说明
MCP代理
一个基于网络的会话代理,由各种LLM(Google Gemini、Anthropic Claude、OpenAI GPT、xAI Grok)通过Vercel AI SDK提供支持,能够通过模型上下文协议(MCP)服务器与外部服务进行交互。
概述
该项目提供了一个聊天界面,用户可以在其中选择LLM提供者和模型,然后与所选的LLM进行对话。该代理利用Vercel AI SDK处理多步骤工具执行,允许LLM与配置的MCP服务器(例如WhatsApp、GitHub、GSuite、Web Search)交互以满足用户请求。
建筑
该项目由以下部分组成:
- 前端(
mcp-agent-app/): Next.js应用程序提供基于React的聊天界面,可在以下网址访问http://localhost:3000.- 用途
@ai-sdk/reactsuseChat用于管理聊天状态和流式响应的钩子。 - 使用React上下文(
ChatContext)管理应用程序状态,如当前聊天ID、所选提供商/型号,并提供对useChat钩子的状态和功能。 - 包括一个侧边栏,用于选择LLM提供商/模型和管理保存的聊天记录。
- 用途
- 聊天API(
mcp-agent-app/src/app/api/chat/route.ts): Next.js API路由:- 从前端接收聊天消息、提供商ID和型号ID。
- 选择并实例化适当的LLM提供者(例如。,
@ai-sdk/google,@ai-sdk/anthropic)根据请求。 - 从加载MCP服务器配置
mcp-config.json. - 使用助手(
prepareStdioArgs)解析服务器命令的路径和环境变量。 - 使用初始化MCP客户端
experimental_createMCPClient和Experimental_StdioMCPTransport从ai和ai/mcp-stdio. - 使用以下命令直接从初始化的MCP客户端获取工具模式
mcpClient.tools(). - 调用Vercel AI SDK
streamText函数,传递选定的语言模型、消息和合并的MCP工具。 - 依赖
streamText(与maxSteps > 1)以处理多步骤对话流,包括通过MCP客户端自动调用工具。 - 由于当前SDK与stdio工具不兼容,包括禁用Anthropic工具的解决方法。
- 使用以下命令将响应(文本块、错误)流式传输回前端
result.toDataStream(). - 关闭中的MCP客户端连接
onFinish回拨。
- 聊天持久性API(
mcp-agent-app/src/app/api/chats/): Next.js API路由用于使用Prisma和SQLite数据库保存、加载、列出和删除聊天会话。存储聊天记录(CoreMessage[])、标题、提供者ID和型号ID。 - MCP服务器: 实现模型上下文协议(MCP)的外部进程(Python脚本、Docker容器)。聊天API后端通过
StdioMCPTransport基于mcp-config.json. - 配置:
mcp-agent-app/mcp-config.json:定义可用的MCP服务器、启动命令和工具模式(尽管现在模式主要是动态发现的)。mcp-agent-app/llm-config.json:定义前端UI的可用LLM提供者及其模型。mcp-agent-app/.env.local:存储后端和MCP服务器所需的API密钥、令牌和路径。
设置
先决条件:
- Node.js (推荐LTS版本)
- npm 或 纱线
- 紫外线 (Python包管理器)
- 码头工人 (适用于GitHub MCP服务器)
- LLM API密钥: 获取您要使用的提供商的密钥(Google Gemini、Anthropic Claude、OpenAI GPT、xAI Grok)。设置它们
.env.local. - GitHub个人访问令牌(PAT): 创建一个 具有适当的范围(例如。,
repo,read:user).设置为GITHUB_PERSONAL_ACCESS_TOKEN在……里面.env.local. - GSuite OAuth2凭据: 按照以下步骤操作 GSuite MCP服务器 部分。
安装和配置:
- 克隆存储库:
git clone <repository_url> cd mcp-agent - 安装Next.js应用程序依赖项:
cd mcp-agent-app npm install # or yarn install - 配置环境变量:
- 创建
.env.local在……里面mcp-agent-app/. - 添加API密钥、令牌和配置路径。例子:
# .env.local # LLM API Keys (Add keys for providers you want to use) GOOGLE_API_KEY=YOUR_GEMINI_API_KEY ANTHROPIC_API_KEY=YOUR_ANTHROPIC_API_KEY OPENAI_API_KEY=YOUR_OPENAI_API_KEY XAI_API_KEY=YOUR_XAI_API_KEY # GitHub Token GITHUB_PERSONAL_ACCESS_TOKEN=YOUR_GITHUB_PAT # Paths (Adjust if needed, especially if uv isn't in PATH) # UV_PATH=/path/to/your/uv # Optional override WHATSAPP_MCP_SCRIPT_DIR=../whatsapp-mcp/whatsapp-mcp-server # Relative paths often work GSUITE_MCP_SCRIPT_DIR=../mcp-gsuite GSUITE_GAUTH_FILE=../mcp-gsuite/.gauth.json GSUITE_ACCOUNTS_FILE=../mcp-gsuite/.accounts.json GSUITE_CREDENTIALS_DIR=../mcp-gsuite/gsuite-credentials # Directory for storing token.json DDG_MCP_SCRIPT_DIR=../duckduckgo-mcp-server # Database URL (SQLite) DATABASE_URL="file:./dev.db" - 替换占位符。确保路径相对于
mcp-agent-app目录或使用绝对路径。
- 创建
- 设置数据库:
npx prisma migrate dev --name init # Or your latest migration name
运行应用程序:
- MCP服务器: 确保所需的MCP服务器正在运行或可访问(例如,为GitHub运行Docker守护进程,如果需要,手动启动其他服务器,尽管应用程序试图通过stdio启动它们)。
- 注: 当前的实施通过以下方式按需启动MCP服务器
StdioMCPTransport。除非调试特定的服务器,否则通常不需要手动启动它们。确保WhatsApp Go桥等先决条件 是 如果服务器需要,则运行。
- 注: 当前的实施通过以下方式按需启动MCP服务器
- 启动Next.js应用程序:
cd mcp-agent-app npm run dev # or yarn dev - 打开
http://localhost:3000.
用法
- 从侧栏下拉菜单中选择所需的LLM提供者和模型。
- 与聊天界面交互。
- 代理将使用所选的LLM,并在适当的时候尝试使用配置的MCP工具(Anthropic除外,该工具当前已禁用)。
- 使用“保存聊天”按钮来保持对话。从历史记录列表中加载以前的聊天记录。
示例提示:
Who are you?Search the web for the latest AI news.(使用ddg搜索)Get issue number 1 from the vercel/ai repository.(使用github)Send a WhatsApp message to [Number] saying "Test from MCP Agent"(使用whatsapp)What's on my main Google Calendar today?(使用gsuite)
添加新的MCP服务器
- 实施MCP服务器: 开发一个通过stdio/JSON-RPC通信的服务器。
- 更新
mcp-config.json: 添加一个服务器条目,定义其id,description,以及command(包括executableEnvVar/defaultExecutable,argsTemplate,scriptDirEnvVar,envVars).配置中的工具模式现在不那么重要了,因为它们是动态发现的,但描述是有帮助的。 - 更新
.env.local: 为新服务器的命令添加任何必需的环境变量。 - 重启 这
mcp-agent-app。后端将尝试从新服务器连接和发现工具。
当前MCP服务器
(描述基本保持不变,但执行现在由 StdioMCPTransport)
WhatsApp MCP服务器
- 来源:
whatsapp-mcp/ - 执行: Python脚本通过
uv run。需要单独运行Go桥。 - 配置:
WHATSAPP_MCP_SCRIPT_DIR
GitHub MCP服务器
- 来源: Docker镜像(
ghcr.io/github/github-mcp-server) - 执行: Docker容器通过
docker run。需要Docker守护进程运行。 - 配置:
GITHUB_PERSONAL_ACCESS_TOKEN
GSuite MCP服务器
- 来源:
mcp-gsuite/ - 执行: Python脚本通过
uv run. - 配置:
GSUITE_MCP_SCRIPT_DIR,GSUITE_GAUTH_FILE,GSUITE_ACCOUNTS_FILE,GSUITE_CREDENTIALS_DIR。需要OAuth2设置。
DuckDuckGo搜索MCP服务器
- 来源:
duckduckgo-mcp-server/ - 执行: Python模块通过
uv run. - 配置:
DDG_MCP_SCRIPT_DIR
文件和文件夹结构
mcp-agent/ (Project Root)
├── .gitignore
├── LICENSE
├── README.md (This file)
├── docs/ (Additional documentation)
├── mcp-agent-app/ (Next.js Application)
│ ├── .env.local (API Keys, Paths, DB URL)
│ ├── llm-config.json (LLM Provider/Model definitions for UI)
│ ├── mcp-config.json (MCP server command configurations)
│ ├── next.config.ts
│ ├── package.json
│ ├── prisma/
│ │ └── schema.prisma (Database schema)
│ │ └── migrations/
│ ├── src/
│ │ ├── app/
│ │ │ ├── api/
│ │ │ │ ├── chat/route.ts (Main chat API, uses Vercel AI SDK)
│ │ │ │ └── chats/ (API routes for saving/loading chats)
│ │ │ └── page.tsx (Main page component)
│ │ ├── components/ (React components: ChatInterface, Sidebar, etc.)
│ │ ├── context/
│ │ │ └── ChatContext.tsx (Manages app state, integrates useChat hook)
│ │ └── lib/
│ │ └── prisma.ts (Prisma client instance)
│ └── ... (Other Next.js files)
├── duckduckgo-mcp-server/
├── github-mcp-server/ (Source code, not directly run if using Docker image)
├── mcp-gsuite/
└── whatsapp-mcp/
├── whatsapp-bridge/ (Go component - needs separate execution)
└── whatsapp-mcp-server/ (Python component)
调试
- 检查Next.js服务器的终端日志(
npm run dev).查找API密钥状态、提供程序/模型使用、MCP初始化步骤以及streamText. - 检查浏览器控制台日志,了解上下文操作和潜在的前端错误。
- 如果MCP服务器初始化失败,请检查
prepareStdioArgs记录并确保中的路径和环境变量.env.local是正确的。 - 验证API密钥和令牌。
许可证
该项目根据麻省理工学院开源许可证条款获得许可。请参考 麻省理工学院 完整的条款。
