MCP Automations

io.github.wzltmp由 GitHub 账号 wzltmp 发布v0.1.0更新于 Nov 2, 2026

Summarize URLs, repurpose content, daily news digests, find competitors. Cost telemetry built in.

已验证Streamable HTTP可网页运行网页搜索与抓取媒体与设计

概览

AI 生成的概览

远程 MCP 服务器,提供四个由大模型驱动的内容工具:网页摘要、内容改写、新闻摘要和竞品查找。

可以做什么
  • 抓取网址、提取正文并返回指定条数的要点摘要
  • 把长文改写成 Twitter 推文串、LinkedIn 帖子或邮件通讯
  • 按主题搜索近期新闻并返回带引用的摘要
  • 根据公司域名找出若干可能的竞争对手
  • 读取列出工具的目录资源,并使用串联摘要与改写的每日简报提示模板
适用场景
适合需要快速总结文章、把已有长文改写成社交或邮件内容、获取带引用的主题新闻汇总,或先做一轮竞品梳理,而不想自己搭建大模型与搜索管线的场景。
运行要求
提供远程端点,使用托管版本无需本地安装。本地运行需要 Python 3.13、项目依赖,以及 ANTHROPIC_API_KEY 和 TAVILY_API_KEY 环境变量;无论哪种方式都需要能访问 Anthropic 与 Tavily 的网络。
安装前请注意
托管端点是公开演示服务,未声明任何身份验证,发送的内容都会经过第三方。内容与主题会被送往 Anthropic 和 Tavily 处理。本地运行需自备 Anthropic 与 Tavily API 密钥,每次调用都会在这些付费接口上产生费用;README 提到的会话与月度花费上限仅针对作者自己的部署。

安装

在 SourceWeft 中

  1. 打开 控制台中的 MCP Automations,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.wzltmp%2Fmcp-automations/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "automations": {
      "type": "http",
      "url": "https://mcp-automations.fly.dev/mcp"
    }
  }
}

README

MCP Automations

A production-grade Model Context Protocol server in Python — four LLM-callable tools, two transports, deployed two different ways.

bash
# 30-second proof the server is up:curl -X POST https://mcp-automations.fly.dev/mcp \  -H 'Content-Type: application/json' \  -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","method":"initialize","id":1,       "params":{"protocolVersion":"2024-11-05",                 "capabilities":{},                 "clientInfo":{"name":"curl","version":"1"}}}'

What this is

Most "AI engineer" portfolio projects are applications (a RAG chatbot, an agent that does research). This project is the layer underneath — the typed tools an LLM can call and the transport plumbing that exposes them. MCP is the emerging standard for LLM tool use (~97M monthly SDK downloads as of early 2026); building one — not just consuming one — is the rare skill.

For a deeper look at the design decisions — why two transports, how cost telemetry works, the exception hierarchy, what I'd do differently — see WRITEUP.md.

Tools

ToolModelWhat it does
summarize_url(url, n_bullets)Haiku 4.5Fetch a page, extract clean text with trafilatura, return an N-bullet summary
repurpose_content(text, format)Sonnet 4.6Turn long-form text into a twitter thread, linkedin post, or newsletter
daily_digest(topic, n_results)Haiku 4.5Tavily news search + ~200-word digest with citations
find_competitors(domain, n)Sonnet 4.6Identify N plausible competitors for a company by domain

Plus one MCP resource (automations://catalog) and one MCP prompt (daily_brief) — using all three MCP primitives, not just tools.

Every tool returns a typed Pydantic model with per-call token usage and dollar cost attached. Cheap tasks route to Haiku 4.5 ($1/M in, $5/M out), writing-heavy tasks to Sonnet 4.6 ($3/M in, $15/M out).

Connect Claude Desktop to this server

Add one of these to ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%/Claude/claude_desktop_config.json (Windows), then restart Claude Desktop.

Option A — local stdio (no network, runs the server as a subprocess):

jsonc
{  "mcpServers": {    "mcp-automations": {      "command": "python",      "args": ["-m", "mcp_server.server"],      "cwd": "/absolute/path/to/mcp-automations",      "env": {        "ANTHROPIC_API_KEY": "sk-ant-...",        "TAVILY_API_KEY": "tvly-..."      }    }  }}

Option B — remote HTTP (talks to the live Fly server, no local setup):

jsonc
{  "mcpServers": {    "mcp-automations": {      "url": "https://mcp-automations.fly.dev/mcp",      "transport": "http"    }  }}

Then ask Claude something like "summarize https://www.paulgraham.com/greatwork.html in 3 bullets" — it'll call summarize_url automatically.

Run locally

bash
pip install -r requirements.txt
# Stdio (for Claude Desktop):python -m mcp_server.server
# HTTP server (defaults to 0.0.0.0:8765):MCP_TRANSPORT=http python -m mcp_server.server
# Streamlit playground:streamlit run playground/app.py

Requires Python 3.13. Needs ANTHROPIC_API_KEY and TAVILY_API_KEY in .env (see .env.example).

Architecture

┌────────────────┐     stdio      ┌──────────────────────┐│ Claude Desktop ├───────────────►│                      │└────────────────┘                │                      │                                  │   mcp_server/        │┌────────────────┐    HTTP/JSON   │   server.py          ││ Remote client  ├───────────────►│   (FastMCP)          │└────────────────┘   (Fly.io)     │                      │                                  │   4 tools            │┌────────────────┐  direct call   │   1 resource         ││ Streamlit UI   ├───────────────►│   1 prompt           │└────────────────┘                └──────────┬───────────┘                                             │                                  ┌──────────┴───────────┐                                  │ Anthropic + Tavily   │                                  │ (lazy clients)       │                                  └──────────────────────┘

The same Python callables back all three entry points. The transport is just a wrapper.

What's in this repo

mcp-automations/├── mcp_server/│   ├── server.py        # FastMCP server: 4 tools + 1 resource + 1 prompt│   ├── models.py        # Pydantic I/O schemas (incl. per-call Cost telemetry)│   └── exceptions.py    # MCPToolError + UpstreamAPIError / EmptyLLMResponseError / ExtractionError├── playground/│   └── app.py           # Streamlit UI with per-session call + spend caps├── tests/               # offline unit tests (httpx/anthropic/tavily all mocked)├── Dockerfile           # python:3.13-slim, MCP_TRANSPORT=http for Fly├── fly.toml             # shared-cpu-1x, 256mb, auto-stop when idle└── .github/workflows/   # ruff + strict mypy + pytest on every push

Production touches worth noting

  • Cost telemetry on every tool response (models.Cost) — token counts and USD attached so a client doesn't have to re-derive it.
  • Cost-aware model routing — cheap tasks → Haiku, writing tasks → Sonnet.
  • Domain-specific exception hierarchy — UpstreamAPIError, EmptyLLMResponseError, ExtractionError each route differently in logs and the Streamlit UI.
  • Two transports, one codebase — MCP_TRANSPORT=stdio|http env switch; HTTP host/port from env so the same image runs on Fly.
  • Per-session abuse caps in the playground — 20 calls / $0.50 max per session; backed by a $2/mo hard cap on the Anthropic console.
  • Strict mypy + ruff + pytest in CI on every push (.github/workflows/ci.yml).

Why MCP

MCP is transport-agnostic, so one server serves both a local Claude Desktop user (stdio subprocess) and a hosted multi-tenant deployment (HTTPS). It also exposes three primitives that most demos skip:

  • Tools — functions the model decides to call (4 of them here)
  • Resources — read-only data the client can fetch by URI (automations://catalog returns the tool list as JSON)
  • Prompts — server-side templates the user explicitly invokes (daily_brief chains daily_digest + repurpose_content)

Using all three is a signal of reading the spec, not just a quickstart.

Status

✅ Code on GitHub, CI green ✅ Public playground on Streamlit Cloud ✅ Public MCP HTTP server on Fly.io ✅ Cost protection (per-session caps + monthly Anthropic cap) ✅ Real test coverage (23 offline unit tests) ✅ Listed on the Official MCP Registry as io.github.wzltmp/mcp-automations ✅ Long-form writeup of design decisions ✅ Consumed by another agent, not just demoed — langgraph-research-agent's read_node calls this server's summarize_url tool over HTTP (with local fallback if the call fails) 🚧 Demo gif + screenshots (planned) 🚧 n8n self-host via docker-compose (planned)

License

MIT.

来源:README.md,提交 b8c9b1d

工具

4

summarize_url

Fetch a URL, extract clean article text, and return an N-bullet summary.

输入参数url必填n_bullets

repurpose_content

Repurpose long-form text into ``twitter_thread``, ``linkedin_post``, or ``newsletter``.

输入参数text必填format

daily_digest

Search the web for recent news on ``topic`` and return a digest with citations.

输入参数topic必填n_results

find_competitors

Identify ``n`` plausible competitors for a company at ``domain`` (e.g., 'stripe.com').

输入参数ndomain必填

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分