market-research-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@market-research-mcppull Apple's latest 10-K from SEC EDGAR and note the filing date"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
market-research-mcp
An MCP server that gives Claude read-only access to public market data: SEC EDGAR filings, FRED macro series and end-of-day prices.
Not financial advice. The server returns data with its source and retrieval date. It never produces buy/sell recommendations or price targets.
Read-only by construction. There is no code that places, modifies or cancels orders or moves money.
Bring your own keys. Keys are read from environment variables or a local
.envfile.
Setup
Requires uv (it installs Python 3.12+ for you).
git clone <repo-url> market-research-mcp
cd market-research-mcp
uv sync
cp .env.example .env # then fill in your keys
uv run pytest -m "not live"Related MCP server: Stock MCP Server
Register in Claude Code
claude mcp add market-research -- uv --directory /path/to/market-research-mcp run market-research-mcpInstall as a Claude Code plugin
The repository is also a Claude Code plugin marketplace. The market-research plugin starts
this MCP server and adds the analyze-ticker skill (a sourced one-page brief per ticker, checked
by skills/analyze-ticker/scripts/check_sources.py).
Install uv. The plugin runs the server with
uv run.Put your keys in the per-user settings file (create it from
.env.example):%APPDATA%/market-research-mcp/.envon Windows,~/.config/market-research-mcp/.envelsewhere. Real environment variables also work and take precedence. Do not put a.envin the plugin folder: it is replaced on every plugin update and is never read.SEC_USER_AGENT: your name and email, required by the SEC fair access policy. No key needed.FRED_API_KEY: free key from FRED.TIINGO_API_KEY(from Tiingo) orFINNHUB_API_KEY(from Finnhub) withPRICE_PROVIDER.Optional
JOURNAL_DIR: briefs go to<JOURNAL_DIR>/analyses/, otherwise./analyses/.
In Claude Code, add the marketplace (replace
<owner>with the GitHub owner of this repository):/plugin marketplace add <owner>/market-research-mcpInstall the plugin:
/plugin install market-research@market-research-mcp, then restart Claude Code or run/reload-plugins.Ask "analyze MSFT" or run
/market-research:analyze-ticker MSFT. MCP clients without skills can use the server'sanalyze_tickerprompt, which returns the same procedure.
Environment variables
Variable | Required for | Default |
| SEC EDGAR (for example | none |
| FRED macro data | none |
| Price source: |
|
| Prices via Tiingo | none |
| Prices via Finnhub | none |
| SQLite cache location |
|
| Log verbosity (logs go to stderr) |
|
| Output folder for |
|
| Path of a | none |
Where settings come from, highest priority first:
Real environment variables.
The file named by
MRM_ENV_FILE, if set. Otherwise the per-user file%APPDATA%/market-research-mcp/.env(Windows) or~/.config/market-research-mcp/.env(elsewhere;$XDG_CONFIG_HOMEis honoured)..envin the current working directory (for a clone, the repository root).
A .env inside the installed plugin folder (CLAUDE_PLUGIN_ROOT) is never read.
Missing keys do not stop the server; a tool that needs a key returns an error naming it.
License
MIT
Available Tools
11 toolsget_earnings_calendarA
Next earnings date per ticker within days_ahead days (1-180, max 20 tickers).
Source: Finnhub earnings calendar; when Finnhub has nothing (or no key / unavailable) the
date is estimated from prior SEC 8-K Item 2.02 filings and marked estimated=True.
Each row names its own method and source. No EPS or revenue forecasts are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes | ||
| days_ahead | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| source_url | Yes | |
| window_end | Yes | |
| retrieved_at | Yes | |
| window_start | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it names the data source (Finnhub), discloses the fallback to SEC 8-K Item 2.02 estimation, and says estimates are marked estimated=True. It omits auth/rate-limit behavior, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, front-loaded with the core action and limits, then source and caveats. Every sentence carries information; no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details are not required; the description still notes that rows carry their own method/source and estimated flag, and explicitly excludes EPS/revenue. Adequate for a 2-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: it gives the days_ahead range (1-180) and a max of 20 tickers, neither present in the schema. It does not restate the default of 30, a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'next earnings date per ticker within days_ahead days', with scope limits (1-180 days, max 20 tickers). It is unambiguous, though no sibling is named because none of the listed tools cover earnings dates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope (days ahead, max 20 tickers) implies when the tool applies, but there is no explicit when-to-use/when-not-to-use guidance or pointer to an alternative for EPS/revenue data beyond the negative 'No EPS or revenue forecasts are returned.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_exhibitA
Plain text of one exhibit of a filing (e.g. "EX-99.1", the press release attached to
an earnings 8-K), in chunks of about 24,000 characters. Pass the returned next_cursor
to get the next chunk. Get accession numbers from list_filings. Source: SEC EDGAR.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| ticker | Yes | ||
| exhibit | Yes | ||
| accession | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| form | Yes | |
| text | Yes | |
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| exhibit | No | |
| section | No | |
| accession | Yes | |
| source_url | Yes | |
| chunk_index | Yes | |
| next_cursor | No | |
| total_chars | Yes | |
| retrieved_at | Yes | |
| total_chunks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses chunk size (~24,000 characters), cursor-based continuation, plain-text return, and SEC EDGAR source. It omits rate limits, authentication needs, and error behavior, so it is useful but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core return, then pagination, dependency, and source in compact sentences. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be explained; the description covers chunking, pagination with cursor, and where to get accession numbers. It is complete enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it explains cursor as the next-chunk token, gives an exhibit example, and points to list_filings for accession numbers. Ticker and exact accession format are left to inference, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it returns plain text of one filing exhibit, gives the EX-99.1 press-release example, and scopes it to chunked retrieval. It distinguishes from list_filings by directing accession lookup there, but does not explicitly contrast with sibling get_filing_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides the prerequisite to get accession numbers from list_filings and explains pagination by passing next_cursor. Gives clear context for use, but does not state when to prefer this over get_filing_section or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_sectionA
Plain text of one section of a 10-K or 10-Q filing, in chunks of about 24,000
characters. section: an item such as "1A", "Item 7", "7A", "1", "2", "Part II Item 1A",
or a name such as "Risk Factors" or "MD&A" (10-Q: MD&A is Part I Item 2). Pass the
returned next_cursor to get the next chunk. Get accession numbers from list_filings.
Source: SEC EDGAR.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| ticker | Yes | ||
| section | Yes | ||
| accession | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| form | Yes | |
| text | Yes | |
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| exhibit | No | |
| section | No | |
| accession | Yes | |
| source_url | Yes | |
| chunk_index | Yes | |
| next_cursor | No | |
| total_chars | Yes | |
| retrieved_at | Yes | |
| total_chunks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and usefully discloses chunk size (~24,000 characters), cursor-based pagination, plain-text output, and SEC EDGAR as the source. It does not mention rate limits, authentication, or error behavior, but the core retrieval behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then efficiently covers section formats, pagination, and accession sourcing. Every sentence adds useful information without wasting space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be fully described, and the description still explains chunking and cursor behavior. It is nearly complete for invocation, though ticker semantics and any error/rate-limit context are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters, and it does so well for section, cursor, and accession. Ticker is left implicit as a company ticker, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving the plain text of one 10-K or 10-Q section, returned in chunks. It does not explicitly distinguish this from sibling tools such as get_filing_exhibit, but the section-level scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: get accession numbers from list_filings, use section identifiers such as "1A" or "Risk Factors," and pass next_cursor for subsequent chunks. It does not explicitly say when to choose this over get_filing_exhibit or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fundamentalsA
Company fundamentals from SEC XBRL filings (10-K/10-Q), newest period first.
metrics: any of revenue, gross_profit, operating_income, net_income, diluted_eps,
basic_eps, operating_cash_flow, capex, total_debt, cash, shares_diluted,
shares_outstanding (default: all). periods: "annual" or "quarterly". n: number of
periods (1-40). Each value carries the XBRL tag used, the period dates, the filing's
form, accession, filed date and URL. Missing values are null with a reason.
Source: SEC EDGAR XBRL companyfacts.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| ticker | Yes | ||
| metrics | No | ||
| periods | No | annual |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| name | Yes | |
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| values | Yes | |
| metrics | Yes | |
| periods | Yes | |
| source_url | Yes | |
| retrieved_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does so fairly well: it discloses the data source, newest-first ordering, and that missing values are null with a reason. It also describes per-value metadata such as XBRL tag, period dates, form, accession, filed date, and URL, though it does not mention rate limits or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then structured into metrics, periods, n, return metadata, missing-value behavior, and source. Every sentence adds useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, an output schema, and four parameters, the description supplies enough context to call the tool correctly: it covers the data source, allowed metrics, period options, range for n, ordering, missing-value behavior, and per-value provenance. Return shape is handled by the output schema, so no further return-format explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it enumerates all valid metrics with the default of all, defines periods as annual or quarterly, and constrains n to 1-40. It omits the n default of 5 and does not explicitly define ticker, but those are minor gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and source: company fundamentals from SEC XBRL filings (10-K/10-Q), newest period first. It is clearly distinct in subject matter from siblings like get_price_history or get_insider_transactions, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool's domain and the detailed parameter values, but there is no explicit when-to-use guidance or comparison to siblings such as list_filings or get_filing_section. An agent can infer the tool is for financial fundamentals, but must decide on its own when this is preferable to filing-level tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_transactionsA
Insider transactions reported on SEC Form 4, newest first: insider, role, date,
transaction code, shares, price, holdings after, derivative flag and Rule 10b5-1 flag.
Only non-derivative codes P and S count as open-market purchases/sales; derivative rows,
awards (A), tax withholding (F), option exercises (M) and other codes are labelled not
open-market. Includes Form 4/A amendments (an amendment replaces its original in the
totals). Filings where the company reports as an owner of another issuer are skipped.
since is a filing
date (YYYY-MM-DD, default 12 months ago). Source: SEC EDGAR Form 4.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| name | Yes | |
| as_of | Yes | |
| items | Yes | |
| limit | No | |
| notes | No | |
| since | Yes | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| summary | Yes | |
| truncated | No | |
| source_url | Yes | |
| retrieved_at | Yes | |
| filings_capped | Yes | |
| filings_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that filings where the company is an owner of another issuer are skipped, that Form 4/A amendments replace originals in totals, and that non-P/S codes are labelled not open-market. It omits auth/rate-limit and pagination behavior, but the substantive data-handling semantics are unusually clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the resource and ordering come first, then the counting rules, then amendments/skips, then parameter detail. Some clauses (derivative flag, Rule 10b5-1 flag) border on return-value enumeration better suited to the output schema, but nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so explaining return values is largely redundant, yet the description still signals what each row contains. Combined with the data-exclusion semantics, an agent has what it needs to call correctly; only the `limit` semantics and any auth/rate constraints are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It fully documents `since` (filing date, YYYY-MM-DD, default 12 months ago) but says nothing about `limit` (schema default 50) or clarifies `ticker` format — partial compensation only, so the 3 baseline is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (SEC Form 4 insider transactions), the returned fields, ordering ('newest first'), and the domain rules that distinguish it from sibling filing/fundamental tools. An agent can tell immediately this is the insider-trading dataset, not general filings or price data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly scopes usage through the `since` default (12 months) and the explicit rule that only codes P and S count as open-market. It doesn't name a sibling alternative or state when NOT to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_seriesA
Fetch FRED macro time series (e.g. DGS10, CPIAUCSL, UNRATE, FEDFUNDS).
Returns, per series: title, units, frequency, last_updated and observations
(date, value; missing values are null) oldest to newest, the last `limit` points
on or after `start` (YYYY-MM-DD). `as_of` is the date of the last observation.
Up to 10 series per call. Source: FRED, Federal Reserve Bank of St. Louis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| start | No | ||
| series_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does well: it explains return fields, missing-value handling, observation ordering, limit/start filtering, as_of, the 10-series cap, and the FRED source. It does not mention permissions, rate limits, or error behavior, so it stops short of fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by return semantics and constraints with no filler. Every sentence contributes useful operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read tool with an output schema and no annotations, the description supplies enough operational context to invoke it correctly: it covers series examples, the cap per call, limit/start semantics, and return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains limit ('last limit points'), start ('YYYY-MM-DD'), and series IDs through examples plus the 'Up to 10 series per call' constraint, though it does not explicitly restate that series_ids is a required array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch FRED macro time series' with concrete series examples. The resource is clearly distinct from the sibling tools, which cover prices, filings, fundamentals, and earnings rather than macro time series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the domain-specific purpose and examples such as DGS10 and CPIAUCSL, but the description does not explicitly say when to use this tool versus alternatives or when not to use it. No sibling routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyA
Daily price bars (OHLCV plus adjusted close) for a US ticker from one price provider.
Only interval "1d" is supported. Dates are YYYY-MM-DD. Returns at most `limit` most recent
bars in the range. The response names the provider; there is no fallback to another one.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| ticker | Yes | ||
| interval | No | 1d |
Output Schema
| Name | Required | Description |
|---|---|---|
| bars | Yes | |
| as_of | Yes | |
| limit | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| interval | Yes | |
| provider | Yes | |
| truncated | No | |
| source_url | Yes | |
| retrieved_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose real behavior: single-provider sourcing with no fallback, the response naming the provider, hard truncation to the `limit` most recent bars, and daily-only granularity. It omits error behavior for invalid tickers, timezone/session semantics, and whether missing bars are dropped or padded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool returns before the constraints. No filler, though the trailing clause about provider fallback could be folded more tightly into the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with 0% schema description coverage, no annotations, and only an output schema to lean on, the description covers the essentials but leaves default/null resolution for start and end, limit bounds, and range-inversion behavior undocumented. It is callable but not fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds meaning for four of five params: date format for start/end, '1d' only for interval, 'at most `limit` most recent bars' for limit, and US-only scope for ticker. It never explains what null start/end defaults to, whether limit has a maximum, or the ordering of returned bars.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+shape: 'Daily price bars (OHLCV plus adjusted close) for a US ticker from one price provider.' That is far more precise than the name alone and scopes it to US tickers and daily granularity. It never names the nearest sibling (get_price_stats), so the differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It rules out things ('Only interval "1d" is supported', 'no fallback to another one'), which usefully prevents wrong calls. But it gives no positive guidance on when to pick this over get_price_stats or get_macro_series, and no prerequisites such as whether the ticker must be resolved first via resolve_ticker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_statsB
Price statistics from one provider's adjusted closes: 1m/3m/1y/5y returns (21/63/252/1260 trading days), 5-year max drawdown with peak and trough dates, 52-week high/low and 1-year annualized volatility. Descriptive only; not a recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| low_52w | Yes | |
| returns | Yes | |
| high_52w | Yes | |
| provider | Yes | |
| source_url | Yes | |
| retrieved_at | Yes | |
| volatility_1y | Yes | |
| last_adj_close | Yes | |
| max_drawdown_5y | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: adjusted closes, exact trading-day windows, max drawdown peak/trough dates, and annualized volatility. However, it leaves out important context such as which provider is used, whether ticker resolution is required, and whether adjusted-close data may differ from other price tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the resource and lists the specific computed metrics without filler. Every clause adds useful information about what is returned or how it should be interpreted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not fully explain return values, and it already adds useful metric detail. Still, it lacks sibling differentiation and ticker semantics, which are relevant gaps for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage and the description never mentions the ticker parameter or its expected format. For a single required parameter named ticker, the meaning is somewhat obvious, but exchange, symbol format, and resolution behavior are undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: price statistics computed from one provider's adjusted closes, with returns, drawdown, 52-week range, and volatility. It is clear what the tool returns, but it does not explicitly distinguish itself from the sibling get_price_history tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says the output is descriptive only and not a recommendation, which gives some context, but it provides no explicit guidance on when to use this instead of get_price_history or other price-related siblings. The agent must infer the choice from metric names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filingsA
List a company's SEC filings, newest first. Filter by form types (e.g. ["10-K",
"10-Q", "8-K"]) and filing date since (YYYY-MM-DD). Source: SEC EDGAR.
| Name | Required | Description | Default |
|---|---|---|---|
| forms | No | ||
| limit | No | ||
| since | No | ||
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| name | Yes | |
| as_of | Yes | |
| items | Yes | |
| limit | No | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| truncated | No | |
| source_url | Yes | |
| retrieved_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses result ordering ('newest first') and the data source (SEC EDGAR), but says nothing about pagination, EDGAR rate limits, or error behavior for unknown tickers — notable gaps for an external-API-backed read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then filters, then provenance. Every sentence carries information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be described, and the read-only nature is self-evident from 'List'. The description is nearly sufficient, with the only real shortfall being `limit`/pagination semantics for a tool that can return large filing histories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it does add real value for two of four params — an example array for `forms` and the YYYY-MM-DD format for `since` (which the bare string schema lacks). However, `limit` (default 20, max unknown) and `ticker` format go unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List a company's SEC filings') plus the ordering ('newest first'), which cleanly separates it from siblings like get_filing_section and get_filing_exhibit that fetch document contents rather than the filing index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context (company filing index, SEC EDGAR source) and mentions the two filters, so the intended usage is implied, but it never states when to prefer this over get_filing_section/get_filing_exhibit or what to do with the results. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Check that the market-research server is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full disclosure burden; it conveys that this is a non-mutating liveness check by implication, but never states side-effect-free behavior, cost/latency, or what a failure looks like. Because an output schema exists, omission of return details is acceptable, keeping this at a minimum-viable 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, exactly proportionate to a trivial liveness probe. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health check with an output schema already defining the response, the description covers what an agent needs to select and invoke it. A brief note on typical placement (pre-flight vs. troubleshooting) would close the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. The description adds no misleading parameter hints, which is the correct behavior here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('check') and resource ('the market-research server is running'), making the health-check nature unambiguous. It does not explicitly differentiate itself from the ten data-retrieval siblings, but the distinction is obvious from the verb and the zero-parameter schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is a connectivity/liveness probe, but the description never says when to call it (e.g., before a batch of data calls, or after a suspected outage) or that it should not be used to validate data availability. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_tickerA
Resolve a ticker (e.g. MSFT, BRK.B) or company name to its SEC CIK, exchange and SIC industry code. Source: SEC EDGAR.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| sic | No | |
| name | Yes | |
| as_of | Yes | |
| notes | No | |
| stale | No | |
| source | Yes | |
| ticker | Yes | |
| exchange | No | |
| source_url | Yes | |
| retrieved_at | Yes | |
| sic_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It adds useful context by naming the source, SEC EDGAR, and listing the returned identifiers, but it does not describe behavior for ambiguous matches, not-found cases, rate limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no wasted text. The core action and output fields are front-loaded, followed by the data source.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has one parameter, and an output schema exists, so the description does not need to explain return values in detail. It adequately covers the input and output identifiers, though it omits edge-case behavior for ambiguous or invalid queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify the single parameter, and it does: 'query' accepts either a ticker (with examples MSFT, BRK.B) or a company name. This meaningfully compensates for the bare schema, though it does not specify case sensitivity or ambiguity handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Resolve', and clearly states the resource: a ticker or company name mapped to SEC CIK, exchange, and SIC industry code. It is precise enough that an agent can distinguish this lookup tool from sibling tools like get_price_history or list_filings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: it is for converting a ticker or company name into SEC identifiers. It does not explicitly state when not to use it or name alternatives, but no sibling tool provides the same resolution capability, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
get_earnings_calendar - First observed
get_filing_exhibit - First observed
get_filing_section - First observed
get_fundamentals - First observed
get_insider_transactions - First observed
get_macro_series - First observed
get_price_history - First observed
get_price_stats - First observed
list_filings - First observed
ping - First observed
resolve_ticker
TDQS
Scored across 11 tools
Each tool targets a distinct resource: prices (history vs. stats), SEC filings (list vs. section vs. exhibit), insider transactions, fundamentals, macro series, earnings calendar. The closest pair is get_price_stats vs. get_price_history, but the stat-vs-bars distinction is clearly stated and rarely confused. The filing trio is hierarchical and the descriptions make the entry points obvious.
Uniform snake_case verb_noun convention throughout: get_*, list_*, resolve_*. Only 'ping' lacks a noun, which is conventional for a health check and does not break the pattern.
Eleven tools is squarely in the well-scoped range, and each one maps to a distinct data source or retrieval mode. No filler or redundant tools.
Strong coverage: prices, fundamentals, filings, insider activity, macro data, and earnings dates span the core research workflow. Gaps exist around earnings actuals/EPS surprises, news/sentiment, and peer comparison, but agents can work around these by combining existing tools.
Maintenance
Related MCP Connectors
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
Provide AI assistants with real-time access to official SEC EDGAR filings and financial data. Enab…
Equip AI with tools for researching economic data from Federal Reserve Economic Data (FRED).
Give your agent web search and authoritative datasets: S&P Global, FRED, OECD, SimilarWeb & more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access real-time stock data, financial statements, cryptocurrency information, and market data via the Financial Modeling Prep API.4MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude with free stock-market data including quotes, fundamentals, history, news, index top-10 rankings, market movers, and penny-stock screens using public sources like Yahoo Finance and Wikipedia. No API keys or subscriptions required.-
- AlicenseAqualityBmaintenanceEnables Claude or any MCP host to access live market data—quotes, history, technical indicators, and NYSE status—and answer natural-language questions about stocks.4MIT
- AlicenseAqualityBmaintenanceEnables Claude to access free official financial and economic data from SEC EDGAR, U.S. Treasury, FRED, and the World Bank, including XBRL financial statements, key metrics, filings, insider trades, 13F portfolios, market prices, and macroeconomic series.20MIT