MCP Automations

io.github.wzltmpPublished by GitHub account wzltmpv0.1.0Updated Nov 2, 2026

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

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingMedia & Design

Overview

AI-generated overview

Remote MCP server with four LLM-backed content tools: URL summarization, content repurposing, news digests and competitor lookup.

What you can do
  • Fetch a URL, extract clean article text and return an N-bullet summary
  • Repurpose long-form text into a Twitter thread, LinkedIn post or newsletter
  • Search the web for recent news on a topic and return a cited digest
  • Identify plausible competitors for a company from its domain
  • Read a catalog resource listing the tools and use a daily brief prompt that chains digest and repurposing
When to use it
Useful when you want quick article summaries, social or newsletter drafts from existing text, topic news roundups with citations, or a first-pass competitor list, without building your own LLM and search plumbing.
Requirements
A remote endpoint is provided, so no local setup is needed for the hosted option. Running it locally needs Python 3.13, the project dependencies, and the ANTHROPIC_API_KEY and TAVILY_API_KEY environment variables; network access to Anthropic and Tavily is required either way.
Before you install
The hosted endpoint is a public demo with no declared authentication, so anything you send passes through a third party. Content and topics go to Anthropic and Tavily for processing. Local runs need your own Anthropic and Tavily API keys, and every call spends money on those paid APIs; the README notes per-session and monthly spend caps only for the author's own deployment.

Installation

In SourceWeft

  1. Open MCP Automations in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.wzltmp%2Fmcp-automations/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "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.

Source: README.md at commit b8c9b1d

Tools

4

summarize_url

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

Parametersurlrequiredn_bullets

repurpose_content

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

Parameterstextrequiredformat

daily_digest

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

Parameterstopicrequiredn_results

find_competitors

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

Parametersndomainrequired

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts