Finance Pulse
PYPI · FINANCE-PULSE
Financial news as sourced statements with sentiment and tickers, grouped into developments.
Available components
Last scanned (15 hours ago)
Scores higher than 62% of PyPI servers
Category Finance and Payments
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 31 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability58
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3465 tokens (~288/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management53
- Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 93% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 −1
- Malware scan: unverified → pass ▲ security
- Schema quality: 234 → 288 ▼ functional
- Schema quality: excellent → good functional
- Package version: 0.1.0 → 0.2.1 functional
- 16 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Oct 26 −9
- Malware scan: pass → unverified ▼ security
- Stability: unverified → 0.40 ▲ functional
- 3 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 2 Oct 26 53
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 18 Oct 2026 · Analysed pypi/finance-pulse@0.2.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 31 packages
| Packages resolved | 31 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
find_symbol Find a symbol's code by name ~158
Look up the code of a company, index, currency, commodity or organisation by name: "micron" finds MU. The query is matched against codes and registered names, so use the company's own name rather than a brand (Alphabet, not Google). Returns the matches mentioned within the plan's history, most mentioned first, each with its code (id), name and kind; an empty list means nothing there matches, and a list as long as `limit` may have more matches behind it. Use the code as `symbol` or `code` in the other tools.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many matches to return |
| query | string | yes | Part of a name or code, e.g. "micron" |
No output schema declared.
No examples provided.
find_topics Find developments ~264
List developments for a symbol, sector, theme or storyline. sort=velocity: most statements in the last 24 hours; size: most statements; recent: latest statement first. symbol: comma-separate several (OR). Topics with fewer than 3 statements are left out unless you lower min_statements, so an empty list can mean "only small ones": retry with min_statements=1. With storyline_id every topic of the storyline is listed by default (sort="oldest" gives them in order).
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | – | – | next_cursor from the previous call, for the next page; keep every other argument the same |
| limit | integer | – | How many to return per call; use the cursor for more |
| min_statements | – | – | Leave out developments with fewer statements. Default: 3, or 1 with storyline_id |
| sector | – | – | GICS sector |
| sort | string | – | – |
| storyline_id | – | – | Storyline id, as returned by `storylines`, `get_symbol` or a topic's storylines |
| symbol | – | – | Ticker or entity code, e.g. NVDA. Comma-separate several (OR). |
| theme_id | – | – | Theme id from `themes` or `reference` |
No output schema declared.
No examples provided.
get_storyline Get one storyline ~263
One storyline in full: its topics, oldest first (how the story unfolded), and its newest statements. If `topics` is larger than the `members` list, ask again with `members` at its maximum; for a storyline longer than that, page through all of them with find_topics(storyline_id=..., sort="oldest"). While the list is cut, `top_topics` names the storyline's largest topics. `more_statements` says whether it has more statements than shown. If you expect to need them, ask for `statements` at its maximum: only then is `statements_cursor` set, and search_statements(storyline_id=..., cursor=...) continues exactly after them (add symbol to keep only those naming the company). With fewer, the cursor is null and search_statements(storyline_id=...) starts again at the newest, repeating the ones shown here.
| Name | Type | Req | Description |
|---|---|---|---|
| members | integer | – | How many of its topics to list, oldest first |
| statements | integer | – | How many of its newest statements to include |
| storyline_id | string | yes | Storyline id, as returned by `storylines`, `get_symbol` or a topic's storylines |
No output schema declared.
No examples provided.
get_symbol Everything about one symbol ~342
One company or other entity in a single call. Use first for "what is going on with X". Returns who it is (name, kind, exchange); its mentions, topics, distinct sources, sentiment counts and score for the last 24 hours (d), the last 7 days (w) and all the history the plan includes, with the change against the period before and the counts over statements that name only this entity (`mentions_single`, `score_single`); the sectors of its statements; its largest topics; its storylines with the most mentions lately; the entities it shares topics with (`related`, empty for a rarely mentioned symbol); and its newest statements. A period without any mention is left out of `periods`. `more_statements` says whether the symbol has more statements than shown. If you expect to need them, ask for `statements` at its maximum: only then is `statements_cursor` set, and search_statements(symbol=..., cursor=...) continues exactly after them. With fewer, the cursor is null and search_statements(symbol=...) starts again at the newest, repeating the ones shown here. Do not guess a code: a wrong one costs a request. Look it up with find_symbol.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | Ticker or entity code, e.g. NVDA. Non-US tickers carry an exchange suffix (0700.HK). When unsure of the code, call find_symbol first. |
| statements | integer | – | How many of its newest statements to include |
| topics | integer | – | How many of its largest topics to include |
No output schema declared.
No examples provided.
get_topic Get one development ~103
One development in full: its counts, how many of its statements come from news, speculative analysis and reddit (source_mix), the storylines it belongs to, and its newest statements, each with its outlet and headline. For older statements call search_statements with topic_id and the returned statements_cursor as cursor (null when there are no more).
| Name | Type | Req | Description |
|---|---|---|---|
| topic_id | string | yes | Topic (development) id, as returned in topic_id or topics[].id |
No output schema declared.
No examples provided.
reference History reach, counts and accepted values ~66
What the API holds right now: how far back the plan's history goes (window_days), counts of statements, topics, storylines and symbols, the themes with their ids, and the accepted sector, sentiment, importance, source-type and entity-kind values. One call per conversation is enough.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
screen Screen symbols or sectors by news attention ~416
Rank symbols (or the GICS sectors) by news attention. Use for "which tickers are suddenly in the news". period: d = last 24 hours, w = last 7 days, window = all the history the plan includes; or pass since (and until) to count any interval. sort=change ranks by the rise in mentions against the period (or equally long interval) before. `change` is null when there is nothing before to compare with: for period=window, for an interval given only by `until`, and for an interval whose preceding interval reaches before the plan's history. Use sort=mentions then. Each row: mentions, topics, sources (distinct outlets), sentiment counts, score and change; symbol rows also carry name, kind and the counts over statements naming only that symbol (`mentions_single`, `score_single`). Only for rank=symbols: sector limits the screen to one sector; min_mentions drops rarely mentioned codes; entity_kinds narrows the kind of entity (`reference` lists the kinds). Without it the list mixes companies with rates, commodities and central banks; pass "equity,etf" for tradable tickers.
| Name | Type | Req | Description |
|---|---|---|---|
| entity_kinds | – | – | Comma-separated entity kinds from: equity, etf, index, rate, fx, crypto, commodity, org, private, country. E.g. "equity,etf" |
| limit | integer | – | How many rows to return |
| min_mentions | integer | – | Leave out codes with fewer mentions |
| period | string | – | d = last 24 hours, w = last 7 days, window = all the history the plan includes |
| rank | string | – | – |
| sector | – | – | GICS sector |
| since | – | – | Start of a custom interval (ISO-8601) to count instead of `period` |
| sort | string | – | – |
| until | – | – | End of the custom interval (ISO-8601); omit for up to now |
No output schema declared.
No examples provided.
search_statements Search news statements ~398
Search 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. storyline_id: every statement of that storyline's topics; add symbol for only those naming its company. since/until: ISO-8601 times on the article's publication time, e.g. 2026-10-01T00:00:00Z. Each statement has its source, the article's headline and its topic. Pass next_cursor back as cursor for the next page (null means no more).
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | – | – | next_cursor from the previous call, for the next page; keep every other argument the same |
| importance_min | – | – | Minimum importance; high = key facts only |
| limit | integer | – | How many to return per call; use the cursor for more |
| sector | – | – | GICS sector |
| sentiment | – | – | Only statements with this sentiment |
| since | – | – | ISO-8601 time, e.g. 2026-10-01T00:00:00Z |
| source_type | – | – | One of: news, speculative, reddit. news leaves out speculative analysis and reddit |
| storyline_id | – | – | Storyline id, as returned by `storylines`, `get_symbol` or a topic's storylines |
| symbol | – | – | Ticker or entity code, e.g. NVDA. Comma-separate several (OR). |
| theme_id | – | – | Theme id from `themes` or `reference` |
| topic_id | – | – | Topic (development) id, as returned in topic_id or topics[].id |
| until | – | – | ISO-8601 time, e.g. 2026-10-01T00:00:00Z |
No output schema declared.
No examples provided.
sentiment_series News volume and sentiment over time ~246
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. The last bucket is usually the current, still incomplete day or hour: do not read a low last bucket as a drop. interval=hour is for short ranges: pass since/until, and if the range is too long the error says the maximum.
| Name | Type | Req | Description |
|---|---|---|---|
| interval | string | – | – |
| sector | – | – | GICS sector |
| since | – | – | ISO-8601 time, e.g. 2026-10-01T00:00:00Z |
| symbol | – | – | One ticker or entity code, e.g. NVDA |
| theme_id | – | – | Theme id from `themes` or `reference` |
| topic_id | – | – | Topic (development) id, as returned in topic_id or topics[].id |
| until | – | – | ISO-8601 time, e.g. 2026-10-01T00:00:00Z |
No output schema declared.
No examples provided.
storylines One symbol's storylines ~351
One company's news grouped into continuing stories: an event, then its follow-ups, reactions and consequences. Use for "how did the X story unfold" or "what are the ongoing stories about X". By default only storylines with two or more topics are listed: an empty list means "none with several topics", so pass min_topics=1 to see the single-topic ones. Each storyline has a name (one of its topics' names), first_seen and last_seen, its number of topics, statements and mentions (statements naming the symbol), distinct sources, sentiment counts of the mentions, `top_topics` (its largest topics; that is all of them when `topics` is no larger than the list) and `related`: storylines of other symbols that share topics with it. Storylines belong to one symbol, so news about two companies appears under each. The grouping is automatic and can be wrong or incomplete, and one real story can be split over several storylines: a reading aid, not a count of events. Call get_storyline when you need every topic in order or the statements.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | – | – | next_cursor from the previous call, for the next page; keep every other argument the same |
| limit | integer | – | How many to return per call; use the cursor for more |
| min_topics | integer | – | Only storylines with at least this many topics; 1 also lists single-topic ones |
| sort | string | – | recent = newest statement; mentions; topics; velocity = mentions in the last 24 hours |
| symbol | string | yes | Exactly one ticker or entity code, e.g. MSFT |
No output schema declared.
No examples provided.
themes Themes ~151
The standing subjects the news is grouped into, 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 | Type | Req | Description |
|---|---|---|---|
| sector | – | – | GICS sector |
| sort | string | – | size = statements; topics = developments; recent = last statement; velocity = statements in the last 24 hours |
| symbol | – | – | Ticker or entity code, e.g. NVDA. Comma-separate several (OR). |
No output schema declared.
No examples provided.
trending Trending developments ~261
The developments most outlets are reporting. Use for "what is moving / what is the big news right now". kind=live: the current list. kind=slot: the top stories of each recent time slot, newest slot first. Each item's `trending` holds its three newest labels (the live list or a slot's start, the rank and the number of sources there); `trending_labels` is how many labels it has in all. The slot list is long (`total`): narrow it with symbol or theme_id rather than asking for all of it. For a whole day rather than right now, use find_topics with sort=velocity (statements in the last 24 hours). Each item has its distinct source count, sentiment counts and newest statement. symbol: one code only.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | live = what is most reported right now; slot = the top of each recent time slot |
| limit | integer | – | How many to return, taken from the top of the API's ranking; `total` in the result says how many there are |
| symbol | – | – | One ticker or entity code, e.g. NVDA |
| theme_id | – | – | Theme id from `themes` or `reference` |
No output schema declared.
No examples provided.
How do I install the Finance Pulse MCP server?
Finance Pulse runs locally as a PyPI package, launched with uvx finance-pulse. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · finance-pulse
claude mcp add slothyafk-finance-pulse -- uvx finance-pulse
What is the Finance Pulse MCP server?
Finance Pulse is an MCP server listed in the public MCP registry as io.github.SlothyAfk/finance-pulse. Financial news as sourced statements with sentiment and tickers, grouped into developments. This page covers its PyPI package (finance-pulse).
Is the Finance Pulse MCP server safe to use?
Finance Pulse scores 60 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 18 October 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Finance Pulse MCP server expose?
Finance Pulse exposes 12 tools: search_statements, get_symbol, find_symbol, screen, sentiment_series, and 7 more. Their descriptions and schemas cost roughly 3,019 tokens of context every time the server is loaded.
Is the Finance Pulse MCP server still maintained?
Finance Pulse is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Finance Pulse MCP server under?
Finance Pulse declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.