Skip to main content
Glama
Claudefarid

bangla-news-radar

by Claudefarid
README.md
# bangla-news-radar

Monitor Bangladeshi newspapers from your AI assistant. Ask what the press is saying about a
brand, a person, or a topic — and get back real headlines from real papers, in Bengali or English.

An [MCP](https://modelcontextprotocol.io/) server built with [FastMCP](https://github.com/PrefectHQ/fastmcp).

> **Unofficial.** Not affiliated with any of the newspapers listed. It reads the public RSS feeds
> they already publish for syndication.

## Why

There is no easy way to ask *"which Bangladeshi papers are covering this right now?"* — you open
five tabs and scroll. This turns that into one question.

Useful for PR and brand monitoring, competitor tracking, or seeing how differently outlets frame
the same story.

## Tools

| Tool | What it does |
|---|---|
| `scan_news(keyword, sources, limit)` | Latest articles across every paper, newest first. Filter by keyword to spot mentions. |
| `compare_coverage(topic)` | Which papers are running a story — **and which are staying silent**. |
| `deep_search(query, limit)` | Search Prothom Alo's full archive (hundreds of thousands of articles). |
| `list_sources()` | Which papers are covered, and which are excluded and why. |

Keyword matching is case-insensitive and works in Bengali.

## Sources

| Paper | Language | Coverage |
|---|---|---|
| প্রথম আলো | Bengali | Recent feed + full archive search |
| রাইজিংবিডি | Bengali | Recent feed |
| জাগো নিউজ ২৪ | Bengali | Recent feed |
| The Daily Star | English | Business, Sports, Opinion sections |

Around 250+ current articles per scan, fetched in parallel.

**Deliberately excluded:** Jugantor, Kaler Kantho and bdnews24 return HTTP 403 to automated
requests. That is their choice and this tool respects it — no spoofed headers, no scraping
around the block.

**No working feed found:** Samakal (`/feed` serves HTML), Ittefaq, Bangla Tribune.

## Install

Requires [uv](https://docs.astral.sh/uv/) and Python 3.12+.

```bash
git clone https://github.com/Claudefarid/bangla-news-radar.git
cd bangla-news-radar
uv sync
uv run fastmcp install claude-code server.py:mcp
```

Restart your client, then ask it things like *"Which Bangladeshi papers wrote about bKash this
week?"* No API key or login required.

Verify with `uv run python test_server.py`.

## Notes for anyone building something similar

- **The Daily Star's site-wide `/rss.xml` is stale** — its newest item was over three months old
  when this was written. The per-section feeds (`/business/rss.xml`, etc.) are current. Check
  freshness before trusting any feed.
- **Only Prothom Alo exposes a search API** (it runs on Quintype, at `/api/v1/search`). The other
  papers offer feeds only, which is why `scan_news` searches within recent articles while
  `deep_search` reaches one paper's archive. The tool descriptions say so, so the model doesn't
  imply archive-wide coverage it does not have.
- **The Daily Star puts HTML inside its `<title>` tags** — headlines arrive wrapped in an
  unescaped `<a href="...">`. ElementTree parses that anchor as a child element, so
  `findtext("title")` returns an empty string rather than raising. Every Daily Star headline was
  blank, and since an empty headline matches no keyword, `compare_coverage` reported the paper as
  *not covering* topics it was covering all along. Read descendant text with
  `"".join(element.itertext())`. A silent parse failure that looks like a real editorial finding
  is the worst kind of bug in a monitoring tool.
- Feeds are fetched concurrently and **one dead feed cannot sink a scan** — failures come back in
  an `unreachable` field instead of raising.

## Please be considerate

Headlines and summaries are the copyrighted work of the publishers. This is for monitoring,
research and summarization — not republication. Requests identify themselves by User-Agent.
Keep your volume sane.

## License

MIT — see [LICENSE](LICENSE). Covers this code only, not any content retrieved through it.

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

scan_news and compare_coverage both deal with current coverage, but one returns article lists while the other groups coverage by newspaper, so their purposes are distinct. deep_search and list_sources are clearly separate. The only minor ambiguity is whether a user wants raw articles or comparative framing.

Naming Consistency4/5

Most tool names follow a verb_noun snake_case pattern: scan_news, compare_coverage, list_sources. deep_search is a minor stylistic deviation but is still readable and uses the same lowercase underscore convention. Overall the naming is predictable and consistent enough for an agent.

Tool Count5/5

Four tools is well-scoped for a news monitoring server: current scanning, cross-paper comparison, deep archive search, and source listing. Each tool earns its place and there is no redundant or decorative surface area.

Completeness4/5

The core workflows of monitoring, comparing, and searching coverage are covered. The main gap is the lack of a tool to fetch full article content or retrieve a specific article by ID, but this is workable given the headline/summary focus of the server.

Maintenance

ActivityMaintained
ResponsivenessNo issues