Skip to main content
“Compatible” on this site means the request and response shapes match the Financial Datasets interface closely enough that an existing client can switch base URLs and keep working. It does not mean the two servers behave identically everywhere they overlap. This page is the itemized version of that claim. Monid Finance MCP is an independent, Monid-backed implementation. It is not affiliated with or endorsed by Financial Datasets, and no Financial Datasets data or code is used. Every claim below was checked on 2026-09-04 by sending the same request to both APIs and diffing the responses field by field.

Tool status

All 27 Financial Datasets MCP tool names are implemented against live Monid routes and contract tested. The advertised names and input schemas are diffed against the captured Financial Datasets surface by test, so the two cannot silently drift. Tool descriptions are this server’s own prose. Call any of them over MCP at /mcp or /api.

REST coverage

All 54 Financial Datasets REST paths are registered, and every one of them answers from a live source. There are no stubs.
/financials/as-reported, /financials/income-statements/as-reported, /financials/balance-sheets/as-reported and /financials/cash-flow-statements/as-reported read the rendered statement files EDGAR generates from a filing’s own XBRL presentation linkbase, so the line_items tree is the filing’s hierarchy.They match Financial Datasets’ structure, not its labels. Apple’s filing prints “Gross margin” where Financial Datasets prints “Gross Profit”, and this server prints what the filing prints. full_label comes from the row’s XBRL element name, so it agrees with theirs either way.

Deviations that will change a client’s behavior

These routes work, but not the way Financial Datasets does. Read them before pointing an existing integration here.

Cash flow statement source

Measured 2026-09-04 against SEC XBRL across eight large caps (AAPL, MSFT, XOM, KO, TSLA, PFE, VZ, NVDA), the normalized statements feed’s cash flow subtotals came back: operating 8/8 correct, investing 0/8, financing 4/8, net change in cash 0/8. Apple FY2025 investing read 27,910,000,000 against the 10-K’s 15,195,000,000; Microsoft FY2026 read -23,552,000,000 against SEC’s -139,500,000,000. The cash flow statement is therefore sourced from marketbeat, which matched SEC line for line on every figure checked. That applies on every path that builds one: get_cash_flow_statement, get_all_financials, and search_line_items when a cash flow field is requested. Income statement and balance sheet stay on the normalized feed, which agrees with SEC where measured. Two consequences a caller will notice. marketbeat does not report share_based_compensation or ending_cash_balance, so those two fields are omitted on annual, quarterly and ttm cash flow records rather than carried over from a feed proven wrong on three of four subtotals. And the correction costs one extra provider call per statement, $0.02 measured, which is why search_line_items only pays it when the requested line items include a cash flow field. The defect was reported to the upstream provider on 2026-09-04.

REST and MCP disagree on defaults

The same tool can return different data depending on which transport called it, if you rely on a default instead of passing the parameter. get_income_statement, get_balance_sheet, get_cash_flow_statement, and get_financial_metrics default period to ttm in the MCP tool schema, matching the published Financial Datasets schema. The REST route for the same data defaults an omitted period to annual, because the REST handler always fills a value before calling the tool. Pass period explicitly on both transports. get_filings defaults limit to 100 over MCP and to 10 over REST, for the same reason.

Response contract

A success response contains only Financial Datasets schema keys, in schema property order. A field the server cannot source is left out, never set to null or guessed. Every failure uses the Financial Datasets {"error": <code>, "message": <text>} shape, covered in Errors. Pagination follows Pagination. Cost and provenance never appear in a response body. They go to a receipts ledger, one row per Monid call, recording the provider, endpoint, run id and measured cost.

Known gaps, endpoint by endpoint

cik is accepted for parity but answers bad_request. get_company_facts sources ticker and name only.
Trailing-twelve-month rows are built locally from four consecutive quarters. Flow fields are summed, weighted-average shares averaged, and balance-sheet fields carry over from the final quarter. TTM rows omit fiscal_period and currency, and omit filing identity, since a TTM window spans more than one filing.
get_stock_prices returns ascending time order. Week, month and year bars are aggregated locally from daily bars. time is the bar’s end date in UTC. interval_multiplier must be 1.
get_filing_items accepts include_exhibits for parity, but true answers bad_request.
/filings/items runs the extraction inline and returns items on the same response. It never issues a request id, so /filings/items/requests/{request_id} answers not_found for any id rather than reporting a request as pending that will never complete.
get_earnings with a ticker composes records from 10-K and 10-Q filing events only; 8-K earnings releases are not composed. Without a ticker it answers the Nasdaq earnings calendar feed, five records. Records omit any block whose period is absent from the underlying statements matrix.
get_financial_metrics leaves out fields needing a historical market price we do not have: enterprise_value, price_to_* ratios, EV multiples, free_cash_flow_yield, peg_ratio, return_on_invested_capital, currency, filing_datetime.
Financial Datasets allows up to 5000. This server caps at 15, the size of the validated SEC Form 4 feed it reads. form_type filtering is rejected, because the underlying route reports no form types. name is the raw insider relationship text, which carries the person’s job title where Financial Datasets returns the name alone. title, transaction_code, security_title and shares_owned_before_transaction are omitted.
Measured 2026-09-04: the newest record in the 13D feed behind /beneficial-ownership and /activist-ownership was filed 2026-03-06, roughly six months back. This is not a real-time feed. Every row carries its own filing_date and event_date so recency is readable directly. Insider ownership is a different case and tracked filings within days.
Financial Datasets returns 26 fields per stake; this server sources 11. The voting and dispositive power columns, issuer_cik, issuer_cusip, accession_number and the amendment fields are absent from the 13D/13G feed this reads, so they are omitted. share_change and share_change_percent are extra, and genuinely sourced.
Financial Datasets returns 21 fields; this server sources 9. title, is_officer, is_board_director, is_ten_percent_owner and the derivative-security block need a Form 3/4/5 XML parse this route does not do. form_type filtering is rejected: the feed carries no Form 3/5 classification.
screen_stocks executes exchange and market_cap with the eq operator through the Nasdaq screener. Any other field or operator answers bad_request before any Monid call. list_stock_screener_filters lists only those two, not the full Financial Datasets catalog of 113 filterable fields.

Should you migrate an existing integration

If your integration reads normalized statements, metrics, prices, filings, news, earnings, ownership or KPI data, and does not depend on the omitted fields above, pointing your base URL and key here is close to a drop-in swap. Do not migrate yet if you depend on cik-keyed company lookup, market-wide news, or an unscoped IPO or investor listing. The as_reported=true flag on the normalized statement tools is also still rejected; ask the dedicated as-reported routes above for that hierarchy instead. File an issue on GitHub if you need one of those.