summarize_url
Fetch a URL, extract clean article text, and return an N-bullet summary.
url必填n_bullets
io.github.wzltmp由 GitHub 帳號 wzltmp 發布v0.1.0更新於 Nov 2, 2026
Summarize URLs, repurpose content, daily news digests, find competitors. Cost telemetry built in.
遠端 MCP 伺服器,提供四個由大型語言模型驅動的內容工具:網頁摘要、內容改寫、新聞摘要與競品查找。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/io.github.wzltmp%2Fmcp-automations/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"automations": {
"type": "http",
"url": "https://mcp-automations.fly.dev/mcp"
}
}
}A production-grade Model Context Protocol server in Python — four LLM-callable tools, two transports, deployed two different ways.
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.
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).
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):
Option B — remote HTTP (talks to the live Fly server, no local setup):
Then ask Claude something like "summarize https://www.paulgraham.com/greatwork.html in 3 bullets" — it'll call summarize_url automatically.
Requires Python 3.13. Needs ANTHROPIC_API_KEY and TAVILY_API_KEY in .env (see .env.example).
The same Python callables back all three entry points. The transport is just a wrapper.
models.Cost) — token counts and USD attached so a client doesn't have to re-derive it.UpstreamAPIError, EmptyLLMResponseError, ExtractionError each route differently in logs and the Streamlit UI.MCP_TRANSPORT=stdio|http env switch; HTTP host/port from env so the same image runs on Fly..github/workflows/ci.yml).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:
automations://catalog returns the tool list as JSON)daily_brief chains daily_digest + repurpose_content)Using all three is a signal of reading the spec, not just a quickstart.
✅ 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)
MIT.
來源:README.md,提交 b8c9b1d
Fetch a URL, extract clean article text, and return an N-bullet summary.
url必填n_bulletsRepurpose long-form text into ``twitter_thread``, ``linkedin_post``, or ``newsletter``.
text必填formatSearch the web for recent news on ``topic`` and return a digest with citations.
topic必填n_resultsIdentify ``n`` plausible competitors for a company at ``domain`` (e.g., 'stripe.com').
ndomain必填已滿足適用檢查項的 100%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
# 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"}}}'{ "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-..." } } }}{ "mcpServers": { "mcp-automations": { "url": "https://mcp-automations.fly.dev/mcp", "transport": "http" } }}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┌────────────────┐ 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) │ └──────────────────────┘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