감성 분석, 티커, 주제가 포함된 구조화된 금융 뉴스를 문장 단위로 제공하여 AI 클라이언트가 시장 변화와 스토리라인을 추적할 수 있도록 돕습니다.
다른 이름 SlothyAfk/finance-pulse-python, finance-pulse-python, finance-pulse
- 스타
- 0
- Tools
- 12
- 다운로드, 30일
- 118
- 최신 버전
- 0.2.1
- 마지막 커밋
- 2026년 10월 17일
- 라이선스
- MIT
Finance Pulse MCP란?
Finance Pulse은(는) MCP server입니다. 감성 분석, 티커, 주제가 포함된 구조화된 금융 뉴스를 문장 단위로 제공하여 AI 클라이언트가 시장 변화와 스토리라인을 추적할 수 있도록 돕습니다. 12개 도구를 제공합니다. 예: get_symbol, find_symbol, search_statements.
프로젝트 README에서 생성된 요약
Finance Pulse MCP server 정보
Finance Pulse는 감성 분석, 티커, 특정 주제를 포함한 개별 문장 형태의 구조화된 금융 뉴스 데이터를 제공합니다. 이 server는 Claude 또는 Cursor와 같은 AI 클라이언트와 개발자가 조직화된 스토리라인과 테마를 통해 시장 변화를 추적할 수 있도록 설계되었습니다. 뉴스 기사를 한 문장 단위의 사실로 변환하여 시장 감성 및 뉴스 거래량을 정밀하게 쿼리할 수 있습니다.
이 server를 사용하려면 Finance Pulse API를 구독하는 RapidAPI key가 있어야 합니다. 설치를 자동으로 관리하는 uvx를 사용하여 로컬에서 실행할 수 있습니다. 사용자는 각 설정 파일을 편집하여 필요한 환경 변수를 포함함으로써 Claude Desktop 또는 Cursor에 통합할 수 있습니다. 이 시스템은 종합적인 기업 데이터를 위한 get_symbol, 실시간 변화를 위한 trending, 시간 경과에 따른 뉴스량을 추적하기 위한 sentiment_series 등 다양한 도구를 제공합니다.
활용 사례
- 1기업 뉴스 동향 추적AI에게 핵심 사실과 출처를 사용하여 Nvidia와 같은 특정 기업에 어떤 일이 일어나고 있는지 요약하도록 요청합니다.
- 2시장 감성 변화 모니터링지난 2주 동안 Tesla에 대한 뉴스 감성이 어떻게 변했는지 확인하도록 요청합니다.
- 3트렌딩 시장 티커 식별이전 날짜와 비교하여 뉴스 커버리지가 비정상적으로 증가한 주식 티커를 찾습니다.
- 4섹터 전반의 스토리라인 분석에너지 섹터 내에서 가장 중요한 진행 중인 스토리를 조사합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Finance Pulse MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 Finance Pulse MCP 설치
$ claude mcp add --env 'RAPIDAPI_KEY=<YOUR_RAPIDAPI_KEY>' finance-pulse-python -- uvx finance-pulseCursor에 Finance Pulse MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"finance-pulse-python": {
"command": "uvx",
"args": [
"finance-pulse"
],
"env": {
"RAPIDAPI_KEY": "<YOUR_RAPIDAPI_KEY>"
}
}
}
}VS Code에 Finance Pulse MCP 설치
.vscode/mcp.json
{
"servers": {
"finance-pulse-python": {
"type": "stdio",
"command": "uvx",
"args": [
"finance-pulse"
],
"env": {
"RAPIDAPI_KEY": "<YOUR_RAPIDAPI_KEY>"
}
}
}
}VS Code CLI에 Finance Pulse MCP 설치
$ code --add-mcp '{"name":"finance-pulse-python","type":"stdio","command":"uvx","args":["finance-pulse"],"env":{"RAPIDAPI_KEY":"<YOUR_RAPIDAPI_KEY>"}}'Claude Desktop에 Finance Pulse MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"finance-pulse-python": {
"command": "uvx",
"args": [
"finance-pulse"
],
"env": {
"RAPIDAPI_KEY": "<YOUR_RAPIDAPI_KEY>"
}
}
}
}Codex에 Finance Pulse MCP 설치
$ codex mcp add finance-pulse-python --env 'RAPIDAPI_KEY=<YOUR_RAPIDAPI_KEY>' -- uvx finance-pulseCodex config.toml에 Finance Pulse MCP 설치
~/.codex/config.toml
[mcp_servers.finance-pulse-python] command = "uvx" args = ["finance-pulse"] [mcp_servers.finance-pulse-python.env] RAPIDAPI_KEY = "<YOUR_RAPIDAPI_KEY>"
Gemini CLI에 Finance Pulse MCP 설치
$ gemini mcp add -s user -e 'RAPIDAPI_KEY=<YOUR_RAPIDAPI_KEY>' finance-pulse-python uvx -- finance-pulseGemini settings.json에 Finance Pulse MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"finance-pulse-python": {
"command": "uvx",
"args": [
"finance-pulse"
],
"env": {
"RAPIDAPI_KEY": "<YOUR_RAPIDAPI_KEY>"
}
}
}
}Finance Pulse MCP 도구 12
README에서 감지됨get_symbolfind_symbolsearch_statementstrendingfind_topicsget_topicstorylinesget_storylinesentiment_seriesscreenthemesreference
| get_symbol | — | |
| find_symbol | — | |
| search_statements | — | |
| trending | — | |
| find_topics | — | |
| get_topic | — | |
| storylines | — | |
| get_storyline | — | |
| sentiment_series | — | |
| screen | — | |
| themes | — | |
| reference | — |
구성
RAPIDAPI_KEY필수비밀Your RapidAPI key, subscribed to Finance Pulse (free plan available): https://rapidapi.com/evankos/api/finance-pulse/pricing
| 이름 | 설명 | 유형 |
|---|---|---|
| RAPIDAPI_KEY | Your RapidAPI key, subscribed to Finance Pulse (free plan available): https://rapidapi.com/evankos/api/finance-pulse/pricing | 필수비밀 |
자동 검사
2026년 11월 13일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능slothyafk/finance-pulse-python is public and reachablegithub.com/slothyafk/finance-pulse-python ↗통과
- 패키지가 이 저장소를 소스로 명시finance-pulse names slothyafk/finance-pulse-python as sourcepypi.org/project/finance-pulse/ ↗통과
- 빌드 출처(Sigstore 증명)No build attestation published for this release검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-18github.com/slothyafk/finance-pulse-python ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from finance-pulse통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음32 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음12 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Finance Pulse: Python client and MCP server
Financial news as structured, sourced data. Finance Pulse gives you financial news as statements: one-sentence facts from each article, with sentiment, importance, tickers, sector, source, headline and publication time. Statements about the same development are grouped into topics; one company's topics that continue each other form a storyline; and topics belong to standing 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: there is a free one 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-pulse
Claude 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 going on with Nvidia? Give me the picture, then the key facts with sources."
- "Which tickers are suddenly getting more coverage than yesterday?"
- "What are the ongoing stories about Microsoft, and how did the biggest one unfold?"
- "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 |
|---|---|
get_symbol |
Everything about one company or other entity in one call: counts and sentiment per period, largest topics, storylines, related entities, newest statements |
find_symbol |
A company's code from its name ("micron" finds MU) |
search_statements |
Statements by symbol, sector, theme, topic, storyline, sentiment, minimum importance and time range |
trending |
The developments most outlets are reporting right now, or the top of each recent time slot |
find_topics |
Developments for a symbol, sector, theme or storyline, by velocity, size or recency |
get_topic |
One development: counts, its mix of news, analysis and reddit statements, its storylines, newest statements with their outlets |
storylines |
One company's news grouped into continuing stories: an event, then its follow-ups and reactions |
get_storyline |
One storyline: its topics in order and its newest statements |
sentiment_series |
Daily or hourly news volume and sentiment for a symbol, sector, theme or topic |
screen |
Symbols (optionally only equities and ETFs) or sectors ranked by news attention and its change, for the last day, week or any interval |
themes |
The standing subjects with their volume and sentiment, optionally only those a symbol or sector appears in |
reference |
How far back your plan's history goes, counts, theme ids and accepted filter values |
Each tool call is normally one API request. Results are trimmed and come in small pages.
Use it from Python
pip install finance-pulse
export RAPIDAPI_KEY=YOUR_RAPIDAPI_KEY
The 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']})")
# One company in one call: counts per period, largest topics, storylines, newest statements
nvda = fp.symbol("NVDA")["data"]
week = nvda["periods"].get("w") # a period without mentions is left out
if week:
print(nvda["name"], week["mentions"], "mentions this week, score", week["score"])
# A company's news as continuing stories
for line in fp.storylines(symbol="MSFT", min_topics=2, sort="mentions", limit=5)["data"]:
print(line["topics"], "topics,", line["mentions"], "mentions:", line["name"])
# 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": {...}}
(iter_statements and poll_feed yield its rows one by one). The
snapshot block carries the times the data refers to (window_start, anchor, lag_days), and every statement
carries published_at and indexed_at.
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 at the feed's default starting point (a limited time back,
not the beginning of the data), 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, as far back as your plan's history
reaches, at least one request per 100 statements; delete the cursor file to start afresh 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 poller pauses 150 seconds between polls unless you pass interval=. Every poll is one request (and so is
every retry), so at the default a poller that runs all month makes about 17,000 requests: set interval= to fit
your plan's monthly quota (a month has about 2.6 million seconds; divide by the requests you want to spend on
polling). Timeouts, server errors and a passing 429 (the plan's rate limit, or too many requests at once) are
retried for as long as they last, with a pause that grows to 5 minutes, and each retry is logged as a warning
on the finance_pulse logger. A used-up quota, or a 429 that asks to wait more than 5 minutes, is raised at
once.
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 (and each retry one more). Without max_items it stops after 500 rows; max_items=None reads to the end
of the data.
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 symbol
A 429 means too many requests: the plan's quota is used up (e.quota_used_up is true), the plan's rate
limit was reached, or too many requests are open at once; the last two usually pass on their own. Send
requests one after another rather than many in parallel. Timeouts and network failures are raised as
FinancePulseError too, with status 0; e.transient is true for those and for 5xx answers. e.retry_after
says how long to wait when the API gives a time.
Single calls raise every error at once. iter_statements retries a page up to five times in a row after a
temporary failure or a passing 429, with a growing pause; poll_feed keeps retrying those for as long as they
last (see above). Both raise at once a used-up quota and a 429 that asks to wait more than 5 minutes.
Methods
| Method | Endpoint |
|---|---|
statements, iter_statements, statement |
/v2/statements, /v2/statements/{id} |
feed, poll_feed |
/v2/feed |
series |
/v2/series |
symbols, symbol, sectors |
/v2/symbols, /v2/symbols/{code}, /v2/sectors |
trending |
/v2/trending |
topics, topic |
/v2/topics, /v2/topics/{id} |
storylines, storyline |
/v2/storylines, /v2/storylines/{id} |
themes, theme |
/v2/themes, /v2/themes/{id} |
meta |
/v2/meta |
Parameters, response fields and limits are documented in the
API reference, and the guides show complete
worked examples. fp.get("/v2/...", **params) calls any endpoint the client has no method for yet.
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, currencies, crypto, commodities and organisations under short codes (SPX,USD,BTC,FED). Usekind=["equity", "etf"]for tradable tickers only, andsymbols(q="name", period="window")to find a code. - Sentiment describes the statement, not a price forecast. A symbol's sentiment is the count of its statements' labels.
- Topics and storylines are grouped automatically and can be wrong or incomplete: a reading aid, not a count of events.
- How far back you can read depends on your plan.
window_startin every response says where your history starts andmeta()gives it in days (window_days); older statements are not returned.
See the docs for the full list of caveats.
Development
pip install -e ".[dev]"
pytest
The 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
Finance Pulse MCP 질문
Finance Pulse MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add --env 'RAPIDAPI_KEY=<YOUR_RAPIDAPI_KEY>' finance-pulse-python -- uvx finance-pulse를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
Finance Pulse MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
Finance Pulse MCP는 어떤 도구를 제공하나요?
12개 도구를 제공합니다. 예: get_symbol, find_symbol, search_statements, trending, find_topics.
Finance Pulse server 인증은 어떻게 하나요?
Finance Pulse 플랜을 구독 중인 RapidAPI key가 필요합니다. 이 키를 RAPIDAPI_KEY라는 이름의 환경 변수로 제공해야 합니다.