The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MCP Automations listing page.
A production-grade Model Context Protocol server in Python — four LLM-callable tools, two transports, deployed two different ways.
| URL | |
|---|---|
| Source | https://github.com/wzltmp/mcp-automations |
| Playground (browser demo) | https://mcp-automations-5vgea2ynuyrvbzkcxm6yoh.streamlit.app/ |
| MCP HTTP server | https://mcp-automations.fly.dev/mcp |
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.
| Tool | Model | What it does |
|---|---|---|
summarize_url(url, n_bullets) | Haiku 4.5 | Fetch a page, extract clean text with trafilatura, return an N-bullet summary |
repurpose_content(text, format) | Sonnet 4.6 | Turn long-form text into a twitter thread, linkedin post, or newsletter |
daily_digest(topic, n_results) | Haiku 4.5 | Tavily news search + ~200-word digest with citations |
find_competitors(domain, n) | Sonnet 4.6 | Identify 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).
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.