Finviz MCP
Finviz MCP
MCP-palvelin, joka antaa Claudelle (tai millä tahansa MCP-asiakkaalle) pääsyn Finviz-osakedataan: yhden osakkeen tunnusluvut, uutiset ja screener-haut, sekä oikeaan historialliseen hintadataan (Yahoo Finance). Data haetaan livenä finvizfinance- ja yfinance-kirjastoilla, eli mitään API-avaimia ei tarvita.
Työkalut
get_stock(ticker)– yhden osakkeen Finviz-tunnusluvut (P/E, market cap, marginaalit, tuotot jne.)get_stock_news(ticker)– osakkeen viimeaikaiset uutisotsikotget_price_history(ticker, days=7)– oikea päivätason historiadata (Open/High/Low/Close/Volume) Yahoo Financesta enintään 365 päivän ajalta, plus valmis analyysi siitä mikä päivä olisi ollut paras ostopäivä (alin hinta ja paras tuotto viimeisimpään päätöskurssiin verrattuna). Finvizillä itsellään ei ole historiadata-API:a, vain nykyhetken snapshot ja staattinen chart-kuva.screen_stocks(...)– Finviz-screener luonnollisilla parametreilla (market_cap,sector,pe_max,rsi,dividend_yield_min,signal, ...). Claudelle ei tarvitse selittää Finvizin sisäisiä suodatinnimiä – palvelin kääntää parametrit automaattisesti lähimpään Finvizin tukemaan arvoon. Toimii vain paikallisesti ajettuna, ei julkaistuna pilvipalvelimella – ks. Rajoitukset.list_screener_filters(search=None)/list_screener_signals()– apuvälineitä Claudelle, jos se tarvitsee jonkin suodattimen jotascreen_stocksei vielä kata nimetyllä parametrilla. Löydetyn arvon voi antaascreen_stocks(extra_filters={...})-parametrina.
screen_stocks-parametrit napsahtavat aina lähimpään Finvizin tarjoamaan "koriin" (esim. pe_max=18 → "Under 20"), koska Finvizin screener tukee vain valmiita arvovälejä, ei mielivaltaisia lukuja.
1. Paikallinen testaus
Vaatii Python 3.10+:
pip install -r requirements.txt
python server.pyPalvelin käynnistyy osoitteeseen http://localhost:8000/mcp (Streamable HTTP).
Testattu päästä päähän tässä ympäristössä (asennus, käynnistys,
initialize-kättely ja kaikki viisi työkalua oikealla Finviz-datalla). Testauksen aikana kävi ilmi, että PyPI:nfinvizfinance1.3.0 ei ollut vielä ajan tasalla Finvizin uudistuneen sivupohjan kanssa:get_stockkaatui kokonaan (vanhaquote-links-CSS-luokka on nytquote-header_categories, eri sisällöllä), jascreen_stocks:n Ticker-sarakkeessa oli ylimääräinen alkukirjain (esim. "NVDA" → "NNVDA", Finvizin uudesta logon paikkamerkistä).server.pykorjaa molemmat suoraan (ks. tiedoston yläosan kommentti) – jos Finviz muuttaa sivuaan taas, näihin korjauksiin kannattaa palata ensimmäisenä.
Jos Python ei ole koneella mutta Docker on, voit testata ilman paikallista Python-asennusta:
docker build -t finviz-mcp .
docker run -p 8000:8000 finviz-mcpNopea toimivuustesti komentoriviltä (vaatii curlin ja että palvelin on käynnissä):
curl -X POST http://localhost:8000/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}"Vastauksessa pitäisi näkyä kuusi työkalua: get_stock, get_stock_news, get_price_history, screen_stocks, list_screener_filters, list_screener_signals.
2. Julkaisu (esim. Render)
Työnnä tämä kansio omaan Git-repoosi (GitHub/GitLab).
Render → New + → Web Service → yhdistä repo.
Render tunnistaa
Dockerfile:n automaattisesti. Erillisiä ympäristömuuttujia ei tarvita – palvelin lukee portin Renderin asettamastaPORT-muuttujasta.Julkaisun jälkeen saat osoitteen kuten
https://finviz-mcp.onrender.com. MCP-endpoint on tämän perässä/mcp, eli:https://finviz-mcp.onrender.com/mcp.
Railway, Fly.io tms. toimivat samalla periaatteella (Dockerfile-pohjainen Python-hosting, PORT-ympäristömuuttuja).
3. Yhdistäminen Claudeen
Claude → Settings → Connectors → Add custom connector → liitä MCP-URL (https://<oma-osoite>/mcp).
Claude tukee remote MCP -palvelimia Streamable HTTP:n kautta, joten tämä toimii sellaisenaan.
4. Esimerkkikehotteet
"Get me the Finviz fundamentals for NVDA."
"Find oversold technology stocks with market cap over $10B."
"Show me 15 large-cap dividend stocks with yield over 4% and P/E under 20."
"What's the latest news on TSLA?"
"Find stocks flagged as Top Gainers today with average volume over 1M."
Rajoitukset
screen_stocks(jalist_screener_filters/list_screener_signals) ei toimi julkaistuna pilvipalvelimella (testattu Renderissä): Finviz palauttaa 403 Forbidden nimenomaan screener-endpointille (finviz.com/screener.ashx) datakeskus-IP-osoitteista, vaikkaget_stock/get_stock_news/get_price_historytoimivat samasta palvelimesta täysin normaalisti (ne käyttävät eri, vähemmän suojattuja endpointteja). Tätä ei saanut korjattua HTTP-otsikoita säätämällä – vaikuttaa olevan Finvizin oma, tarkoituksellinen datakeskus-IP-esto juuri screenerille. Jos tarvitsetscreen_stocks-toimintoa, aja palvelin paikallisesti (python server.py) ja yhdistä siihen esim.cloudflared/ngrok-tunnelilla, jolloin pyynnöt lähtevät kotiverkkosi IP:stä.Data skreipataan Finvizin/Yahoo Financen verkkosivuilta (ei virallisia API-avaimia), joten se voi hajota jos ne muuttavat sivujensa rakennetta.
screen_stocksrajaa tulokset oletuksena 20:een ja enintään 50:een riviin, jotta pyyntö pysyy nopeana.get_price_historyrajaadays-parametrin enintään 365:een.Ei sisällä autentikointia – jos palvelu on julkisesti internetissä, kuka tahansa URL:n tietävä voi kutsua sitä. Data on julkista, mutta pidä tämä mielessä jos lisäät myöhemmin maksullisia/rajoitettuja ominaisuuksia.