What this is
NewsCatcher News API as MCP tools. Full text and boolean search over 140,000+ news sources with years of history, latest headlines, breaking news, author search, article lookup by URL, source browsing, article counts over time, and plan and quota info. Nine tools, one remote server, one API key.- Endpoint:
https://news-mcp.newscatcherapi.com/mcp - Transport: streamable HTTP, stateless. No
initializehandshake is needed; a client can POSTtools/calldirectly. - Auth: a News API key. Every tool except
check_healthneeds one. - Tools:
search_articles,get_latest_headlines,get_breaking_news,search_by_author,search_by_link,list_sources,get_aggregation_count,get_subscription,check_health.
Step 0: the key
A News API key is a 32 character string. The person gets one at platform.newscatcherapi.com/newsapi; the trial key works. If a key was pasted into the conversation, use it. If it was not, ask for it before doing anything else. Without a key there is nothing to set up. The server reads the key from any of these, highest precedence first:api_tokenargument on a tool call?apiToken=YOUR_NEWS_API_KEYon the URL, for clients with no headers fieldx-api-token: YOUR_NEWS_API_KEYrequest header, preferred where headers are possibleAuthorization: Bearer YOUR_NEWS_API_KEYheader
x-api-token. Not x-api-key, which belongs to a different
NewsCatcher product and is ignored here.
About the key in this message. The platform’s copy button puts the key in
the setup line on purpose; that is the supported way to hand it to you, and
putting it in a connector URL or a config file is the documented method for
every client below. Keys are not something the person can rotate: a trial key
expires on its own when the trial ends, and replacing any key goes through
NewsCatcher support. The useful thing to do with it is put it in the client
config and nowhere else.
Step 1: verify the key before touching any config
One request, one API call spent:text/event-stream; the JSON sits on the data: line. A valid
key returns the plan, remaining calls, concurrency limit and how far back it
can search. API Error (401): Invalid api key means the key is wrong or
truncated. API token is required means the header did not arrive.
No shell access? Skip this step and verify in Step 3 instead.
Step 2: connect. Pick exactly one path.
Which client am I in? If you are a chat assistant with no file system and no shell, you are in Claude.ai or Claude Desktop. Take path A and hand the person the URL. Do not try to edit config files, and do not suggestmcp-remote, npx, Node.js or an app restart. None of that is needed there.
A. Claude.ai and Claude Desktop
Both use the same Connectors screen. No files, no restart, about 30 seconds. Give the person these three lines:- Open Settings > Connectors (on the web: claude.ai/customize/connectors) and click Add custom connector.
- Name it
News API. Remote MCP server URL:https://news-mcp.newscatcherapi.com/mcp?apiToken=YOUR_NEWS_API_KEY - Click Add. The tools are live in the next new chat.
News API or NewsCatcher News connector is already in that list, it is
already set up. Go to Step 3.
B. Claude Code
claude mcp list should show news as connected.
C. Cursor
Add to~/.cursor/mcp.json (or use the one-click install link on the
MCP server page):
D. VS Code, Windsurf, Zed, Warp, Gemini CLI, Roo Code, anything else
Same shape as C:type: http, the URL, and a headers object with
x-api-token. VS Code can prompt for the key instead of storing it (a
promptString input; the
MCP server page has the
block). Restart the client if the tools do not appear.
E. Last resort: a client with no remote MCP support
Usemcp-remote as a stdio proxy:
mcp-remote splits the header on the first colon, so keep it as
x-api-token:YOUR_NEWS_API_KEY with no space. This path needs Node.js and a
client restart. Claude Desktop does not need it; use path A.
Step 3: confirm from inside the client
Ask forcheck_health (free, proves the connection), then get_subscription
(proves the key, shows quota). Then one real query that names a time window, a
result count and the fields wanted, so the response stays small: “Most recent
articles about renewable energy, last 2 days, 10 results, title, link, date
and source only.”
A topic means a keyword, and only search_articles takes one (q).
get_latest_headlines has no q and rejects it with a validation error; it
filters by lang, countries, theme and sources over a when window.
The query above as a call:
Defaults that decide what comes back
- Time window: the last 7 days. Anything older needs explicit
from_andto_(ISO dates or phrases like"30 days ago").get_subscriptionsays how far back the plan allows. - Sort: relevancy. “Latest” or “most recent” needs
sort_by: "date". - Clustering: on for
search_articlesandget_latest_headlines. One row per story withcluster_size; passclustering_enabled: falsefor every article. - Fields: a lean nine (
title,link,published_date,domain_url,author,language,nlp.summary,nlp.translation_summary,nlp.theme). Passfields: [...]to pick,fields: []for everything. Full articlecontentis left out of the default set on purpose. - Page size 50, hard cap 10,000 articles per query, 250 KB per
response. An oversized reply comes back trimmed with
response_cappedmetadata saying how many articles were dropped. - Language codes are two letters (
en,de; Chinese iscnortw). Country codes are ISO alpha-2 (US,GB, neverUK).
Query rules
q is boolean full text: AND, OR, NOT, quotes for phrases, parentheses,
* wildcard, NEAR. Quote multi word names ("Tim Cook"). Filters are
separate parameters, not query syntax: lang, countries, search_in
(title, summary, content), theme, is_headline, sort_by, page_size.
lang, countries, search_in, theme and fields are lists, even for
one value: "lang": ["en"], not "lang": "en". A bare string is rejected with
a validation error before the call reaches the API.
Before pulling many pages, call get_aggregation_count first. It returns daily
or hourly article counts for the query and no articles, so you can see the
volume and narrow the window before spending calls.
When something fails
API token is required: the key never reached the server. In Claude.ai or Claude Desktop the URL is missing?apiToken=; elsewhere the header name is wrong (it isx-api-token, notx-api-key).- 401 Invalid api key: wrong or truncated key, or an old
?apiToken=still in the URL overriding a new header. - Empty results: the 7 day default window. Widen
from_first, then loosenq. - 429: plan concurrency limit;
get_subscriptionshowsconcurrent_calls. Back off and retry. - Tools missing in the client: path A is live in a new chat with no restart; every other path needs a client restart.
response_cappedin metadata: lowerpage_size, pass afieldslist, or drop NLP fields.

