Skip to content
Agentmart
Submit a tool

Flexreport Finance

Live market events, research reports, and 750M+ curated equity datapoints on 2,900+ companies.

Connector by flexreportfinapi.com · Domain verified by the MCP Registry

IndexedLicense unknownRemote (HTTP)★ 22
Write a review

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/flexreportfinapi-com-flexreport-finance

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.flexreportfinapi.com/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Live market events, research reports, and 750M+ curated equity datapoints on 2,900+ companies.

Use cases: finance-accounting, deep-research

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
35 read · 16 write · 5 delete
Secrets
None asked for
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 56

Read from the source code; the running server may list different tools.

Read 35 · Look things up without changing anything.

  • detect_intraday_outlier_jumps
  • download_dataset
  • download_pdf_from_url
  • draft_custom_dataset
  • get_aftermarket_data
  • get_company_event_web
  • get_company_snapshot
  • get_document_section
  • get_event_ontology
  • get_latest_report
  • get_signed_sql_drilldown
  • get_stock_picks
Show 23 more tools
  • get_strategy_performance_summary
  • get_strategy_swaps
  • get_strategy_track_record
  • get_task_status
  • get_technical_indicator_data
  • get_user_dataset_file
  • get_user_template
  • is_market_open
  • list_available_reports
  • list_earnings_announcements
  • list_options
  • list_realtime_events
  • list_saved_queries
  • list_scheduled_tasks
  • list_sub_industries
  • list_user_datasets
  • optimize_portfolio_default
  • predict_earnings_move
  • run_saved_query
  • situate
  • stream_event_subscription
  • stream_events
  • trace_data_sources

Write 16 · Create, change, send or run things.

  • draft_user_template
  • explore_data_catalogue
  • explore_data_coverage
  • generate_report_for_stock
  • generate_research_report
  • manage_billing
  • onboard_symbol
  • optimize_portfolio
  • register_event_subscription
  • save_user_dataset
  • save_user_query
  • save_user_template
Show 4 more tools
  • schedule_task
  • screen_stocks
  • update_user_template
  • upgrade_plan

Delete 5 · Delete, drop, revoke or wipe things.

  • delete_event_subscription
  • delete_saved_query
  • delete_scheduled_task
  • delete_user_data_feed
  • delete_user_template

Network hosts it talks to 3

  • app.flexreportfinapi.com · found in code
  • flexreportfinapi.com · found in code
  • mcp.flexreportfinapi.com · found in remote endpoint, install command, code

Files it touches

  • Any path the agent passes to its tools

Tools (56)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • delete_event_subscriptionDelete Event Subscriptioncan change or delete data

    Remove a saved event subscription (`DELETE /event-subscription/{subscription_id}`). Returns {"status": "DELETED", "subscription_id": ...}; any stream still open on it ends with a `closed` frame within one read cycle (<= 8 s). 404 `unknown subscription_id` for a missing id or another user's id. Registrations are rate-limited (30/hour), so delete subscriptions the user is done with rather than registering fresh ones for every session. Requires auth (your MCP client attaches the OAuth bearer automatically).

  • delete_saved_queryDelete Saved Data Requestcan change or delete data

    Delete one of your saved data requests by id. Deletion is permanent and touches no data, but the query tokens go with the row and cannot be reconstructed: re-creating it means running `explore_data_catalogue` again and re-saving. When more than one row looks like a match, confirm WHICH one with the user before calling. Ownership is enforced server-side. A 404 ("No saved query with id N") means the id does not exist OR is not yours — the backend deliberately does not distinguish the two, so never tell the user the row belongs to someone else. Returns {"msg": "Deleted saved query <id>"}. Req…

  • delete_scheduled_taskDelete Scheduled Taskcan change or delete data

    Delete a scheduled task (cron job) by its name. For workflow schedules `task_name` is the value `schedule_task` returned as `task_name`. Deleting removes only the cron schedule; the saved workflow definition is kept and can be re-scheduled by re-saving it via `schedule_task`. For a "ds:" dataset schedule the dataset and its files stay (re-save via `save_user_dataset` to resume; `delete_user_data_feed` removes the dataset itself). Returns {"msg": "<task_name> deleted"} on success, or an error if no such task exists.

  • delete_user_data_feedDelete User Data Feedcan change or delete data

    Delete one of the user's own datasets completely: its schedule, every file it built, its fixed latest_url link, and the saved query behind it. It can't be undone — confirm with the user first, naming the dataset. To only stop the builds and keep the files, use delete_scheduled_task("ds:{email}:{name}") instead. Returns {msg, dataset_id, schedule_deleted, files_deleted, saved_query_deleted}. Errors: 404 = the user has no dataset of that name; 503 = a step failed partway — call again with the same name (every step is safe to repeat). Requires auth (your MCP client attaches the OAuth bearer aut…

  • delete_user_templateDelete Saved PDF Templatecan change or delete data

    Delete the user's saved PDF template so their PDFs go back to the standard layouts. Permanent and there is no history: re-creating the format means drafting and saving again. Confirm with the user before calling. Ownership is enforced server-side, so only the caller's own template can be removed. Returns {"msg": "Template deleted. Your PDFs will use the standard layouts."}. A 404 means there was nothing saved to delete. Requires auth (your MCP client attaches the OAuth bearer automatically). Rate-limited 100/min.

  • detect_intraday_outlier_jumpsDetect Intraday Outlier Jumpsread-only

    Live look at TODAY's intraday tape, flagging outlier price jumps. Pulls today's intraday bars for `symbol` (US/Eastern trading day) live at the given `frequency` and flags each bar whose move is a statistical outlier versus the stock's own daily-return volatility — i.e. bars where |z-score| of the move exceeds `zscore_threshold`. Use it for a quick "is the stock making an abnormal intraday move right now?" read. Synchronous — returns the flagged bars directly (no task id to poll). Returns a 404-style error if no intraday data is available yet (e.g. before the market opens or for an uncovered…

  • download_datasetDownload Dataset Feedread-only

    Read one of Flexreport's versioned daily data feeds by date — the feeds and what each holds come from list_options("data_feeds"). Use it over explore_data_catalogue when one of those feeds answers the ask for a date or date range. RATE-LIMITED TO 3 CALLS PER WEEK per user (all datasets together, failed calls included): make ONE call with the narrowest dates, never test-fire it, never re-call because a result was trimmed, and never poll it from a dashboard — fetch once and embed the rows. list_options("data_feeds") lists the feeds — free, no rate limit — each as {dataset, description, returns,…

  • download_pdf_from_urlDownload Report PDFread-only

    Fetch a presigned S3 PDF URL server-side and return the document as base64. Use this to pull the actual PDF bytes for a presigned S3 link — e.g. the `url` returned by `get_latest_report` — on clients that can't open the link directly and need the document inline. The backend fetches the URL for you (clients never have to reach S3) and streams the PDF back. Only S3 URLs are accepted: the host must end in "amazonaws.com" and contain "s3"; any other host is rejected with a 400 (SSRF guard). NOTE: if you already have `get_latest_report`'s `report` field (the same PDF inline as base64), use that d…

  • draft_custom_datasetDraft Custom Datasetread-only

    EVENT/NEWS FEEDS (filings, decks, earnings, news) — RESEARCH FIRST, then draft: 1) situate(question=<the user's words>), then get_event_ontology for the feed's event types to learn where each persists (`persisted_in`); 2) agree definitions with the user before drafting — universe, window, and what any loose term means (e.g. the proxy for "the AI trade"); 3) ONE SCOPED explore_data_catalogue census of company_event_node for the universe and window (tickers, dates, a row limit in the wording); 4) draft a request naming the table and column for each field, e.g. title from `earnings` figures, body…

  • draft_user_templateDraft PDF Template Previews

    Render preview images of a user's PDF template so they can approve it BY LOOKING, before anything is saved. THE POINT: a user wants their research in THEIR format — their masthead, colours, layout, branding. A saved template is a BLUEPRINT: the author's stylesheet and page chrome plus one markup pattern per content kind, which the backend applies automatically to every PDF it renders for that user. A template is a visual choice, so it is signed off by looking at rendered pages, never by describing them. This is STEP 1 OF 2: it compiles the submitted HTML into a blueprint under several treatme…

  • explore_data_catalogueExplore Data Catalogue

    Explore Flexreport's data platform with an OPEN-ENDED question — designed to handle many research based or open ended questions, enabling interactive EDA. ===> BEFORE running this, call `list_saved_queries` and match the question against the saved rows — on each row's `metadata` (`summary`, `parameters`, `datasets`), not on the `user_request` label, skipping any row marked `stale`. A row of the same SHAPE — same metric, same window, only the company / filer / date / count differs (saved: "the past 8 quarters of sales for TGT"; asked now: "KSS's last 8 quarters of sales") — is answered by `run…

  • explore_data_coverageExplore Data Coverage

    Answer a question about WHAT THE PLATFORM COVERS — how many symbols a dataset holds, broken down any way you like. ===> THE TOOL for coverage COUNTS and BREAKDOWNS: "how many symbols are covered in the investor relations dataset?", "what's that count by sector — how many tech names?", "how many companies have earnings transcripts / 13F ownership / insider activity / analyst estimates?", "how far back does the fundamentals history go?", "what's your UK coverage by sector?". It plans queries over BOTH the catalogue's own metadata and the datasets themselves, so it can count what no enumeration …

  • generate_report_for_stockGenerate Stock Report

    FULL REBUILD of ONE ticker's report (~10 minutes). Use sparingly — never the first call. The fast path is `get_latest_report([ticker])`: a symbol with a fresh saved report plan comes back under `rendering` and is rendered into the user's template in ~10-20 s; any other symbol comes back with its cached PDF and a `stale` flag. This tool re-runs the whole pipeline — brief, query planning, SQL, formatting — so it is for rebuilds only, in one of two modes: STANDARD (ticker only, ~10 min): rebuilds the symbol's report plan from its latest event and SAVES it, so later `get_latest_report` calls ren…

  • generate_research_reportGenerate Research Report

    Answer an OPEN-ENDED or THEMATIC research QUESTION (extensible, multi-section). ===> THE RIGHT TOOL when the user's intent is a QUESTION rather than a request for an existing report — an exploratory or thesis-style ask about a ticker, or a market-wide theme not tied to one company (e.g. "Are large caps driving earnings season?", "What's the bull/bear case on NVDA?", "high-growth semis with rising estimates"). For a plain "get me the latest report/research on <ticker>", use `get_latest_report` instead. This is the slow, professional DEEP-DIVE — reach for it only when the user EXPLICITLY asks f…

  • get_aftermarket_dataGet Aftermarket Dataread-only

    Query STORED after-hours 15-minute bars (open/high/low/close/volume) for symbols. Returns the extended-hours bars the backend has captured for `symbols` — one row per symbol per 15-minute bar, 16:00-20:00 ET, ordered by symbol then bar time DESC (so the first row per symbol is the latest bar). This is the recorded aftermarket tape, NOT a live feed; it is polled every 15 minutes from 16:30 ET through the evening, so a bar can lag the wall clock by up to ~15 minutes. For a live intraday read of the regular session use `detect_intraday_outlier_jumps` instead. Leave both datetimes off for "today…

Show 41 more tools
  • get_company_event_webGet Company Event Webread-only

    Fetch the connected WEB of what recently HAPPENED to a company — the WHY behind its snapshot, and a time-ordered graph to CHAIN your next calls off. ===> `situate(symbols=[symbol])` already returns this web (newest 12 nodes) PLUS the ontology cards, cache state and an ordered plan — start there. Call this tool directly for the FULL graph or a wider `window_days`, and pair every node you chain off with get_event_ontology(event_type=node.type): the web says WHICH event, the ontology says what it entails and what to do about it. ===> A FIRST-LINE TOOL FOR SINGLE-COMPANY QUESTIONS, not a special…

  • get_company_snapshotGet Company Snapshotread-only

    Fetch a structured, POINT-IN-TIME company snapshot — no report generation needed. Returns thesis/bull/bear, financial overview (Piotroski, valuation signal), price performance + technical indicators, price targets, institutional ownership, and analyst grades for `symbol`. Synchronous and cheap — prefer this for a quick CURRENT read instead of generating a full PDF report. *** POINT-IN-TIME ONLY — THIS IS NOT A TIME SERIES. *** It captures where the company stands right now, not how it got there. Do NOT use it to answer temporal / trend / "over time" questions (e.g. "how has X evolved over th…

  • get_document_sectionGet Source Document Sectionread-only

    Open ONE numbered section of a source document — the exact earnings-call speaker turn a citation points at. The other end of a `trace_data_sources` citation, and the finest grain the platform serves: not the whole call, one turn of it. Use it to read the passage behind a number before quoting it, and to quote a speaker verbatim with the citation intact. Every argument comes off the citation you are following — a `transcript_section` citation's URL is `/query-section?name=...&symbol=...&year=...&quarter=...&n=...`, so read the four values out of it rather than deriving them. If you pulled the…

  • get_event_ontologyGet Event Ontologyread-only

    The platform's event ONTOLOGY — what an event TYPE means for everything else. Call it FIRST on any real-time, single-company, or event-driven request; it is the map the other calls are planned from. ===> `situate(...)` composes this with the event web and the cache state and hands you a plan — start there. Call this tool directly for the FULL card of an event type, a relation card, a whole family, or the unfiltered graph, when the plan did not cover what you need next. ===> REQUISITE for: any real-time / live-events request, any "what happened / why / catch me up" question, and BEFORE aiming…

  • get_latest_reportGet Latest Cached Reportsread-only

    Get the latest Flexreport research report(s) for one or more tickers. USE THIS BY DEFAULT. ===> THIS IS THE DEFAULT, CORRECT TOOL whenever a user asks for "the report", "research", "the latest research", "analysis", "a writeup", or "the PDF" for a ticker (e.g. "get me the latest research on SNOW"). It is the FAST path. For a symbol with a FRESH saved report plan it does not hand back a pre-built PDF: it pulls the plan itself — the JSON the platform saved when the symbol's latest material event published (brief, queries, results, format map) — and renders it straight into the user's template i…

  • get_signed_sql_drilldownRun Signed Drilldown Queryread-only

    Fetch the rows behind an event-web drilldown from its server-minted query token. Some `get_company_event_web` nodes carry `signed_query_url` in their `fetch` hint — an opaque, tamper-proof link the backend minted for exactly that node. This tool is the zero-planning rung of the chain: no query to compose, the rows come back directly. Pass either the full `signed_query_url` or just its `t` parameter; the URL form is unwrapped automatically. A token that came from a SAVED request rather than the event web belongs to `run_saved_query` instead — same endpoint, but it replays every query in the sa…

  • get_stock_picksGet Stock Picksread-only

    Fetch the latest LLM-selected stock picks (current rebalance holdings). Returns `picks`, the holdings selected for the most recent rebalance date — the names the backend's strategies are currently positioned in. Each pick is a record (ticker, strategy, weight, rebalance date, and related fields; values are strings). Synchronous and read-only — no auth required. Each holding also carries a CURRENT-BASKET YTD view: `ytd_return` (that stock's Jan 1 -> now price return) and the strategy-level weighted `basket_ytd_return`. For how the strategies have ACTUALLY performed since inception (the realiz…

  • get_strategy_performance_summaryGet Strategy Performance Summaryread-only

    Leaderboard of since-inception performance vs the S&P 500 for all strategy books. THE first stop for "how are the stock picks / strategies performing?". Returns `strategies`, one headline row per book — the four strategies plus the pooled optimized book — sorted by excess return over the S&P 500: {strategy_name, display_name, inception_date, since_inception_return, sp_since_inception, excess_since_inception, annualized_return, max_drawdown, sharpe, sp_sharpe, ytd_return, growth_strategy, growth_sp, days_tracked}. growth_strategy / growth_sp = what `amount` invested at inception would be wort…

  • get_strategy_swapsGet Strategy Swap Ledgerread-only

    Per-trade swap ledger (adds/drops) vs the S&P 500 for ONE strategy book. Answers "were the individual trades good?": across consecutive weekly rebalances, an ADD is a name newly selected and a DROP a name removed. Each ADD is measured from entry to its exit (or the latest close if still held); each DROP is the FOREGONE return from its exit to the latest close. Both are compared to the S&P 500 over the same window. Returns {strategy_name, trades: [{symbol, action, event_date, window_end, still_open, name_return, sp_return, excess}, ...] (newest first), summary: {n_adds, n_drops, avg_add_exces…

  • get_strategy_track_recordGet Strategy Track Recordread-only

    Since-inception daily track record vs the S&P 500 for ONE strategy book. Returns the realized performance of the book as actually held — chartable series plus headline stats: {strategy_name, book, inception_date, amount_invested, summary: {since_inception_return, sp_since_inception, excess_since_inception, annualized_return, max_drawdown, sharpe, sp_sharpe, ytd_return, growth_strategy, growth_sp, days_tracked, last_date}, series: [{date, strategy_cumulative, benchmark_cumulative, excess, strategy_ytd, growth_strategy, growth_sp, sharpe_expanding, holdings_count}, ...]}. The Sharpe series is …

  • get_task_statusGet Async Task Statusread-only

    Poll the status of an async job (a get_latest_report `rendering` task, generate_report_for_stock, generate_research_report, explore_data_catalogue, explore_data_coverage, draft_custom_dataset, screen_stocks, ...). Returns {"task_id": ..., "status": ..., "result": ...}. `status` is one of PENDING, SUCCESS, FAILURE, RETRY. `result` is populated once status is SUCCESS. A result over ~8 MB is not returned (it would take the server down): the call errors. Re-run the job scoped narrower (tickers, dates, a row limit in the wording) instead of polling it again.

  • get_technical_indicator_dataGet Technical Indicator Dataread-only

    Fetch a historical technical-indicator series for a symbol over a date range. Call `list_options("technical_indicators")` first for valid indicator names. An unknown symbol returns 404 and an unknown indicator returns 400 listing valid values. Returns `rows`, one record per trading day ordered by date (columns beyond date/symbol/close vary by indicator), or an empty list when there's no data in the range. Requires auth (your MCP client attaches the OAuth bearer automatically).

  • get_user_dataset_fileGet User Dataset Fileread-only

    Read the rows of one of the user's saved datasets AS PUBLISHED — the file behind its latest_url, or a dated version. THIS is how a dashboard or an answer reads a dataset: the published file is reviewed at publish, point-in-time, and the same bytes every consumer gets. Never replay the dataset's saved query instead (run_saved_query re-runs live SQL: different rows, no review). A claude.ai artifact can't reach flexreportfinapi.com itself, so its page calls this tool. Fetches the file server-side and parses json, jsonl, csv, tsv, xml, rss and atom files into rows; rss/atom come back one row per …

  • get_user_templateGet Saved PDF Templateread-only

    Return the PDF template this user has saved, or a 404 if they have none. Call it to answer "what format am I on?", BEFORE `save_user_template` when a template may already exist (saving replaces it without history, so the user should know what they are overwriting), and whenever you are about to compose a PDF yourself from Flexreport data: lay the content out in this markup so the document matches the user's format. A 404 there is the cue to offer drafting one (`draft_user_template` -> previews -> `save_user_template`). Returns {"template_type", "template_format", "anchor", "template", "creat…

  • is_market_openCheck Market Open Statusread-only

    Check whether an exchange is currently open — a cheap routing helper. Returns `is_open`, a single boolean. An unknown exchange code is an error. Use it to route between the market-hours tools: when the market is CLOSED, extended-hours data lives in `get_aftermarket_data`; when OPEN, `detect_intraday_outlier_jumps` gives the live intraday read. No auth required. Unsure which exchange a ticker trades on? `get_company_snapshot` returns an `exchange` field whose value can be passed here as-is.

  • list_available_reportsList Available Report Plansread-only

    List the symbols with a report plan SAVED on or after `report_date` (default: TODAY) — the real-time research get_latest_report can render right now, and whether each renders in seconds or needs a rebuild. A plan is saved the moment a material event publishes for a symbol (eps_update, eps_release, 8k_release, financials_release, ir_publication, transcript_update) and nightly for company_update. This tool is the INVENTORY of those plans — it does not build or return a report. Returns `plans`, newest plan first: {"plans": [{"symbol": "NVDA", "event_type": "eps_release", "planned…

  • list_earnings_announcementsList Earnings Announcementsread-only

    List scheduled earnings announcements within a date window, Flexreport names only. Omit both dates for "who reports today". Results are restricted to Flexreport's covered universe, so symbols outside coverage are dropped silently. The optional filters are AND-ed together. `sector`, `industry`, and `market_cap` are validated against fixed enums server-side; invalid values return a 422, so source them from the tools named in their descriptions rather than guessing. Returns `announcements` (empty list when nothing matches); values are strings and "nan" means not available yet. Requires auth (…

  • list_optionsList Valid Parameter Optionsread-only

    Enumerate the valid values for a parameter, straight from the backend. Call this BEFORE guessing a parameter value. `kind` selects which catalog; three kinds are scoped by a query parameter (`ticker`, or `q` / `cik`) and refuse the call without it: - "event_types" -> valid `event_type` for `list_realtime_events` (eps_update, company_update, biggest_mover, ...) - "financial_items" -> standardized EDGAR line items ("revenue", "operatingIncome") for a CUSTOM report's …

  • list_realtime_eventsList Real-Time Market Eventsread-only

    Pull live market events from the backend's Redis-backed cache (12h TTL). ===> Call `situate(...)` FIRST (symbols=[...] for named companies, none for the market): its `cache.present` / `cache.expired` say which types this tool can still return, its `plan` carries the exact calls to make, and its `skip` list names the ones that would return [] — an event older than the 12h cache lives in the ontology card's `persisted_in` relation, not here. Never call this for a type situate marked expired. `list_options("event_types")` remains the enumeration of valid type strings and descriptions. `event_typ…

  • list_saved_queriesList Saved Data Requestsread-only

    List the data requests you have saved with `save_user_query`, newest first. The entry point to the replay flow: check HERE FIRST, before running `explore_data_catalogue` for any exploration question — a saved row that matches the question, exactly OR in shape, means the answer is seconds away via `run_saved_query` instead of a ~1-5 minute planning job. Returns {"count": N, "saved_queries": [{"id", "user_request", "queries", "query_placeholder", "metadata", "created_at", "updated_at"}, ...]}, the calling user's rows only. MATCH ON `metadata`, NOT ON THE LABEL. `metadata` describes what the r…

  • list_scheduled_tasksList Scheduled Tasksread-only

    List the caller's scheduled tasks (cron jobs created via `schedule_task`). Returns `tasks`, only the authenticated user's jobs, each as {"name", "active", "schedule" (cron string), "args", "kwargs", "enabled", "last_run_at", "total_run_count"}. Workflow schedules are named "wf:{email}:{workflow-name}"; dataset builds (save_user_dataset) are "ds:{email}:{dataset-name}". Use `name` as the key to remove a job with `delete_scheduled_task`.

  • list_sub_industriesList Sub-Industriesread-only

    List the sub-industries within one or more sectors. Returns `industries`, the distinct industries used to narrow `list_realtime_events(industry=[...])`.

  • list_user_datasetsList User Datasetsread-only

    List the user's own saved datasets (from save_user_dataset) with their build status and download links to the published files. New items are reviewed before publishing, up to 40 per build (on a large first build the rest publish as queried and are reviewed on later builds; a failed review publishes the items as queried). The review can correct text from stored sources, add a one-line caveat, or hold an item out; links, GUIDs, tickers and dates are never changed. So a file can hold fewer rows than the query returns, and an item already published unreviewed can later be corrected or withdrawn. …

  • manage_billingManage Billing

    Get a link to the Stripe billing portal where the user can view invoices, update their card, or cancel their subscription. Use when the user asks to manage, change, or cancel their billing/subscription.

  • onboard_symbolOnboard New Symbol

    Request onboarding of a NOT-yet-covered ticker (mutating, authenticated). Kicks off a 30-60 min backend workflow and emails the authenticated user when the first report is ready. Rate-limited to 5/hour per user. Use only when a symbol is missing from `list_options("tickers")` / returns no data elsewhere. Returns {"task_id": ..., "status": "PENDING"}.

  • optimize_portfolioOptimize Portfolio (LLM-Curated)

    Build a risk-optimized portfolio from a non-empty list of tickers. Scores `symbols` with the multi-signal scorer, LLM-curates, and risk-optimizes. Rate-limited to 10/hour per user server-side. Asynchronous: returns {"task_id": ..., "status": "PENDING", "supported": [...], "not_supported": [...]}. Poll `task_id` with `get_task_status` until SUCCESS.

  • optimize_portfolio_defaultOptimize Portfolio (Fast)read-only

    Build a risk-optimized portfolio from a list of tickers — fast, synchronous, no LLM. THE DEFAULT optimizer route. Returns the result directly and almost instantly (no task id, no polling). Reach for `optimize_portfolio` instead only when you explicitly want the slower LLM-curated variant layered on top of the optimizers. Symbols are validated against the covered universe; unsupported tickers come back in `missing`, and in-universe tickers with too little price history come back in `dropped`. No auth required (public endpoint). Synchronous. Returns: {"status": "OK", # or "SKIPPED"/"EMPTY…

  • predict_earnings_movePredict Post-Earnings Moveread-only

    Predict how big a stock's move will be when it next reports earnings. For each symbol, returns its next earnings date (today or later) and `expected_move`: the expected absolute move of the reaction session as a log return (0.05 is about 5%; size only, no direction). For context, `hist_move_mean` / `hist_move_n` give the stock's own average reaction over its past reports and how many reports that covers. Symbols with no scheduled report come back in `no_upcoming_earnings_symbols`; uncovered tickers in `not_supported_symbols`.

  • register_event_subscriptionRegister Event Subscription

    Save a realtime-event filter server-side and get a `subscription_id` whose stream resumes where the last read stopped (`POST /register-subscription`). For a live-streaming ask, the default is a dashboard (in Claude, an Artifact) that loops stream_events itself — see stream_events. Register a subscription when the user wants a saved filter that resumes across sessions. Returns {subscription_id, filter, cursor, created_at}. `filter` echoes the normalised filter (topics lower-cased, symbols upper-cased, duplicates dropped); `cursor` is the position the subscription starts from — only events pub…

  • run_saved_queryRun Saved Data Requestread-only

    Re-run a saved request's queries against live data — exactly, or re-aimed at other entities with typed `values`. No planning, no polling. The payoff of `save_user_query`: pass a saved row's `queries` array from `list_saved_queries` and each stored query runs as-is, returning fresh rows synchronously. Use this INSTEAD of `explore_data_catalogue` whenever a saved row already covers the question — same SQL, current data, seconds instead of minutes, and it does not draw on the 20/hour exploration budget. A full signed URL is accepted in `query_tokens` and unwrapped. For a token that came from a …

  • save_user_datasetSave User Dataset

    Save a drafted candidate as the user's scheduled dataset (step 2 of 2, after draft_custom_dataset): its query, the schema it produces, the file format, the date mode and a cron schedule. Each build publishes a new file only when the rows changed; list_user_datasets returns the files. New items are reviewed before publishing, up to 40 per build. On a large first build the rest publish as queried and are reviewed on later builds; a review that fails publishes the items as queried. The review can correct text from stored sources (a cut-off sentence, a fiscal period missing from a title), add a o…

  • save_user_querySave Data Request For Replay

    Save the queries an exploration already planned, so the request can be replayed instantly — exactly, or re-asked for other entities. THE POINT: `explore_data_catalogue` is a full validate -> plan -> run pipeline that re-authors the SQL from scratch on every call (~1-5 min, 20/hour). For a question the user will ask AGAIN — a recurring check, a dashboard they watch, "my usual semis screen" — save the tokens that exploration just produced. `run_saved_query` then re-runs exactly those queries against live data in seconds, with no planning step and no async job to poll. The backend ALSO authors a…

  • save_user_templateSave PDF Template

    Save the user's PDF format — one template per account, applied automatically to every PDF the backend renders for them from now on. STEP 2 OF 2 after `draft_user_template`. Two ways to call it: SIGNED-OFF (the normal path): pass `draft_id` and the `variant_id` the user chose from the previews. The EXACT treatment they looked at is stored — no second adaptation pass that could produce something they never saw. `template`, `template_type` and `anchor` are taken from the draft and may be omitted. A 404 means the draft expired (24h) or the variant does not exist: draft again. DIRECT (no preview…

  • schedule_taskSchedule Recurring Workflow

    Save a multi-step WORKFLOW (upsert by `name`) and attach a recurring cron schedule for its delivery. Use this when the user wants a sequence of platform calls delivered ON A SCHEDULE / repeatedly (e.g. "every weekday morning pull 8-K releases, screen for cheap large-caps, and email me the overlaps as a table"). For a ONE-OFF request, call the corresponding tools directly instead. A request worded as a "datafeed" / "feed" / recurring file is draft_custom_dataset, not this — even with summary columns, since stored summaries are ordinary dataset columns. `steps` (shape in the parameter descript…

  • screen_stocksScreen Stocks

    Screen stocks by financial growth, sector, sub-industry, market cap, analyst ratings, institutional ownership, country, and price performance. Discover valid filter values with the list tools named in each parameter's description before guessing. Rate-limited to 10/hour per user server-side. Asynchronous: returns a task id. Poll it with `get_task_status` until SUCCESS.

  • situateSituate: What Is Going On Right Nowread-only

    THE FIRST CALL. What is going on right now — for the market, or for the named symbols — and a ready-made PLAN of the tool calls that answer the user's question. Call it before any other flexreport tool on anything about a company, an event, or "now". ===> Call this FIRST for: "catch me up on X", "what happened / why", "anything before earnings?", "any earnings / 8-Ks / 13F moves / movers today?", "how is X trading", and BEFORE aiming explore_data_catalogue, list_realtime_events or a report tool at a company. Pass the user's question verbatim in `question`: it is matched by keyword (never an L…

  • stream_event_subscriptionStream Event Subscription (Resumable)read-only

    Read the next events on a saved subscription — a bounded read of `GET /event-subscription/{subscription_id}` that resumes from the position saved when the previous read closed, so repeated calls see every matching event exactly once with no gap and no replay. For a live-streaming ask, the default is a dashboard (in Claude, an Artifact) that loops stream_events with its cursor — see stream_events; a page should prefer that ad-hoc stream, since a subscription read can stall. Returns {"events": [...], "cursor": "<last id seen>", "closed": null | reason, "elapsed_seconds": n} — same shape and ev…

  • stream_eventsStream Realtime Events (Ad-Hoc)read-only

    Listen for realtime events as they publish — a bounded read of the backend's ad-hoc SSE stream (`GET /events`), filter passed inline, nothing saved server-side. DEFAULT DELIVERY — BUILD A DASHBOARD: when the user asks to stream / watch / keep listening for live events, build a live dashboard (in Claude, an Artifact) whose page calls this tool in its own loop, carrying `cursor` from read to read, and renders each event as it lands. One prompt then keeps the stream open with no agent turn per read. If the page cannot reach this server, run the loop yourself and write each event into the dashboa…

  • trace_data_sourcesTrace Numbers To Their Sourcesread-only

    Resolve numbers you are holding back to the documents they were read from — the filing, the section, or the verified quote. The CITATION rung of the chain. `explore_data_catalogue`, `run_saved_query` and `get_signed_sql_drilldown` hand back rows; this says where each number CAME FROM. Reach for it whenever the user asks "where does that come from", "which filing", "can you cite that", "how do you know" — and unprompted before you publish a figure they are going to act on. TWO WAYS IN, and the FIRST is preferred: 1. `relation` + `keys` — `relation` is a name off the result's `sources.r…

  • update_user_templateUpdate Saved PDF Template

    Change your saved PDF template — any field, or none to recompile it as stored. Complements `draft_user_template` (preview), `save_user_template` (create) and `delete_user_template` (remove). Every argument is optional; a field you omit keeps its stored value, and the result is compiled into a blueprint again: - a VISUAL change: draft the new page with `draft_user_template`, show the previews, then pass the chosen `draft_id` + `variant_id` here (both or neither); - a change without previews: pass `template`, `template_type` and/or `anchor` directly (HTML only — markdown is reje…

  • upgrade_planUpgrade Plan

    Get a secure link for the user to upgrade or change their Flexreport Finance plan (e.g. to raise their request limit). Returns a checkout link — the user completes payment in their browser. Call this whenever the user asks to upgrade, subscribe, pay for, or change their plan, or when they've hit a usage/quota limit.

Signals

Stars
22
Forks
5
Open issues
0
Contributors
1
Last commit
Oct 23, 2026 (6 days ago)
Last release
Oct 14, 2026 (15 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
com.flexreportfinapi/flexreport-finance
Version
1.0.0
Auth
Auth not stated
License
License unknown
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

Flexreport Finance MCP server. Agent Mart. https://agentmart.dev/connectors/flexreportfinapi-com-flexreport-finance (last updated 2026-10-24)