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 分