人工智能通讯
python MCP(模型上下文协议) 工具和a 快速API 一台服务器上的应用程序: POST /chat (OpenRouter代理)和 GET /mcp/sse + POST /mcp/messages (MCP超过SSE)。堆栈获取与AI相关的新闻,可以使用OpenRouter对文章进行排名,呈现 响应式HTML时事通讯, 部署 静态 index.html 上 维塞尔,以及 发送 邮件通过 重发.
______________________________________________________________________
什么跑在哪里
一个过程: uvicorn app.main:app.
| 表面 | 路径 | 角色 |
|---|---|---|
| 聊天API | GET /, POST /chat | 代理商→ 开放路由→ 基于SSE的MCP工具 |
MCP(SSE) GET /mcp/sse, POST /mcp/messages | 外部MCP客户端(例如Cursor) |
app/agent.py 用途 MCP_SSE_URL 设置时;否则,在Render上使用 RENDER_EXTERNAL_URL/mcp/sse (同一个主机)。在本地,它默认为 http://127.0.0.1:{PORT}/mcp/sse.
______________________________________________________________________
端到端通讯流(代理/MCP客户端)
get_news--GNews+新闻数据(query,from_date,to_date).get_github_repos--GitHub搜索(query).- 合并列表;跑
filter_ai_news上 仅新闻文章 (JSON数组{title, description, url}). deploy_newsletter_page--通行证html_content,或news/github_repos阵列(或旧阵列*_json字符串)用于Jinja渲染(app/templates/newsletter.html.j2).send_email—recipients,subject,加issue_url(来自部署)和highlights用于消化或生食html_content.
每个工具返回JSON文本;故障包括 error 字段(如适用)。
______________________________________________________________________
MCP工具
| 工具 | 模块 | 注释 |
|---|---|---|
get_news | app/services/api_tools.py | GNEWS_API_KEY 和 NEWS_DATA_API_KEY |
get_github_repos | app/services/api_tools.py | 未经验证的GitHub API(适用速率限制) |
filter_ai_news | app/services/api_tools.py | OpenRouter;可选的 OPENROUTER_HTTP_REFERER / OPENROUTER_APP_TITLE |
deploy_newsletter_page | app/services/vercel_deploy.py + newsletter_render.py | VERCEL_TOKEN, VERCEL_PROJECT_ID;可选 VERCEL_PROJECT_NAME, VERCEL_TEAM_ID |
send_email | app/services/email_sender.py | 重新发送: RESEND_API_KEY, EMAIL_FROM, EMAIL_FROM_NAME |
MCP接线: app/mcp_server.py.SSE处理程序: app/routes/mcp.py (安装自 app/main.py).
______________________________________________________________________
环境变量
新闻与过滤
GNEWS_API_KEY--GNews搜索。NEWS_DATA_API_KEY--NewsData.io;并入get_news当设置时。OPENROUTER_API_KEY--文章排名filter_ai_news和那个/chat代理人。OPENROUTER_HTTP_REFERER--可选;一些OpenRouter设置需要引用者URL。OPENROUTER_APP_TITLE--可选;发送为X-Title(默认值AI Newsletter).
电子邮件(重新发送)
RESEND_API_KEY— 重发 API密钥。EMAIL_FROM--在重新发送中验证发件人(例如。newsletter@yourdomain.com).EMAIL_FROM_NAME--显示名称(默认AI Newsletter).
部署
VERCEL_TOKEN,VERCEL_PROJECT_ID,VERCEL_PROJECT_NAME-Vercel部署API。VERCEL_TEAM_ID--可选,适用于团队所有的项目。
聊天↔ 主控程序
MCP_SSE_URL--SSE URL的可选覆盖(例如远程MCP)。如果在Render上未设置,则使用RENDER_EXTERNAL_URL/mcp/sse.PORT--由渲染设置;uvicorn和设置使用它。
______________________________________________________________________
项目布局(主文件)
ai_newsletter/
├── render.yaml
├── requirements.txt # pip install for Render build
├── app/
│ ├── main.py # FastAPI: /chat + MCP routes
│ ├── agent.py # OpenRouter + MCP client (SSE)
│ ├── mcp_server.py # MCP tool definitions & handlers
│ ├── config/settings.py # Env loading
│ ├── routes/
│ │ ├── mcp.py # SSE + POST message handlers
│ │ └── chat.py # POST /chat
│ ├── services/
│ │ ├── api_tools.py
│ │ ├── email_sender.py
│ │ ├── vercel_deploy.py
│ │ ├── newsletter_render.py
│ │ └── fetch_news_NewsData.py
│ └── templates/
│ └── newsletter.html.j2
├── test_newsletter_flow.py
├── pyproject.toml
└── README.md______________________________________________________________________
设置
需要 Python≥3.12 和 紫外线.
uv sync创建一个 .env 在项目根中。不要承诺 .env.
______________________________________________________________________
运行(本地)
uv run python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000- 聊天:
POST http://127.0.0.1:8000/chat - MCP SSE:
http://127.0.0.1:8000/mcp/sse(与聊天来源相同;无需额外MCP_SSE_URL需要)。
______________________________________________________________________
在渲染上部署
- 创造一个 网络服务 从这个回购。
- 启动命令:
python -m uvicorn app.main:app --host 0.0.0.0 --port $PORT - 做 不 集
MCP_SSE_URL除非MCP必须在另一台主机上运行;渲染提供RENDER_EXTERNAL_URL. - 添加API密钥:
GNEWS_API_KEY,NEWS_DATA_API_KEY,OPENROUTER_API_KEY,RESEND_API_KEY,EMAIL_FROM,VERCEL_*等等。
外部MCP客户端可以使用 https://.onrender.com/mcp/sse.
______________________________________________________________________
测试
uv run python test_newsletter_flow.py检查Jinja渲染、部署输入分辨率和MCP工具注册(除非设置了凭据,否则没有真正的Vercel/Resend)。
______________________________________________________________________
业绩说明
开放路由, 维塞尔,以及 重发 增加网络延迟;调整超时 api_tools.py, vercel_deploy.py,以及 email_sender.py 如果需要的话。
______________________________________________________________________
示例用户请求(针对MCP感知代理)
将AI通讯发送至 reader@example.com.代理应选择一个日期范围,按顺序调用工具,部署HTML问题,然后通过电子邮件发送摘要 issue_url 和 highlights 从新闻。
