Skip to main content
Glama
README.md
# dw-mcp ๐Ÿ“ฐ

mcp-name: io.github.mohammad-abbasi-sh/dw-mcp

Unofficial **read-only** MCP server for **[dw.com](https://www.dw.com)** โ€” Deutsche Welle news in 31 languages from DW's official sitemaps: latest headlines, keyword search over recent headlines, latest articles, full article text and topic pages. No key, no login. No key, no login.

> Built by Mohammad Abbasi as part of the "Germany MCP factory". Not affiliated with dw.com.

## For AI agents

Add to your MCP client config (stdio):

```json
{
  "mcpServers": {
    "dw": {
      "command": "uvx",
      "args": ["dw-mcp==0.1.0"]
    }
  }
}
```

Or run locally: `python -m dw_mcp.server` (needs `mcp<2`, `httpx`).

## Tools

| Tool | Description |
|------|-------------|
| `dw_headlines` | Latest DW headlines โ€” `language` (e.g. "en", "de", "fa-ir"), `limit` 1..50 |
| `dw_search_news` | Keyword search over the latest DW headlines โ€” `query`, `language`, `limit` 1..50 |
| `dw_latest_articles` | Latest DW articles by publication time โ€” `language`, `limit` 1..50 |
| `dw_get_article` | Full text of one DW article โ€” `url` (a dw.com article link) |
| `dw_topics` | DW topic pages matching a word โ€” `query`, `language`, `limit` 1..50 |
| `dw_health` | Reachability probe (ok / blocked / error) โ€” one polite request |

## Notes

- All data comes from **DW's official sitemaps** (free, no key, no login).
- DW has **no working RSS feeds any more** โ€” every `/rss/` path returns 404 (verified 2026-11-10) โ€” and its site search is gone, so headlines come from the news sitemaps and `dw_search_news` filters the latest ~50 headlines (not the full archive).
- Persian is two editions: `fa-ir` (Iran) and `fa-af` (Afghanistan/Dari); plain `fa` does not exist.
- Article bodies are extracted from DW's server-rendered pages (JSON-LD headline/date + cleaned `<p>` text); live blogs and video pages may return little or no body text.

Tests: 22/22 green (15 offline + 7 live, 2026-11-10).

## Development

```bash
python3 -m venv .venv && .venv/bin/pip install "mcp<2" httpx pytest
.venv/bin/pip install -e .
.venv/bin/python -m pytest tests/ -q
```

## License

MIT

---

Built by [Mohammad Abbasi](https://github.com/mohammad-abbasi-sh) โ€” [Almanibama](https://almanibama.ir) ยท [mabbasi.ir](https://mabbasi.ir)

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

dw_get_article, dw_topics, and dw_health are clearly distinct, but dw_headlines, dw_latest_articles, and dw_search_news all return recent items in a language and differ mainly in source (news sitemap vs article feed vs keyword filter). The descriptions do draw those lines explicitly (search is limited to the ~50 sitemap items), so confusion is limited but not zero.

Naming Consistency4/5

All names share a dw_ prefix and snake_case with a predictable noun/verb structure (dw_get_article, dw_search_news, dw_latest_articles). dw_headlines, dw_topics, and dw_health omit the verb, which is a minor deviation rather than an inconsistency.

Tool Count5/5

Six tools is well-scoped for a news-reading server: listing, searching, fetching full text, browsing topics, and a connectivity probe. Each tool has a clear, non-redundant job with no filler.

Completeness3/5

The core read path (list headlines/articles โ†’ fetch full article) is covered, but there are notable dead ends: dw_topics returns topic pages with no tool to list articles within a topic, and search is limited to the ~50-item sitemap with no date-range or archive option. A listing-by-topic or date-filtered search would round out the surface.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues