finance-pulse
The Finance Pulse MCP server lets MCP clients (Claude, Cursor, etc.) query structured, sourced financial news — one-sentence statements with sentiment, importance, tickers and sources — grouped into topics and themes, over a rolling 62-day window.
search_statements — search statements newest-first by symbol, sector, theme, topic, sentiment, source type and minimum importance, with time ranges and cursor paging.
trending — see the developments most outlets are reporting now (last 2 hours) or the top story of each 2-hour slot over 7 days.
find_topics — list developments for a symbol, sector or theme, sorted by velocity, size, recency or oldest.
get_topic — pull one development in full: counts, its mix of news/analysis/reddit statements, and its 20 newest statements with outlets.
sentiment_series — get daily or hourly news volume and sentiment (counts plus a bullish-bearish score) for one symbol, sector, theme or topic.
screen — rank symbols (optionally only equities/ETFs) or the 11 GICS sectors by news attention and its change versus the previous period.
themes — list the standing subjects with their volume, sources and sentiment, optionally filtered to those a symbol or sector appears in.
reference — fetch the data window, known incidents, theme ids and the accepted filter values.
Provides a metadata tool that returns the data window, known data incidents, theme ids, and accepted filter values.
Can query news statements about Nvidia, including key facts with sources and sentiment analysis.
Requires a RapidAPI key subscribed to Finance Pulse, and all tools make API requests through the RapidAPI platform.
Topic details include reddit statements mixed with news and analysis statements.
Can retrieve Tesla's daily news sentiment and volume for a requested time range.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@finance-pulseWhat is the news saying about Nvidia today? Key facts with sources."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Finance Pulse: Python client and MCP server
Financial news as structured, sourced data. Finance Pulse reads financial news as it is published and turns every article into statements: one-sentence facts with sentiment, importance, tickers, sector, source and publication time. Statements about the same development are clustered into topics, and topics into 19 themes. fintopic.news is a front page built on the same API.
The same setup guide, with the other guides and the API reference, is on the docs site: Use Finance Pulse from Claude, Cursor or Python.
This package gives you two ways to use it:
a Python client for scripts, notebooks and pipelines;
an MCP server, so Claude, Cursor and other MCP clients can query the news directly.
You need a RapidAPI key that is subscribed to Finance Pulse. Create a RapidAPI account, open the
plans page and subscribe to a plan: Basic is free and is
enough to try everything below. Then copy your X-RapidAPI-Key from the API's page on RapidAPI (the endpoint playground shows it). A key that
is not subscribed to a plan is answered with 403.
Use it from Claude or Cursor (MCP)
The server runs with uvx, which is part of uv:
install uv first. The package itself needs no separate install.
Claude Code
claude mcp add --env RAPIDAPI_KEY=YOUR_RAPIDAPI_KEY --transport stdio finance-pulse -- uvx finance-pulseClaude Desktop and Cursor
Claude Desktop: Settings > Developer > Edit Config opens
claude_desktop_config.json(macOS~/Library/Application Support/Claude/, Windows%APPDATA%\Claude\). Quit and restart Claude Desktop completely afterwards.Cursor:
~/.cursor/mcp.json
{
"mcpServers": {
"finance-pulse": {
"command": "uvx",
"args": ["finance-pulse"],
"env": { "RAPIDAPI_KEY": "YOUR_RAPIDAPI_KEY" }
}
}
}If the server does not start in Claude Desktop, it usually cannot find uvx: put the full path (the output of
which uvx, or where uvx on Windows) in "command".
uvx keeps the version it installed first. To move to a new release, use finance-pulse@latest in place of
finance-pulse once, or run uv cache clean finance-pulse.
Then ask things like:
"What is the news saying about Nvidia today? Only the key facts, with sources."
"Which tickers are suddenly getting more coverage than yesterday?"
"What are the top developing stories in Energy, and how did the biggest one grow?"
"Show me Tesla's daily news sentiment for the last two weeks."
Tools
Tool | What it does |
| Statements by symbol, sector, theme, topic, sentiment, minimum importance and time range |
| The developments most outlets are reporting now, or per 2-hour slot over 7 days |
| Developments for a symbol, sector or theme, by velocity, size or recency |
| One development: counts, its mix of news, analysis and reddit statements, newest statements with their outlets |
| Daily or hourly news volume and sentiment for a symbol, sector, theme or topic |
| Symbols (optionally only equities and ETFs) or sectors ranked by news attention and its change against the previous period |
| The standing subjects with their volume and sentiment, optionally only those a symbol or sector appears in |
| The data window, known data incidents, theme ids and accepted filter values |
Each tool call is one API request. Results are trimmed and default to small pages.
Related MCP server: NewsAgent Data MCP server
Use it from Python
pip install finance-pulse
export RAPIDAPI_KEY=YOUR_RAPIDAPI_KEYThe MCP SDK is installed with the package even if you only use the client.
from datetime import datetime, timedelta, timezone
from finance_pulse import FinancePulse
fp = FinancePulse() # or FinancePulse("YOUR_RAPIDAPI_KEY")
# The newest key facts about a ticker
for s in fp.statements(symbol="NVDA", importance_min="high", limit=5)["data"]:
print(s["published_at"][:16], s["sentiment"], s["statement"], f"({s['source_domain']})")
# Which tickers are suddenly in the news (kind= leaves out rates, central banks, countries, ...)
for row in fp.symbols(period="d", sort="change", kind=["equity", "etf"], limit=10)["data"]:
print(row["id"], row["mentions"], row["change"])
# Daily news volume and sentiment, last two weeks
since = (datetime.now(timezone.utc) - timedelta(days=14)).strftime("%Y-%m-%dT00:00:00Z")
for b in fp.series(symbol="TSLA", interval="day", since=since)["data"]["buckets"]:
print(b["t"][:10], b["count"], b["score"])
# What most outlets are reporting right now
for t in fp.trending(kind="live")["data"][:10]:
print(t["sources"], "sources:", t["name"])Every method returns the API's JSON unchanged: {"data": ..., "next_cursor": ..., "snapshot": {...}}. The
snapshot block says how fresh the data is.
Follow the news without missing anything
poll_feed yields every new statement in the order it entered the API and keeps its position in a file, so it
survives restarts: after a crash nothing is skipped and only the statement you were working on is delivered
again. The first run, with no saved position, starts 24 hours back, and the position is first stored once that
first page has been handled. After a long pause the poller reads the whole backlog since its saved position, one
request per 100 statements; delete the cursor file to start 24 hours back instead.
for s in fp.poll_feed(sector="Energy", importance_min="high", cursor_file="energy.cursor.json"):
print(s["indexed_at"], s["statement"], s["source_url"])The API builds new data about every 2.5 minutes, so the poller waits 150 seconds between polls by default. Timeouts and server errors are retried; a used-up quota (429) is raised.
More than one page
rows = list(fp.iter_statements(symbol=["NVDA", "AMD"], importance_min="medium", max_items=1000))Each page of 100 is one request. Without max_items it stops after 500 rows; max_items=None reads to the end
of the window.
Errors
from finance_pulse import FinancePulseError
try:
fp.statements(symbol="S&P")
except FinancePulseError as e:
print(e.status, e.title, e.detail, e.param)
# 400 | Invalid symbol | 'S&P' is not a ticker | symbolA 429 means the plan's request quota or rate limit is used up. Timeouts and network failures are raised as
FinancePulseError too, with status 0; e.transient is true for those and for 5xx answers.
Methods
Method | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The package targets Finance Pulse API 2.0 (the /v2 endpoints). Parameters and response fields are documented in
the API reference, and the
guides show complete worked examples.
What the data is, and is not
Symbols are canonical entity codes with a kind. Equities and ETFs appear under their ticker (
NVDA,0700.HK); indices, rates, FX, crypto, commodities and organisations under short codes (SPX,US10Y,USD,BTC,GOLD,FED). Usekind=["equity", "etf"]for tradable tickers only.Sentiment describes the statement, not a price forecast. A symbol's sentiment is the count of its statements' labels.
The window is a rolling 62 days.
meta()lists known outages and delays underincidents.
See the docs for the full list of caveats.
Development
pip install -e ".[dev]"
pytestThe tests use canned responses and make no API requests.
Releasing
Set the new version in
src/finance_pulse/__init__.pyand inserver.json(two places).Build and upload to PyPI (
uv build && uv publish). From GitHub Actions, usepypa/gh-action-pypi-publishv1.14.2 or newer: older versions reject the metadata version this build writes.Only then run
mcp-publisher publish: the registry verifies the package on PyPI (it looks for themcp-nameline in its description), so the release must be there first.
Licence
MIT
Available Tools
8 toolsfind_topicsFind developmentsBRead-onlyIdempotent
List developments for a symbol, sector or theme. sort=velocity: most statements in the last 24 hours; size: most statements in the window; recent: latest statement first. symbol: comma-separate several (OR).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | velocity | |
| limit | No | How many to return, 1-100 | |
| cursor | No | next_cursor from the previous call, for the next page | |
| sector | No | GICS sector | |
| symbol | No | Ticker or entity code, e.g. NVDA. Comma-separate several (OR), up to 10. | |
| theme_id | No | Theme id from `themes` or `reference` | |
| min_statements | No | Leave out developments with fewer statements |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds the sort semantics (velocity = 24h statements, size = window statements) which is useful behavioral context, but says nothing about result volume, pagination, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, all front-loaded: purpose first, then the sort semantics, then the symbol syntax. No filler sentences and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter discovery tool with no output schema, the description covers purpose and sorting but leaves pagination (cursor), result shape, and the relationship to sibling search tools unexplained. Adequate to make a call, incomplete for calling it well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the baseline is 3, but the description genuinely adds meaning the schema lacks: the sort enum values (recent/size/velocity) are undocumented in the schema and are explained here, and the comma-separated OR behavior for symbol is clarified. It omits the 'oldest' sort value and says nothing about limit, cursor, or min_statements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('developments') with the three scoping axes (symbol, sector, theme). It does not differentiate itself from the sibling get_topic, which reads like the singular counterpart, so an agent cannot fully disambiguate from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this tool versus search_statements, trending, or get_topic, and no exclusions or prerequisites. The sort explanations describe behavior of the call, not when the call is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topicGet one developmentARead-onlyIdempotent
One development in full: its counts, how many of its statements come from news, speculative analysis and reddit (source_mix), and its 20 newest statements, each with its outlet. For older statements call search_statements with topic_id and the returned statements_cursor as cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Topic (development) id, as returned in topic_id or topics[].id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description goes beyond them by disclosing the return shape (counts, source_mix breakdown, 20 statements with outlets) and the pagination mechanism via statements_cursor, which is genuinely useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the primary scope (what is returned) is front-loaded before the fallback routing to search_statements. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it names counts, the source_mix composition, the 20-statement cap, and the cursor for deeper retrieval. For a single-param read tool this is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, which already explains topic_id and where it comes from. The description only implies the topic via 'one development' and adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (retrieve one development in full) and enumerates what comes back: counts, source_mix, and the 20 newest statements. It also names the sibling (search_statements) it is not, so an agent can separate it from the other topic tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes this tool to the 20 newest statements and routes older-statement retrieval to search_statements, including the exact arguments to pass (topic_id and the returned statements_cursor). The when-to-use and when-to-use-something-else conditions are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
referenceData window, themes and accepted valuesARead-onlyIdempotent
The data's window and size, known data incidents (outages, delays), the themes with their ids, and the accepted sector, sentiment, importance, source-type and entity-kind values. Call once; it rarely changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond them: the data is stable and should be fetched once rather than repeatedly. It does not mention response shape, but with no output schema this is a modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the enumerated contents, then the operational hint. The first sentence is a dense list but every element earns its place. No wasted preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what comes back, and it does list the returned categories (window/size, incidents, theme ids, accepted enum values). A caller knows what to expect. It could be more explicit about the structure of those values, but it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter-level confusion is possible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete contents returned: the data window and size, known incidents, themes with their ids, and accepted enum values. That is far more specific than the generic name 'reference'. It does not explicitly distinguish itself from the sibling 'themes', which plausibly overlaps on the theme list, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Call once; it rarely changes,' which addresses call frequency and caching rather than when to choose this tool over siblings like 'themes' or 'find_topics'. Usage is implied (consult for available enum values) but no alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenScreen symbols or sectors by news attentionARead-onlyIdempotent
Rank symbols (or the 11 GICS sectors) by news attention. Use for "which tickers are suddenly in the news".
period: d = last 24 hours, w = last 7 days, window = everything held. sort=change ranks by the rise in mentions against the previous period (not available for period=window; use sort=mentions there). Each row: mentions, topics, sources (distinct outlets), sentiment counts, score and change. Only for rank=symbols: sector limits the screen to one sector; min_mentions drops rarely mentioned codes; entity_kinds narrows the kind of entity, comma-separated, from: equity, etf, index, rate, fx, crypto, commodity, org, private, country. Without it the list mixes companies with rates, commodities and central banks; pass "equity,etf" for tradable tickers.
| Name | Required | Description | Default |
|---|---|---|---|
| rank | No | symbols | |
| sort | No | change | |
| limit | No | How many rows to return | |
| period | No | d = 24 hours, w = 7 days, window = everything held | d |
| sector | No | GICS sector | |
| entity_kinds | No | Comma-separated entity kinds, e.g. "equity,etf" | |
| min_mentions | No | Leave out codes with fewer mentions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the description's job is supplementary — and it delivers: it enumerates the returned row fields (mentions, topics, sources, sentiment counts, score, change) and warns that omitting entity_kinds mixes companies with rates, commodities and central banks. This is meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and a quotable use case before diving into parameter nuance. Dense but largely waste-free; the parameter detail could be tightened marginally, and the second sentence is a slightly redundant gloss on the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter filtering tool with no output schema, the description anticipates the important gaps: it lists the row fields that will be returned, explains the period windows, and flags the entity_kinds default mixing behavior. Only minor omissions remain (e.g. what 'score' represents, limit interaction).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the description compensates for the gaps well: it documents the full entity_kinds vocabulary (equity, etf, index, rate, fx, crypto, commodity, org, private, country) that the schema only shows as a bare string, states that sector applies only when rank=symbols, and explains the sort=change incompatibility with period=window. These are cross-parameter constraints the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource: "Rank symbols (or the 11 GICS sectors) by news attention," and adds a concrete use case ("which tickers are suddenly in the news"). It is clearly distinguished from siblings like get_topic or sentiment_series, though the relationship to the closest sibling `trending` is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it (sudden news attention on tickers) and conditional guidance — sort=change is unavailable for period=window, and entity_kinds should be set to "equity,etf" for tradable tickers. No explicit when-not or named-alternative routing to siblings, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_statementsSearch news statementsARead-onlyIdempotent
Search extracted news statements, newest first. Use for "what is the news saying about X".
symbol: ticker or entity code, e.g. NVDA; comma-separate several (OR), no spaces inside a code. importance_min=high keeps only key facts. source_type=news leaves out speculative analysis and reddit. since/until: ISO-8601 times on the article's publication time, e.g. 2026-10-01T00:00:00Z. limit: 1-100. Pass next_cursor back as cursor for the next page (null means no more).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, 1-100 | |
| since | No | ISO-8601 time, e.g. 2026-10-01T00:00:00Z | |
| until | No | ISO-8601 time, e.g. 2026-10-01T00:00:00Z | |
| cursor | No | next_cursor from the previous call, for the next page | |
| sector | No | GICS sector | |
| symbol | No | Ticker or entity code, e.g. NVDA. Comma-separate several (OR), up to 10. | |
| theme_id | No | Theme id from `themes` or `reference` | |
| topic_id | No | Topic (development) id, as returned in topic_id or topics[].id | |
| sentiment | No | Only statements with this sentiment | |
| source_type | No | news leaves out speculative analysis and reddit | |
| importance_min | No | Minimum importance; high = key facts only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world and non-destructive, so safety is covered. The description adds real behavioral context beyond that: results are newest-first, pagination works by passing next_cursor back as cursor, and null means no more pages, plus filter semantics for importance_min and source_type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in sentence one, then uses tight parameter annotations. Every line earns its place, though several lines duplicate schema descriptions rather than adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, no-output-schema search tool, the description covers ordering, pagination, and the key filters, and annotations cover the safety profile. It is largely complete, though it could say more about what a 'statement' contains and the unused sector/theme_id/topic_id filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 11 parameters. The description largely restates schema text (limit range, ISO-8601 format, comma-separated symbols, source_type effects), adding only the clarification that since/until apply to the article's publication time. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search extracted news statements') and adds ordering ('newest first'), which distinguishes it from sibling lookups like get_topic or themes. It does not explicitly name an alternative, but the resource is concrete enough for an agent to recognize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use for 'what is the news saying about X'" gives a clear activation context, and the symbol/source_type lines hint at narrowing behavior. There are no explicit exclusions or named alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sentiment_seriesNews volume and sentiment over timeARead-onlyIdempotent
News volume and sentiment over time for exactly one of symbol, sector, theme_id or topic_id.
Each bucket: t (UTC start), count, bullish, bearish, neutral, sources (distinct outlets) and
score = (bullish - bearish) / count. Buckets with no statements are omitted here. Unless until is set, the
series ends at the current, still incomplete day or hour: do not read a low last bucket as a drop. interval=hour covers at most 14 days and
defaults to the last 7; interval=day defaults to the whole window.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO-8601 time, e.g. 2026-10-01T00:00:00Z | |
| until | No | ISO-8601 time, e.g. 2026-10-01T00:00:00Z | |
| sector | No | GICS sector | |
| symbol | No | One ticker or entity code, e.g. NVDA | |
| interval | No | day | |
| theme_id | No | Theme id from `themes` or `reference` | |
| topic_id | No | Topic (development) id, as returned in topic_id or topics[].id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it documents the omitted empty buckets, and warns that unless `until` is set the series ends on a still-incomplete day/hour so a low last bucket must not be read as a drop. That is precisely the kind of interpretive gotcha an agent would otherwise misread as data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scoping rule are front-loaded in the first sentence, followed by the return-bucket contract and then the last-bucket caveat. The bucket specification sentence is dense with seven field names and a formula in one breath, but nearly every clause carries information, so the length is defensible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and meets it: it defines each bucket field, the score formula, source counting, empty-bucket omission, and time-range defaults. An agent can both call the tool correctly and interpret its results from this text alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the baseline is 3, but the description adds a cross-parameter constraint the schema cannot express: the four entity parameters are all optional and nullable in the schema, yet the description imposes 'exactly one of' and specifies the interval default windows. That is genuine semantic value above the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific resource (news volume and sentiment), a specific shape (over time), and an exact scoping rule (one of symbol, sector, theme_id or topic_id). That is enough to separate it from siblings like search_statements, trending and themes without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete selection guidance: pick exactly one entity dimension, and interval=hour is bounded to 14 days (default 7) while interval=day covers the whole window. It never names a sibling tool or states when to prefer `trending` or `search_statements` over this one, so the 'vs alternatives' half of the bar is unmet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
themesThemesARead-onlyIdempotent
The standing subjects the news is grouped into (Energy, Central banks & rates, ...), each with its number of developments and statements, 24-hour volume, distinct sources and sentiment counts. With symbol or sector: only the themes that have statements about it; the counts are still those of the whole theme, so use search_statements with theme_id and symbol for the symbol's own statements. Use the returned id as theme_id in the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | size = statements; topics = developments; recent = last statement; velocity = statements in the last 24 hours | size |
| sector | No | GICS sector | |
| symbol | No | Ticker or entity code, e.g. NVDA. Comma-separate several (OR), up to 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real behavioral context: the non-obvious caveat that counts remain whole-theme even when filtered by symbol/sector, plus the id-reuse contract with other tools. No return-shape or pagination detail, but that is minor here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what a theme is and what it returns, then the filter caveat and the id hand-off. The middle sentence is slightly convoluted ('the counts are still those of the whole theme, so use...'), but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of enumerating the returned fields and the filter caveat, and it explains the id contract for downstream calls. Adequate for a 3-param, 0-required list tool; only the missing sibling differentiation keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by explaining the semantics of the symbol/sector filter (themes are matched, but the counts are not scoped to that symbol), which is the one behaviorally surprising parameter effect and is not captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names the resource ('standing subjects the news is grouped into') and enumerates what each item carries (developments, statements, 24-hour volume, sources, sentiment counts), which is more specific than a tautology. It distinguishes itself from search_statements but never contrasts with the sibling find_topics, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear conditional: 'With symbol or sector: only the themes that have statements about it,' and routes the agent to search_statements when per-symbol statements are wanted. It also states the follow-on usage ('use the returned id as theme_id in the other tools'). Missing is any guidance on when to prefer this over find_topics or get_topic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trendingTrending developmentsARead-onlyIdempotent
The developments most outlets are reporting. Use for "what is moving / what is the big news right now".
kind=live: the last 2 hours; kind=slot: the top stories of each 2-hour slot over the last 7 days.
For the whole day rather than the last 2 hours, use find_topics with sort=velocity (last 24 hours).
kind=slot lists up to 10 stories per slot over 7 days, so raise limit when you need more than the top of it;
each item's trending labels say which slots it was in and at what rank.
Each item has its distinct source count, sentiment counts and newest statement. symbol: one code only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | live = last 2 hours; slot = 2-hour slots over 7 days | live |
| limit | No | How many to return, taken from the top of the API's ranking; `total` in the result says how many there are | |
| symbol | No | One ticker or entity code, e.g. NVDA | |
| theme_id | No | Theme id from `themes` or `reference` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so safety is covered. The description adds real behavior: the time windows per kind, that kind=slot caps at 10 stories per slot over 7 days, that `trending` labels encode slot membership and rank, and that each item carries source/sentiment counts and a newest statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose and the when-to-use trigger, then structured by parameter. Dense but each sentence carries a distinct fact; the only mild redundancy is restating the kind live/slot windows already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description characterizes the return payload (source count, sentiment counts, newest statement, trending slot/rank labels) and the slot-range limit caveat, which is what an agent needs to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds constraints not obvious from the schema: symbol takes one code only, and limit is taken from the top of the API ranking with `total` in the result revealing the true count. kind semantics are reinforced rather than merely repeated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (the developments most outlets are reporting) and its live/slot scopes, and names the sibling find_topics as the alternative for a different time window. An agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing instructions: use for 'what is moving right now' (kind=live, last 2 hours), and if you want the whole day rather than 2 hours, use find_topics with sort=velocity. It even tells the agent to raise limit when kind=slot's top-of-slot isn't enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
find_topics - First observed
get_topic - First observed
reference - First observed
screen - First observed
search_statements - First observed
sentiment_series - First observed
themes - First observed
trending
TDQS
Scored across 8 tools
Most tools have clearly distinct purposes: search_statements for raw news search, get_topic for a single development, trending for top stories, find_topics for listing developments, themes for standing subjects, sentiment_series for time series, screen for ranking symbols, and reference for metadata. However, trending and find_topics overlap somewhat in surfacing current developments, and themes/reference both expose theme-related metadata, which could cause occasional misselection.
Names mix verb_noun patterns (get_topic, search_statements, find_topics, sentiment_series) with noun-only names (trending, themes, screen, reference). The set is still readable, but the convention is not predictable throughout.
Eight tools is well-scoped for a finance news analytics server. Each tool covers a distinct analytical need without obvious redundancy or bloat.
The surface covers search, topic discovery, trending, themes, sentiment series, ranking, and reference metadata, which supports most analysis workflows. Minor gaps exist, such as no direct tool for retrieving full article content or outlet-level details, but agents can work around these via existing tools.
Maintenance
Related MCP Connectors
Get access to real-time and historical news data including top headlines from global sources
Real-time news search across 500,000+ sources in 60+ languages with sentiment and entities.
The only News based AI MCP your agents will ever need — custom categories, global regions, and time-scoped results in one tool. We use multi-vector & sparse-hybrid search to search through thousands of articles across the world to find the exact news you're looking for.
Live global news signals: ranked wire, story timelines, coverage volume/tone/surges. Free, no auth.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables access to real-time news articles through search, topic headlines, full story coverage, and geo-based local news across multiple countries and languages using the Real Time News Data API.7MIT
- AlicenseAqualityCmaintenanceEnables querying scored and classified Russian and English news via MCP clients, offering filtered feeds, keyword search, breaking news, and coverage stats.51MIT
- AlicenseAqualityBmaintenanceProvides news sentiment scores and media volume trends for any topic, enabling AI assistants to analyze whether news coverage is positive or negative.31MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to discover supported news topics, read source-linked articles, and retrieve changes from a saved cursor. It exposes standard Streamable HTTP MCP tools alongside the news API endpoints for fresh news ingestion and reliable updates.17 npm1MIT