NewsAPI MCP Server
by ranydone
README.md
# NewsAPI MCP Server + Frontend POC
Two components:
* `mcp\_server.py` — MCP server (stdio transport), connects Claude to NewsAPI
* `frontend.html` — Standalone browser frontend, no install needed
\---
## Step 1 — Get your free NewsAPI key
1. Go to https://newsapi.org/register
2. Fill in name + email — takes 30 seconds
3. Copy the API key shown on the dashboard
4. 7ac03af867104a6096d1e320f49d5896
\---
## Step 2 — Install dependencies
```bash
pip install mcp httpx
```
That's all. No other packages needed.
\---
## Step 3 — Run the MCP server
```bash
# Set your key
export NEWS\_API\_KEY=your\_actual\_key\_here
# Run the server
python mcp\_server.py
```
The server listens on stdio (standard in/out). You'll see no output —
that's correct. It's waiting for an MCP client to connect.
To test it works:
```bash
NEWS\_API\_KEY=your\_key python -c "
import asyncio, json, sys
sys.path.insert(0, '.')
import mcp\_server
print('Server module loaded OK — 4 tools registered')
"
```
\---
## Step 4 — Open the frontend
Just double-click `frontend.html` in your file manager,
OR open it in your browser with:
```bash
# macOS
open frontend.html
# Linux
xdg-open frontend.html
# Windows
start frontend.html
```
Then:
1. Paste your NewsAPI key into the sidebar
2. Select a tool (search\_news / get\_top\_headlines / get\_sources / get\_tech\_briefing)
3. Enter a query and click Run
\---
## Step 5 — Connect to Claude Desktop (optional)
Find your Claude Desktop config file:
* macOS: \~/Library/Application Support/Claude/claude\_desktop\_config.json
* Windows: %APPDATA%\\Claude\\claude\_desktop\_config.json
Add this block (replace paths and key):
```json
{
"mcpServers": {
"newsapi": {
"command": "python",
"args": \["/full/path/to/newsapi-mcp/mcp\_server.py"],
"env": {
"NEWS\_API\_KEY": "your\_actual\_key\_here"
}
}
}
}
```
Restart Claude Desktop. You'll see "newsapi" appear in the tools menu.
Try asking Claude:
* "Search for the latest news on ServiceNow MCP announcements"
* "Get top technology headlines in the Netherlands"
* "Give me an enterprise AI briefing from the last week"
\---
## MCP Tools Reference
|Tool|Description|Key params|
|-|-|-|
|search\_news|Full-text search, 150k+ sources, last 5 years|query, language, sort\_by, page\_size|
|get\_top\_headlines|Live breaking news|country, category, query|
|get\_sources|List available publishers|category, language, country|
|get\_tech\_briefing|Curated preset briefings|topic (6 presets), custom\_query|
### Briefing topic presets
|Preset|Query used|
|-|-|
|servicenow|ServiceNow OR "service now" ITSM platform|
|enterprise\_architecture|enterprise architecture OR LeanIX OR TOGAF OR IT4IT|
|itsm|ITSM OR "IT service management" OR helpdesk ticketing|
|ai\_enterprise|enterprise AI OR "generative AI" OR LLM OR MCP|
|heineken\_beverage|Heineken OR "beer market" OR FMCG beverage|
|cloud\_azure|Microsoft Azure OR "Azure West Europe" OR cloud infra|
\---
## Free tier limits
* 100 requests/day on the free developer plan
* Results limited to articles from the last 30 days (upgrade for 5 years)
* No commercial use on free tier
\---
## Project structure
```
newsapi-mcp/
├── mcp\_server.py ← MCP server (run this on terminal)
├── frontend.html ← Browser UI (open directly, no server needed)
└── README.md
```
\---
## Extending to other APIs
The pattern is the same for any REST API:
1. Add a new `Tool(name=..., inputSchema=...)` in `list\_tools()`
2. Add a handler block in `call\_tool()` that does `await newsapi\_get(...)` or any httpx call
3. Return `\[TextContent(type="text", text=json.dumps(result))]`
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues