Skip to main content
The MCP server exposes News API tools to any MCP-compatible client. It handles authentication, request formatting, and response formatting so the client can search articles, pull latest headlines and breaking news, look up an author’s work, resolve articles by URL or ID, browse sources, get aggregation counts, and check subscription/quota status. Every tool uses POST under the hood even though News API also exposes a GET variant of each endpoint — POST keeps API keys and queries out of access logs, avoids URL-length limits, and lets multi-value filters be sent as native JSON arrays. The server is open source. Source code, changelog, and issue tracker: Newscatcher/news-mcp.
Setting up with an AI agent? Paste this into Claude, Cursor, or any agent with web access, with your key filled in. The agent setup page is written for the agent: it picks the right path for the client it is running in and verifies the key with one call.

Before you start

  • News API key from platform.newscatcherapi.com/newsapi or you can use your existing API Key
  • MCP-compatible client (Claude, Cursor, VS Code, Windsurf, Zed, Warp, Gemini CLI, Roo Code, or any client that supports remote MCP)

Authentication

The MCP server resolves your API key from multiple sources, in this order (first match wins):
  1. api_token parameter set on the tool call itself
  2. ?apiToken=YOUR_KEY URL query parameter — used by some Agents which have no field for custom request headers
  3. x-api-token HTTP request header — recommended for every client that supports custom headers
  4. Authorization: Bearer <key> HTTP request header
  5. NEWS_API_KEY environment variable on the server host (self-hosted only)
Most client configurations use option 3 (the x-api-token header). Claude.ai and Claude Desktop use option 2 (the apiToken query parameter) through their connector URL. check_health is the only tool that does not require authentication — it’s a local liveness ping and never calls News API. To rotate your key, update your client configuration with the new key and restart the client.
When you pass the key through a --header flag (Claude Code, mcp-remote), use the header-name:value format with no space after the colon — for example x-api-token:YOUR_NEWS_API_KEY. A space or a missing colon is the most common reason a connection silently fails to authenticate.
Configure only one authentication method per client. If a request carries ?apiToken=, it wins over an x-api-token or Authorization header sent alongside it — and the key seen on the session’s first request is reused for the rest of that session. A stale key in the URL keeps returning 401 even when the header holds a valid one.
Your configuration file contains your API key in plain text. Treat it as a secret and do not share it or commit it to version control.
If you are rolling the MCP out to a team, issue a separate API key for it rather than reusing a production key. MCP traffic stays attributable in the dashboard, and you can rotate or revoke that key without touching anything in production. Ask our support@newscatcherapi.com to help you out.

Connect to Claude

1

Open connectors

Go to claude.ai/customize/connectors. Click + and select Add custom connector.
2

Configure connection

Fill in the Add custom connector dialog:
  • Name: News API
  • Remote MCP server URL:
3

Add and verify

Click Add. Verify that News API appears under Web in your connectors list.
4

Test connection

Open a new chat and ask Claude to run check_health. This tool needs no API key, so a successful response confirms the connection itself works — isolating connection problems from key problems.Then ask for get_subscription. That is the first call that actually uses your key, and it returns your plan, remaining calls, concurrency limit, and how far back you can search.Finally, try a real query. Name a time window, a result count, and the fields you want, so the response stays a readable size: “Get the latest headlines about renewable energy from the last 2 days, 10 results, just title, link, date and source.”

Connect to other clients

Install in CursorOr add to ~/.cursor/mcp.json manually:
The one-click button installs the URL with the literal YOUR_NEWS_API_KEY placeholder in it. Open ~/.cursor/mcp.json afterwards and replace it with your key, then restart Cursor.
Replace YOUR_NEWS_API_KEY with your key. Do not share it or commit it to version control.

Available tools

Each tool maps to a News API endpoint. For request and response schemas, see the API reference.
“Latest”/“most recent” needs sort_by="date" explicitly — every tool that takes sort_by defaults to "relevancy", not "date". There is a hard cap of 10,000 articles per query regardless of pagination; call get_aggregation_count on a broad or undated query first and time-chunk the date range if the count is high.

What you get by default

The MCP ships instructions that steer the assistant toward sensible parameters for whatever you asked, so in practice you rarely see the bare defaults. This table is the floor rather than the typical experience: it’s what you get when neither you nor the assistant sets the parameter, whether the value comes from the MCP or from News API itself. That’s what you need when a result comes back empty or in a shape you didn’t expect.
The default date range is the last 7 days. An undated query about something that happened three months ago comes back empty — that is the date window, not a coverage gap. Set from_ and to_ for anything historical, or say the range in your prompt. See Working with historical data.
Two more limits worth knowing:
  • There is a hard cap of 10,000 articles per query, regardless of pagination. If total_hits reads exactly 10000, the real count is likely higher — narrow the query or split the date range. See Retrieve more than 10k articles.
  • The upstream request timeout is 30 seconds. A 408 means: narrow the query, shorten the date range, or reduce page_size.

Clustered results by default

search_articles and get_latest_headlines return grouped results unless you ask for a flat list. Their defaults: Clustering regroups results, it does not shrink them: every matched article lands in a cluster and none are dropped, so one heavily syndicated story can otherwise fill a whole page with near-identical coverage. cluster_top_n_articles trims each cluster’s articles list while leaving cluster_size intact, so you always see how wide a story’s coverage actually is. Pass null for no cap. Turn clustering off when you want the articles themselves rather than grouped topic coverage — tracking a single outlet, checking whether a specific source covered a story, or paginating through a flat list:
With clustering on, the exact article or source you are after may fall outside the top three of its cluster and never reach the response. See Clustering news articles for how the grouping itself works.
Other tools are unaffected. get_breaking_news returns story clusters with its own API-native top_n_articles parameter, and search_by_author, search_by_link, and get_aggregation_count remain unclustered with a default page_size of 100.

Response fields

search_articles, get_latest_headlines, get_breaking_news, search_by_author, and search_by_link accept a fields parameter that trims each article to the keys you name. News API returns around 40 fields per article and the content body alone can push a 30-article call past 300 KB, so these tools default to a lean set instead:
To get the full article object, pass fields explicitly as an empty list ([]) or as null. Leaving fields out of the call does not do this — an omitted fields applies the lean default like any other call. Only an explicit [] or null opts out. Field names are validated against the real article schema before the request goes out, so a typo returns a corrective error instead of silently disappearing from the response. NLP subfields need a dotted path — nlp.theme, nlp.sentiment, nlp.ner_ORG — or pass nlp alone for the whole block. There is no top-level summary field: use description for the short lede or nlp.summary for the AI-generated summary.
For the boolean toggles — clustering_enabled, exclude_duplicates, include_nlp_data, include_translation_fields — an explicit null means the same as omitting the parameter: the tool’s own default applies. fields and cluster_top_n_articles are the two exceptions, where null carries its own meaning (all fields, and no per-cluster cap).

Response size cap

Article-returning tools (search_articles, get_latest_headlines, get_breaking_news, search_by_author) cap each response at 250,000 bytes. A broad request — fields=[] with a large page_size and no filters — would otherwise return a payload big enough to swamp the client’s context window. The cap drops trailing articles until the response fits; it never touches the content of the articles it keeps, and it does not fire on responses that already fit, which is nearly all of them. When it does trim, the response carries a response_capped block:
If you see it, narrow the query, name the fields you actually need instead of requesting the full object, lower page_size, or page through the results.

Keeping responses small

The cap is a backstop, not a budget. Every tool result lands in your client’s context window, and a response that fits comfortably under 250,000 bytes can still crowd out the conversation around it. The MCP already trims each article to the lean field set above, so the full content body and the large link arrays never cross the wire. What it does not trim is how many articles come back. Three levers, in order of impact:
  • page_size — the big one. 10 to 25 is usually right for an answer you are going to read, against a default of 50.
  • clustering_enabled=false — a flat list with no cluster wrapper, when you want the articles rather than the grouping.
  • include_nlp_data=false — drops the per-article nlp block when you are not using summaries, themes, sentiment, or entities.
You can also pass your own fields list to narrow the default set further, or widen it when you need something it leaves out — description, content, rank, or the sentiment and entity fields under nlp. None of this has to be named explicitly. Say what you want in the prompt and the client sets the parameters for you: “20 results, just title, link, date and source, skip the NLP data.”

Language and country codes

lang and countries take two-letter codes, never full names. This is the single most common cause of rejected requests. The MCP checks both before the call reaches News API and tells you what went wrong:
  • lang — NewsCatcher two-letter language codes: en, es, de. Chinese is cn (China) or tw (Taiwan); the ISO code zh is not accepted.
  • countries — ISO 3166-1 alpha-2: US, GB, DE. The United Kingdom is GB, not UK, and three-letter codes are not accepted.

Quota and rate limits

Every tool call except check_health is one billed News API call against your plan quota. An assistant working through an open-ended question can easily fire ten or twenty calls in a minute — one to gauge volume, several to page through results, more to follow up — so the meter moves faster here than it does with hand-written API calls. Ask for get_subscription at any point to see where you stand:
  • remaining_calls — calls left in the current billing period.
  • concurrent_calls — how many requests you can have in flight at once. Going over returns 429; back off and retry rather than repeating the request immediately.
  • historical_days — how far back your plan can search, which also tells the assistant which date ranges are worth trying at all.

Example prompts

Prompts work best when they name three things: a time window, a result count, and the fields you want back. These are written for Claude but work in any client. Track coverage of a company or brand
What’s been published about Siemens Energy in the last 3 days? English only, 20 results, just title, link, date and source.
See which stories got the widest pickup
Find coverage of the EU AI Act between 2026-08-20 and 2026-08-27, cluster it, and show me the five biggest clusters with their size and one representative headline each.
Read the tone of recent coverage
Search for articles about Ryanair from the last 7 days with NLP data on, 50 results, then list the 10 with the most negative content sentiment and link each one.
News API sorts by relevancy, date, or rank — not by sentiment — so the assistant fetches a page and ranks it itself. Keep the result count modest for this one, or filter server-side with content_sentiment_max. Follow a person or organization as an entity
Find articles from the last 14 days that name Christine Lagarde as a person entity, not just ones that mention the words. 25 results, title, link, date and source.
See Search by entity for what entity matching does differently. Measure how a topic trends over time
Give me daily article counts for “electric vehicle tariffs” from 2026-06-01 to 2026-08-31, then tell me which week spiked and what was behind it.
Catch what is breaking right now
What are the biggest breaking stories right now? Headlines and links only.
Check whether a publisher is indexed
Do you index reuters.com, ft.com and nikkei.com? Show me what coverage you have for each.
Pull details for an article you already have
Here’s a URL: https://example.com/some-article. Pull it and tell me the byline, publish date and word count.
If a result comes back enormous, or your client truncates it, add “10 results, just title, link, date and source” to the prompt. See Keeping responses small.

Troubleshooting

Restart your MCP client after updating the configuration. Most clients load MCP tools on startup and do not detect changes until restarted. A connector added through the Claude.ai or Claude Desktop Connectors screen needs no restart: open a new chat.
Verify your API key is valid by calling an authenticated endpoint:
If this returns a 401 error, your key is invalid. Check or reissue it at platform.newscatcherapi.com.
Tools return a JSON string on success — compact for the article and source tools, pretty-printed for get_subscription and check_health. A validation or upstream API error comes back as a string starting with Error: ...; an unhandled exception comes back as Unexpected error: .... The string names the specific reason.Both are returned as a successful tool result — the MCP isError flag stays false — so your client shows an ordinary, completed tool call and the assistant may describe the failure as though it were data. When an answer looks wrong, open the raw tool output and read the returned string.
Check whether the configured server URL still carries ?apiToken=.... The query parameter takes priority over the x-api-token header, so an old parameter silently wins over a newly added header. See Authentication.
Queries default to the last 7 days. If you asked about something older and got nothing back, add an explicit range — “from 2026-03-01 to 2026-03-31” — and check historical_days from get_subscription to confirm your plan reaches that far. See What you get by default.
You are over your plan’s concurrency limit. Call get_subscription and read concurrent_calls for the ceiling, then back off and retry rather than repeating the request immediately. See Quota and rate limits.
Three separate limits can shorten a response. Clustered results show at most cluster_top_n_articles articles per cluster (default 3) — cluster_size reports the true total. The response size cap drops trailing articles from oversized payloads and adds a response_capped block when it does. And News API returns a maximum of 10,000 articles per query regardless of pagination.
search_articles and get_latest_headlines default to 50 articles per call, wrapped in clusters, with the NLP block populated. Ask for fewer — “10 results, just title, link, date and source” — or set page_size, fields, clustering_enabled=false and include_nlp_data=false directly. See Keeping responses small.
Use mcp-remote to proxy the connection. Install Node.js, then use the npx configuration shown in the Other clients tab. Claude Desktop is not one of these clients: its Connectors screen takes the remote URL directly (see Connect to Claude).

See also

API reference

Full endpoint documentation and schemas

Quickstart

Make your first News API call in under five minutes

Advanced querying

Boolean operators, proximity search, and query syntax

Build search queries

Get better results from News API searches

GitHub repository

Server source code, changelog, and issues