Xfinlab

io.github.lnanologyPublished by GitHub account lnanologyv1.0.1Updated Oct 24, 2026

Financial intelligence for AI agents: market events, sentiment, technicals, news feed.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingFinanceData & Analytics

Overview

AI-generated overview

Remote financial-intelligence MCP server giving an assistant market news, FinBERT sentiment, technical signals, global macro snapshots and point-in-time SEC 10‑

What you can do
Retrieve recent market and company news headlines, optionally filtered by ticker, with title, source and link but no article body. Get FinBERT sentiment labels, confidence and an average score for a ticker's recent headlines. Pull technical and market-structure signals (trend, MACD, volume, chart patterns, BOS/CHOCH, liquidity sweeps) from OHLC data. Read AI-clustered event feeds with entity and sentiment context and a written narrative summary. Fetch a cross-region global market snapshot with macro indicators, regional headlines and sentiment. Look up point-in-time SEC 10-K fundamentals for a US-listed company as of a given date.
When to use it
Useful when an assistant needs to answer questions about market news, sentiment, technical setups or company fundamentals and should ground answers in computed or official-source data rather than recall. Suited to research, screening and analysis workflows where a hosted, no-setup financial data source is preferable to building one.
Requirements
A remote hosted endpoint at api.xfinlab.com; nothing to install locally. Requires an XFINLAB API key sent in the X-API-Key header; a free tier key is issued through the provider's site. Network access to the provider is needed.
Before you install
The API key is a secret passed in the X-API-Key header, so keep it out of shared configs and logs. Queries about tickers and dates go to a third-party hosted service. Output is market data and model-derived sentiment or signals, not investment advice, and the README states no uptime or response-time SLA is measured.

Installation

In SourceWeft

  1. Open Xfinlab in the dashboard and add it to a workspace.
  2. Connect X-API-Key credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.lnanology%2Fxfinlab/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "xfinlab": {
      "type": "http",
      "url": "https://api.xfinlab.com/api/mcp",
      "headers": {
        "X-API-Key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

XFINLAB

Financial Intelligence Infrastructure — APIs, SDKs, and an MCP server for developers and AI agents, plus a consumer research platform built on the same backend.

Real market events, FinBERT sentiment, technical/market-structure analysis, SEC/CFTC/FDIC/USDA/CBOE official data, and Monte Carlo stress testing. Every field is traceable to a real computation or an official data source — nothing fabricated or interpolated.

Architecture · Get a free API key · API docs · llms.txt · Consumer product

Quick start (API)

bash
pip install "git+https://github.com/lnanology/Xfinlab.git#subdirectory=sdk/python"
python
from xfinlab_intelligence import XfinlabClient
client = XfinlabClient(api_key="xfl_...")  # free tier, issued instantlysentiment = client.sentiment("AAPL")technical = client.technical("AAPL", period="6mo")fundamentals = client.fundamentals("AAPL")

Or JavaScript/Node:

bash
npm install "github:lnanology/Xfinlab#path:sdk/js"
js
const { XfinlabClient } = require('xfinlab-intelligence');const client = new XfinlabClient('xfl_...');const sentiment = await client.sentiment('AAPL');

19 endpoints total — market events, sentiment, AI debate, technical/market-structure, Monte Carlo stress testing, insider trading, institutional ownership, short interest, SEC XBRL fundamentals, CBOE VIX term structure, FDIC bank health, USDA agriculture, EIA energy, crypto, cross-region market map, and Pro-tier webhooks. Full reference: intelligence-api.html.

MCP server (for Claude and other AI agents)

Every field this server returns is either a real computation/real official-source value, or null with an explanation — the MCP ecosystem has a lot of servers now, few of them say anything about the actual quality of the data behind the tool calls. This one does, in public: xfinlab.com/trust.html shows every underlying data collector's live/down status in real time.

Already live in production — no setup needed, just point an MCP-compatible client at it:

json
{  "mcpServers": {    "xfinlab": {      "url": "https://api.xfinlab.com/api/mcp",      "headers": { "X-API-Key": "xfl_..." }    }  }}

Hosted service (the server implementation is proprietary and runs at api.xfinlab.com). Tools (6): get_market_events, get_sentiment, get_technical_analysis, get_intelligence_feed, get_global_market_map, get_fundamentals_as_of (point-in-time SEC fundamentals). Same auth and free tier as the REST API. Docs: intelligence-api.html#mcp.

Production usage

Early-stage, honest numbers — pulled from the platform's own admin metrics on 2026-09-22, not curated for effect. Individual emails aren't published here even though they're visible in the admin panel — no reason to expose real people's addresses in a public README.

  • 15 API keys issued (14 active, 1 revoked) since the self-serve free tier launched, to roughly 13 distinct outside developers/researchers — not counting the operator's own test key, which shows 0 calls, so none of the volume below is self-generated traffic.
  • 669 weighted API calls served all-time, concentrated in a small number of real integrations: the single heaviest account alone accounts for more than half of all-time volume, the second-heaviest for roughly another fifth.
  • One signup used a .edu email address — an early, small signal of academic/research interest rather than only casual trials.
  • 5 organic accounts on the consumer research site (xfinlab.com), separate from the API-only signups above. Of 7 total registered accounts, 2 are the operator's own account and an internal LINE-bot integration, not external users — excluded from that count.
  • No response-time or uptime SLA number is published here — it isn't actually measured yet, and this project holds itself to the same zero-fabrication policy it markets to users, so an unmeasured number doesn't get invented for a case study either. Per-data-source status (not per-request latency) is live on that same page.

Two real bugs this surfaced, fixed the same day each was found:

  • SEC Form 4 false positives (Sept 2026). SEC EDGAR's own browse-edgar type filter turned out to behave as a prefix wildcard, not an exact match — type=4 was silently matching unrelated 424B-series filings as "insider trading" activity. Caught by the platform's own data-source health alerting (not a user bug report), confirmed against SEC's live responses — its own pagination link rewrites type=4 to type=4%25, which is what gave the bug away.
  • Point-in-time/vintage data store (Sept 2026). A quant researcher's comment on r/quant pointed out that treating a filing's period-end date as "known on that date" ignores real filing lag and later restatements — a classic look-ahead-bias source in backtests. Built a dedicated (proprietary) store where every fundamentals value carries a real filing-availability timestamp instead of the period it describes, and a restated value is stored as a new immutable row rather than overwriting the original — so "what did we know on date X" and "what's the latest known value" are two different, both-correct queries.

SDKs & examples

Both SDKs are MIT-licensed (sdk/LICENSE) and have zero required dependencies beyond the standard library / native fetch.

Consumer product

The same backend also powers xfinlab.com, a retail investment-research platform:

ModulePath
Homepageindex.html
AI Market Research™ai-analysis.html
Chart Research™chart-analysis.html
Company Compare™company-compare.html
Event Intelligence™news-denoise.html
Risk Engine™stress-lab.html

Local development

bash
python3 mock-server.py

Then open http://localhost:8080. The production backend is a separate, private service (deployed as api.xfinlab.com); the static site above deploys separately on Vercel as xfinlab.com.

More docs

Source: README.md at commit bf54dd7

Tools

6

get_market_events

Market events

Get recent market/company news headlines from XFINLAB's aggregated real-time news feed (RSS-sourced, deduplicated). Optionally filter by ticker/company name. Returns title, source, kind, published_at, url for each item -- no article body text.

Parameterslimittickerapi_keymarketplace_license_key

get_sentiment

Headline sentiment

Get FinBERT-based sentiment analysis of recent headlines for a ticker. Returns per-headline label/confidence/score plus an average score. Real model inference, not a fabricated estimate.

Parameterslimittickerrequiredapi_keymarketplace_license_key

get_technical_analysis

Technical analysis

Get confluence direction/confidence, trend, MACD, volume, chart patterns, and market-structure signals (BOS/CHOCH/liquidity-sweep/order-flow/volume-profile/institutional-footprint) for one ticker, computed from real OHLC price data -- the same engine that powers XFINLAB's chart-analysis and ai-analysis pages.

Parameterslangperiodtickerrequiredapi_keyintervalmarketplace_license_key

get_intelligence_feed

Intelligence feed

Get AI-structured event clusters from recent news: same-story headline clusters with entity/sentiment/quant-context fields and an AI-written narrative summary. Optionally scoped to one ticker; otherwise returns the latest cross-market feed. This is structured fact extraction, not republished article text, and never includes a directional trading signal or probability estimate.

Parameterslanglimittickerapi_keymarketplace_license_key

get_global_market_map

Global market map

Get a cross-region global market snapshot ('World Engine'): macro indicators (GDP growth/inflation/unemployment, with source attribution -- world_bank/fred/ecb), filtered regional headlines, and FinBERT sentiment for each requested region, plus a top-level global headlines feed (GDELT). Regions: us, europe, japan, korea, china, hk, tw, sea, me, latam. No AI narrative, no directional signal -- structured real data only.

Parametersapi_keyregionsnews_limitinclude_sentimentmarketplace_license_key

get_fundamentals_as_of

Point-in-time fundamentals

Point-in-time company fundamentals (fundamentals_as_of): what an investor could actually have known about a US-listed company on a given date. For a symbol and an as_of date (YYYY-MM-DD) it returns the annual SEC 10-K figures (revenue, net income, diluted EPS, total assets, total liabilities, operating cash flow) that had already been filed and were available by that date, each with the period it describes (data_time) and the SEC filing date (publication_time). Later restatements are never leaked back into an earlier date, which avoids look-ahead bias in backtests and research. Fields with no data public by that date are listed in unavailable_fields, never filled with zeros. Also returns source, quality and limitations. US SEC filers, annual data only; not investment advice.

Parametersas_ofrequiredsymbolrequiredapi_keymarketplace_license_key

Version history

2
  1. v1.0.1LatestOct 8, 2026
  2. v1.0.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.