内容
# Setu — 连接 AI 与机会
**在线访问:** [setu.mimanasa.online](https://setu.mimanasa.online) · **连接器 URL:** `https://api.mimanasa.online/mcp`
Setu 是一个开源的 **模型上下文协议(MCP)** 服务器,允许 AI 助手(如 Claude、ChatGPT、Cursor、Windsurf、VS Code 等)从 **您自己的 Gmail** 发送电子邮件 — 由助手研究、为实际收件人撰写、在发送前由您批准。
*Setu(सेतु)在印地语中意为“桥梁”。*
## 概述
AI 助手可以撰写一封很好的电子邮件,但它无法亲自发送。Setu 就是那双手 — 它故意承担模型不应该信任的部分:用户是谁、已经发送了多少邮件、地址是否真实、以及发送邮件本身。
Setu 扮演三个角色,这些角色决定了什么样的电子邮件是好的:
1. **求职者** — 查找职位空缺并发送申请,附上简历链接(并首先验证为公开可访问)。
2. **招聘人员** — 向候选人发送职位描述。
3. **专业人士** — 会议请求、跟进、客户推销、日常外联;链接可选。
## 关键功能
- **从您的实际 Gmail 发送邮件。** 电子邮件出现在您的“已发送”文件夹中;回复邮件会出现在您的收件箱中。没有第三方发送域,没有投递惩罚。
- **仅限发送邮件。** Setu 请求一个 Gmail 权限:`gmail.send`。它 **无法** 读取您的收件箱 — 这是一个缺失的权限,而不是承诺。永远不会看到密码(Google OAuth),**也不会存储任何令牌** — OAuth 层每次请求都会颁发一个新的令牌。
- **服务器端防护措施,而不是提示建议:**
- 每日限制(默认 80/用户)和批量上限(25)以保护您的 Gmail 信誉
- 有节奏的发送(默认每封邮件之间 5 秒)以避免看起来像机器人
- 防止重复 — 每次发送都被记录;同一个地址永远不会被重复发送邮件
- 简历/作品集链接验证 — Setu 获取您的链接,如果它重定向到登录页面,则拒绝它,以便 HR 不会看到“请求访问”
- 可选的 MX + 引用检查(`VERIFY_HR_EMAILS=true`),阻止模型从命名模式猜测的地址
## MCP 工具
| 工具 | 功能 |
|---|---|
| `get_my_profile` | 已登录用户的角色、保存的链接、计划和剩余配额。首先调用。 |
| `set_role` | `job_seeker` \| `recruiter` \| `professional`。询问,而不是推断。 |
| `save_link` | 保存附加到电子邮件的 URL。在保存之前获取并验证。 |
| `verify_hr_emails` | MX 记录 + 引用检查,用于模型找到的地址。默认建议。 |
| `send_application` | 发送一封电子邮件。不可逆转;在发送前显示给用户。`include_link=false` 跳过链接。 |
| `send_applications` | 批量发送(最多 25 封),有节奏。每个电子邮件的规则相同。 |
| `get_sent_history` | 已经发送的所有内容 — 使防止重复成为可能。 |
## 架构
使用 **Python 3.12**、[FastMCP](https://gofastmcp.com) 和 Gmail API 构建。三个独立的入口点共享 `core/`:
### 1. 主机 MCP 服务器(`remote/`)— 真正的产品
可流式的 **HTTP** 传输 + Google OAuth(动态客户端注册)。任何用户都可以通过一个 URL 和 Google 登录从 claude.ai/ChatGPT 连接;无需安装。
```bash
python -m remote.server # http://localhost:8000/mcp
```
它还为 Web 前端提供一个小型 HTTP API:
| 路由 | 目的 |
|---|---|
| `GET /health` | 存活 + 数据库可达性(用于 Render 健康检查) |
| `GET /api/stats` | 用户仪表盘的统计信息(Bearer = Google 访问令牌) |
| `POST /api/visit` | 分析面板的匿名页面访问信标 |
| `GET/POST /admin/api/*` | 管理面板:总数、用户、访客、计划更改(通过 `ADMIN_EMAIL`/`ADMIN_PASSWORD` 进行 HTTP 基本身份验证) |
### 2. 本地 MCP 服务器(`mcp_server/`)
用于 Claude Desktop / Cursor / 本地客户端的 **stdio** 传输。您需要提供自己的 Google Cloud 凭证;只有您可以使用它。
```json
{
"mcpServers": {
"setu": { "command": "python", "args": ["-m", "mcp_server.server"] }
}
}
```
### 3. 独立桌面应用(`app.py` / `main.py`)
没有 MCP 客户端参与,因此 **Gemini** 编写电子邮件。Flask Web UI(`python app.py` → http://localhost:5000)或 CLI(`python main.py`)。从公共 Google Sheet 或手动输入读取收件人。
## 自主托管
### 先决条件
- Python 3.10+
- 具有启用 **Gmail API** 的 Google Cloud 项目
- 一个 OAuth 客户端 — **Web 应用程序** 用于托管服务器,**桌面应用程序** 用于本地模式
- 仅限以下权限:`openid`、`userinfo.email`、`gmail.send` — 永远不要添加 `gmail.readonly`/`compose`/`modify`;它们会将应用程序移入 Google 的受限层级(每年 15k-75k 美元的 CASA 审计)
### 安装
```bash
git clone https://github.com/gitmanhimanshu/Email_automation.git
cd Email_automation
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Mac/Linux
pip install -r remote/requirements.txt # 仅限托管服务器
# 或:pip install -r requirements.txt # 包括桌面模式在内的所有内容
```
### 配置
```bash
cp .env.example .env # 然后填写
```
```env
GOOGLE_CLIENT_ID=xxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxxx
PUBLIC_BASE_URL=http://localhost:8000 # 生产环境下的域名
# DATABASE_URL=postgresql://... # 未设置 = SQLite(data/app.db)
ADMIN_EMAIL=you@gmail.com # 管理面板登录(可选)
ADMIN_PASSWORD=change-me
```
在 Google Console 中添加重定向 URI,确切为:`<PUBLIC_BASE_URL>/auth/callback`。
### 运行和连接
```bash
python -m remote.server
```
- **claude.ai:** 设置 → 连接器 → 添加自定义连接器 → `https://your-domain.com/mcp`
- **Claude Code:** `claude mcp add --transport http setu https://your-domain.com/mcp`
- **VS Code / Cursor / Windsurf:** 将相同的 URL 添加为远程 MCP 服务器
使用您自己的邮箱(真实 OAuth,真实发送)进行端到端测试:
```bash
python -m remote.server # 终端 1
python -m remote.test_local # 终端 2
```
### 部署
存储库提供了一个 Dockerfile 和一个 Render 蓝图([render.yaml](render.yaml)),其中预配置了健康检查 — 将存储库在 [Render](https://render.com) 上连接为蓝图,设置环境变量即可。Railway 也可以用同样的方式工作([railway.json](railway.json))。在生产环境中使用 Postgres(Neon 免费层足够);在临时文件系统上,SQLite 会在每次部署时被删除。
完整的部署指南,包括 Google 验证和 OAuth 发布状态陷阱:**[remote/README.md](remote/README.md)**。
## 前端
登录页面、文档、仪表盘和管理面板位于一个单独的存储库中:[setu-frontend](https://github.com/gitmanhimanshu/setu-frontend)(Next.js 15,部署在 Vercel 上)。
## 贡献
欢迎贡献 — 请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md)** 以了解设置、样式和什么样的 PR 是好的。如果你发现了一个安全问题,请遵循 **[SECURITY.md](SECURITY.md)** 而不是公开一个问题。
## 许可证
[MIT](LICENSE) 2026 Himanshu Yadav 版权所有