Drillr — The financial MCP for AI agents
Server Details
Financial data and research MCP for US/CN/JP equities: filings, statements, ownership, signals.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Little-Grebe-Inc/drillr-mcp-server
- GitHub Stars
- 8
- Server Listing
- drillr-mcp-server
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes (e.g., filing_list vs filing_search, list_tables vs get_table_schema). However, ai_adoption and industry_inflections both analyze earnings-call-derived insights, and company_search vs ticker_lookup could be confused for company discovery, though descriptions clarify the distinction.
Tool names mostly follow a clear noun/verb pattern: run_sql, list_tables, get_table_schema, filing_list, filing_search, company_search, ticker_lookup. Minor deviations: ai_adoption and industry_inflections are noun phrases rather than verb_noun, but the pattern is still readable and predictable.
10 tools is well-scoped for a financial data platform covering company discovery, filings, news, alt-data, and SQL access. Each tool covers a distinct data access pattern without feeling bloated.
The surface covers company search, filings, news, alt-data exploration, and SQL querying—a solid lifecycle for financial research. Minor gaps: no direct tool for downloading raw filing documents or exporting data, and ai_adoption/industry_inflections are specialized but not exhaustive for all alt-data categories.
Available Tools
10 toolsai_adoptionARead-onlyInspect
Search concrete enterprise AI applications disclosed in US company earnings calls. Filter by ticker, partially match a company name, search for an application or workflow by name, or use since in YYYY-MM-DD format to include only observations updated on or after that date. Returns a data array ordered by update_date descending. Each result contains ticker, company_name, application_name, first_report_date, update_date, summary (an AI application summary), evolution_summary, business_position, deployment_stage, deployment_scope, value_type, metrics (application-related metrics), and evidence (supporting management quotes, with speaker and section when available). Use this tool to identify where and how a company applies AI, assess deployment maturity, scope, and disclosed value, and inspect the supporting evidence. Use no filters to browse the most recently updated observations. No matches return an empty data array.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based page number. Default 1. | |
| limit | No | Results per page. Default 10, max 10. | |
| since | No | Only return observations with update_date on or after this date. Use YYYY-MM-DD. | |
| ticker | No | Optional US ticker filter, up to 10 symbols. Accepts one symbol or a list. Company names are not resolved. | |
| company_name | No | Case-insensitive partial company-name match. Empty means no filter. | |
| application_name | No | Case-insensitive partial application-name match. Empty means no filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, so the description adds value by stating the result ordering (update_date descending) and the empty-array behavior on no matches. It also details the fields returned, giving agents a clear picture of the output.
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 main action and filter options, but it is long and lists all output fields, which could be trimmed if an output schema were present. It is still organized and each sentence earns its place, though it is not highly concise.
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 tool with six parameters and no output schema, the description covers the filters, output structure, and ordering. It also explains the default browse mode and empty results. It is complete enough for an agent to call it correctly, though pagination behavior is left to the schema.
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 100%, so the schema already documents each parameter. The description adds minor usage hints like the date format for 'since' and partial matching semantics, but does not add significant meaning beyond the schema. Baseline 3 is appropriate.
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 opens with a clear verb and resource: 'Search concrete enterprise AI applications disclosed in US company earnings calls.' It specifies the domain and distinguishes it from sibling search tools by focusing on AI adoption data. The list of output fields further clarifies what the tool returns.
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 states the intended use cases: 'identify where and how a company applies AI, assess deployment maturity, scope, and disclosed value, and inspect the supporting evidence.' It also gives a default behavior for no filters: 'Use no filters to browse the most recently updated observations.' It does not name alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_searchARead-onlyInspect
Use for qualitative company discovery (industry, business model, supply chain, competitors, management background). For numerical screening (revenue, margins, ratios, growth rates) use run_sql on company_snapshot instead.
Drillr's company knowledge graph — searchable across industry classification, product offerings, business model, segment structure, competitive landscape, supply chain, management background, and customer profile.
Coverage: US, Japan, Hong Kong, China A-shares, and Korea. market accepts one lowercase value or a list from us | jp | hk | cn | kr; omit it or pass [] for all five. List order does not set priority.
Pass a natural-language description (for example, "Hong Kong and China EV battery suppliers"). Returns a structured list of matching companies with context snippets.
ONLY for finding a LIST of companies by description.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language company description | |
| market | No | Optional market filter. Pass one lowercase value or a list from 'us' | 'jp' | 'hk' | 'cn' | 'kr'. Omit or pass [] for all five; list order does not set priority. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive; the description adds meaningful behavior: returns a structured list with context snippets, accepts natural-language queries, covers exactly five markets, and clarifies that list order carries no priority. This complements the annotations without contradicting them.
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?
Information is front-loaded with the most important usage distinction first, and each paragraph has a clear role. Some redundancy exists between the first and second paragraphs' lists of qualitative dimensions, but the structure is still easy to scan and not bloated.
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?
With no output schema, the description compensates by specifying the return shape as a structured list with context snippets. It covers input format, market enumeration, coverage, and scope, which is sufficient for a two-parameter discovery tool; only minor output-field detail is 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 100%, so the baseline is 3; the description adds a concrete query example and expands the meaning of the market filter with coverage context and the 'omit or [] for all five' rule. Most market details repeat the schema, but the example and qualitative framing provide extra value.
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 opens with a specific verb and resource: qualitative company discovery across named dimensions, and closes with a constraint that it is ONLY for finding a list of companies by description. It also distinguishes itself from run_sql's numerical screening, making the tool's identity unambiguous even without an explicit title.
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 explicitly states when to use the tool (qualitative discovery) and when not to (numerical screening), naming run_sql on company_snapshot as the alternative. The final line 'ONLY for finding a LIST of companies by description' provides a hard boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filing_listARead-onlyInspect
Use to discover which SEC filings exist for a ticker before searching content. For the actual content use filing_search instead.
List indexed SEC filings for a given ticker with a summary header.
Returns: summary (period coverage, per-type counts) + table of up to 50 filings (fiscal_year, fiscal_quarter, filing_type, filing_date, period_start, period_end).
filing_types filter: omit for main reports only (US 10-K/10-Q/20-F/S-1/DEF 14A
/A amendments; JP 120/140/160; A-share annual_report / quarterly_report / q1_report; excludes ad-hoc 8-K/6-K); pass [] for all indexed types; pass explicit allowlist to override.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Stock ticker, e.g. NVDA, 6758.T, 00700.HK, 600519.SH | |
| filing_types | No | Filter by filing type. Omit for default (periodic reports + IPO/shelf registrations + amendments; excludes ad-hoc disclosures). Pass [] for all indexed types. Pass an explicit allowlist to override — use values from the `filing_type` column of a prior unfiltered call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context beyond annotations: it explains the default behavior of the 'filing_types' filter (omit for main reports only, excludes ad-hoc), and describes the exact return structure (summary + table up to 50 filings). It also mentions the need to pass [] for all indexed types or an allowlist. It doesn't mention pagination limits beyond 50, but that is explicit in the return. Strong supplemental context.
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 well-structured: it starts with the primary purpose, then the alternative, then the behavior, and ends with filter details. It is dense but every sentence earns its place. The formatting with line breaks for returns and filter details improves readability. It is concise given the complexity it covers.
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 tool's moderate complexity (2 params, no output schema), the description is complete for effective invocation. It doesn't need to explain return values because it explicitly lists the summary fields and table columns. It covers the nuanced filing_types behavior thoroughly, which is the main source of confusion. Annotations cover mutability. No gaps that would prevent correct use.
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 100%, so baseline 3. However, the description adds significant meaning beyond the schema: it explains the default behavior of filing_types in detail (what types are included/excluded) and instructs to pass [] for all indexed types or an explicit allowlist. It also clarifies the purpose of the return values (summary + table). This goes beyond the schema's straightforward parameter descriptions, enriching the agent's understanding of how to use the filter.
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 is very specific about its purpose: discovering which SEC filings exist for a ticker before searching content. It clearly states the resource (SEC filings for a ticker) and the action (list). Sibling differentiation is excellent: it explicitly contrasts with 'filing_search' for content, and other siblings like 'list_tables' or 'run_sql' are clearly different. The summary header and return table are described.
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 provides explicit guidance on when to use this tool: 'to discover which SEC filings exist... before searching content'. It also explicitly states when to use the alternative: 'For the actual content use filing_search instead.' This is a clear when/when-not with named alternative. No further exclusions needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filing_searchARead-onlyInspect
Search one company's SEC filings. Returns ## Facts (exact as-reported and restated financial values) and ## Passages (matching filing text) — both come back in one call.
ticker is REQUIRED. When ## Facts is empty, read ## Passages — the figure is usually stated in the filing text.
period_start/period_end match by interval overlap; fiscal_period sets granularity (Q1..Q4/H/9M/FY). Pass an explicit period window for the most recent figure.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Publication cutoff date YYYY-MM-DD. Rows with missing published_at still appear; not a strict point-in-time snapshot | |
| query | Yes | Natural-language financial metric query | |
| top_k | No | Max results; 1-30, default 10 | |
| ticker | Yes | Required. Canonical or historical ticker; one only. Resolve company names with ticker_lookup first | |
| period_end | No | Calendar end date YYYY-MM-DD (calendar, not fiscal) | |
| period_type | No | instant or duration | |
| period_start | No | Calendar start date YYYY-MM-DD (calendar, not fiscal; resolve fiscal periods via financial_statements period_start/period_end) | |
| fiscal_period | No | Q1 | Q2 | Q3 | Q4 | H | 9M | FY, or a list of those |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable behavioral context beyond that: it reveals the call returns both Facts and Passages in one response, and that an empty Facts section should prompt reading Passages – a fallback behavior that is not obvious from annotations or schema. It also mentions interval-overlap matching for period parameters, which is a useful behavioral nuance.
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 three sentences with zero fluff. The core purpose is front-loaded, followed by the most important usage tip (ticker required), then the fallback behavior, then period semantics. Every sentence earns its place, and the structure makes it easy to scan.
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 an 8-parameter tool with no output schema, the description covers the essential facts: what it returns, how to handle an empty Facts section, and how to use period parameters. It does not explain every parameter, but the schema handles that. The main missing piece is guidance on tool selection (when to use this vs. filing_list), which is partially covered under usage_guidelines. Overall, it is complete enough for correct 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?
Schema description coverage is 100%, so the schema already documents all 8 parameters with detailed descriptions. The description adds meaning beyond that by explaining that period_start/period_end match by interval overlap and that fiscal_period sets granularity – details not present in the schema. It also reinforces that ticker is required, which is already in the schema but is a critical constraint. This goes beyond the baseline 3.
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 opens with 'Search one company's SEC filings' – a specific verb, resource, and scope. It then names the two output sections (Facts and Passages), which differentiates it from sibling tools like filing_list (likely listing filings) and news_search. An agent can tell this is the tool for searching a single company's financial filings without opening the 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?
The description gives operational guidance: 'ticker is REQUIRED' and 'Pass an explicit period window for the most recent figure.' It also instructs to read Passages when Facts is empty. However, it does not explicitly state when to use this tool versus alternatives like filing_list or company_search. It implies this is for searching filings but never names a sibling or a condition that would route the agent elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_schemaARead-onlyInspect
Column definitions (name, type, description) for a data table, plus its usage note where one exists: required filters, ticker format, and market coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| table_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior. The description adds useful context by clarifying that the output is metadata (column definitions) rather than table data, and that a usage note with required filters, ticker format, and market coverage may be included where one exists.
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, front-loaded sentence that states the core return value first and the optional usage-note detail second. There is no filler, redundancy, or repeated schema information.
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 simple one-parameter, read-only metadata tool with no output schema, the description explains the return value sufficiently: column names, types, descriptions, and optional usage notes. The enum schema covers valid inputs, so nothing critical is missing for correct 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 single parameter table_name is self-explanatory and the enum exhaustively enumerates valid table names, so the agent can invoke the tool correctly despite 0% schema description coverage. However, the description itself adds little semantic detail about the parameter beyond referring to 'a data table'.
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 clearly states that the tool returns column definitions (name, type, description) for a data table, plus an optional usage note. It names a specific resource and output, and the behavior is distinct from siblings like list_tables or run_sql.
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 implies it is the tool for inspecting table metadata, but it never explicitly states when to use it instead of alternatives like list_tables or run_sql. The usage context is inferable from context but not made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
industry_inflectionsARead-onlyInspect
Search industry inflections identified through structured research of earnings calls held by US-listed companies, including the change mechanism, impact scope, market attention and affected companies.
All filters are optional and combine with AND. With no filters, returns the newest first page. Results are ordered by quarter descending. If nothing matches, returns the text No relevant industry inflections found.
Returns JSON as { "data": [...] }. Every result contains quarter, name (English title), regime_type (change mechanism), impact_scope, impact_degree (limited | significant | structural), attention_verdict (market-absorption judgment), change_summary, first_seen (YYYY-MM-DD), and source_tickers (companies whose calls are primary evidence). When impact_companies is true, company_impacts contains items with ticker, relation, direction, magnitude, impact_stage, evidence_status, affected_business, and impact.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based page number. Default 1. | |
| limit | No | Results per page. Default 10, max 10. | |
| ticker | No | Optional company filter, up to 10 US ticker symbols. Returns themes where any supplied ticker is a source company or an affected company. Use symbols such as AAPL, not company names. | |
| keyword | No | Optional case-insensitive text contained in the theme name or research summary, up to 200 characters. | |
| impact_companies | No | Include the per-company company_impacts list. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and non-destructive, so the description doesn't need to emphasize safety. It adds value by disclosing the response format, ordering, and no-match message. However, it doesn't mention any rate limits or potential performance implications, which could be relevant given the pagination limit of 10. Overall, it adds context beyond annotations 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?
The description is well-organized, starting with the main purpose, then filter behavior, then return format details. It's a bit verbose but each sentence serves a purpose: clarifying defaults, ordering, no-match text, and result structure. Could be slightly tightened, but it's structured and front-loaded with the key functionality.
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 tool's moderate complexity (5 optional parameters, no output schema, and structured output), the description covers essential aspects: filter semantics, ordering, default behavior, no-match response, and detailed return fields. It lacks explanations for some return fields (e.g., impact_scope, attention_verdict) but provides enough for an agent to call it correctly. Sibling differentiation is implied but not explicit.
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 100% — each parameter has a description that explains its purpose (e.g., ticker filter, keyword, impact_companies). The tool description adds context on how filters combine (AND) and the default pagination, which the schema doesn't state. But the schema already covers parameter meaning well, so the description adds marginal value.
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 clearly identifies the tool as searching for 'industry inflections' identified from earnings calls, specifying the resource and its key attributes. It distinguishes this from siblings like 'company_search' or 'news_search' by focusing on structured research of earnings calls and the specific data fields returned.
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?
Explicitly states that all filters are optional and combine with AND, the default behavior (newest first page), and the exact ordering. It also describes the no-match return value, which guides agents on what to expect. This is sufficient guidance for when to use this tool versus alternatives, as it's a specialized search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesARead-onlyInspect
List alternative-data tables under the given categories. Returns each table's name, one-line purpose, and column names (call get_table_schema if you need column types/comments). Batch up to 5 categories in one call; omit categories, or pass ["all"], to get the category index instead.
Use this BEFORE run_sql when you want to explore alt-data — run_sql alone won't tell you which tables exist.
Available categories:
Energy & Power — US power plants, electricity prices, regional hourly generation/demand
Data Centers — facilities, GPU clusters, cooling
Semiconductors — AI chip specs, sales, ownership, foundry revenue, customs trade
Compute Pricing — GPU rental, cloud VM spot/on-demand, instance specs
Model Development — model specs, benchmarks, AI companies, AI polling, LLM arena
Inference Economics — LLM API pricing across providers
Macro & Trade — UN Comtrade, US Census trade flows, FRED macro series
Prediction Markets — Polymarket and Kalshi events, markets, trades, daily aggregates
Critical Minerals — USGS mineral deposits, country supply, critical materials
| Name | Required | Description | Default |
|---|---|---|---|
| categories | No | Altdata category names (see tool description for the list). Omit, or pass "all", for the category index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds batching limit (up to 5 categories), behavior when omitted or 'all', and what is returned (name, purpose, column names). No contradiction.
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?
Well-structured with purpose first, then details, usage guidance, and categories. Slightly long but every sentence serves a purpose. Could be slightly more concise but effective.
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?
No output schema, but description covers what is returned (name, purpose, column names) and directs to get_table_schema for types. Includes batching and categories. Complete for a listing 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 coverage is 100% with enum list and description. Description reinforces the categories list and adds batching instructions and behavior when omitted. Adds value beyond schema, so slightly above baseline 3.
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?
Clearly states 'List alternative-data tables under the given categories' with specific verb and resource. Distinguishes from siblings like get_table_schema and run_sql by explaining what each returns and when to use them.
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?
Explicitly says 'Use this BEFORE run_sql when you want to explore alt-data' and mentions get_table_schema for more details. Provides clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
news_searchARead-onlyInspect
Use for any news, event, development, or statement question about a company,
theme, or the market. The ticker filter takes exchange-suffixed symbols.
Returns Markdown: a ## Stories numbered list (each storyline once), then flat
## Events and ## Claims tables (claims = attributed statements: analyst
actions, corporate guidance, central-bank remarks). The Events story column
refers back to the Stories number. sources counts corroborating reports;
first_reported/last_reported give the reporting span. Lowest-ranked stories
are dropped to fit length; the meta line flags how many were omitted.
At least one of query/theme/ticker/since/until is required. Per-parameter detail is on the input schema — search_type=claims needs query/ticker/a time window, not theme.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Semantic query (English). One of query/theme/ticker/since/until required. | |
| since | No | ISO8601; filter time_event >= since. | |
| theme | No | Theme word, resolved to the nearest canonical theme. Not valid with search_type=claims. | |
| top_k | No | Story count. Default 10, max 50. | |
| until | No | ISO8601; filter time_event < until. | |
| ticker | No | Exact ticker symbol(s) — a single symbol, an array, or a comma-separated string; multiple tickers are an OR/overlap filter. Exchange-suffixed (AAPL, 7203.T, 600519.SH). Company names/brands are NOT resolved here. | |
| order_by | No | Result ordering. relevance (default) | event_time (newest event time first) | create_time (most recently ingested first). | |
| search_type | No | all (default) | events | claims (opinions/statements only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as a safe read (readOnlyHint, non-destructive), so the bar is lower. The description adds substantial behavior beyond that: exact Markdown return shape, meanings of columns, the relationship between Events story numbers and Stories, and the fact that lowest-ranked stories are dropped with a meta-line omission count. No contradiction exists.
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 dense but efficient, starting with the intended use, then the output shape, then essential constraints. Every sentence communicates a distinct fact needed to call the tool correctly. It is appropriately sized for an 8-parameter search tool with no output schema.
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?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: Markdown structure, numbered stories, flat events/claims tables, reference columns, source counts, reporting span, and dropped-story behavior. It also covers requirements and constraints, making it complete for an agent to invoke 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 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining cross-parameter requirements, that tickers must be exchange-suffixed, that multiple tickers act as an OR/overlap filter, and that company names/brands are not resolved. This is useful but not exhaustive for every parameter, so a 4 is appropriate.
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 clearly states the tool is for news, event, development, or statement questions about companies, themes, or the market. It names the resource (news stories/events/claims) and the main filtering dimensions. It does not explicitly contrast itself with sibling tools like company_search or filing_search, so it stops short of a 5.
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 opens with an explicit 'Use for any news...' usage condition and adds concrete parameter-level guidance, such as 'search_type=claims needs query/ticker/a time window, not theme' and 'At least one of query/theme/ticker/since/until is required.' It does not mention alternative sibling tools or state when to prefer them, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_sqlARead-onlyInspect
PostgreSQL SELECT over financial / market / alt-data tables — returns structured rows.
Hard rules (query fails otherwise):
SELECT only, no CTE (
WITH ... AS) — use subqueries.Period columns are TEXT, not dates —
period_endis 'YYYY-MM'. Compare as strings (period_end >= '2024-01'); a::datecast on it fails.Filter structured tables by ticker (
WHERE ticker IN ('AAPL','MSFT'); screening: addticker NOT LIKE '%-%'to drop preferred stock).
Tables by domain (get_table_schema gives columns + coverage note):
Market: price_volume_history (OHLCV history; MUST filter ticker + time_frame), index_price, equity_extended_rt (pre/after/overnight quotes)
Fundamentals: financial_statements (GAAP income/balance/cashflow), company_snapshot (ratios, per-share, growth)
Earnings: earning_call_summary, earning_call_calendar
Analyst: analyst_ratings, analyst_ratings_consensus
Ownership: insider_and_institution_activities
8-K events: executive_change, company_deal_events, debt_issuance, securities_offering
Executives: executive_profile, executive_compensation
Alt-data: macro / industry / trade / AI-supply-chain — call list_tables(categories=[...])
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | PostgreSQL SELECT query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'SELECT only' and 'query fails otherwise' for rule violations. It discloses critical behavioral traits: period columns are TEXT and must be compared as strings, CTEs are disallowed, and certain tables require mandatory filters. This goes well beyond the annotations by explaining the data model quirks and failure conditions, giving the agent a thorough understanding of how the tool behaves.
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 long but well-organized into logical sections: purpose, hard rules, and table categories. It front-loads the core purpose and then dives into necessary details. Every sentence serves a purpose—either clarifying rules or listing tables—so there's minimal redundancy. While it's verbose, the complexity of the tool justifies the length, and the structure aids comprehension. It could be slightly more concise, but it's still efficient for the information conveyed.
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 tool with this level of complexity (multiple table domains, strict query rules), the description is remarkably complete. It covers the key constraints, table inventory, and references to companion tools (get_table_schema, list_tables) for deeper schema exploration. The return type is mentioned ('structured rows'). The only thing not covered is the exact schema of each table, but that's delegated to get_table_schema, so the description does its job without overreaching.
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?
There is only one parameter (sql) with a minimal schema description ('PostgreSQL SELECT query'). The tool description vastly enriches this by explaining the expected query format, constraints, and examples (e.g., WHERE ticker IN ('AAPL','MSFT')). It also lists the tables and hints on filtering, effectively teaching the agent how to construct valid queries. This far exceeds the schema's minimal documentation, making parameter semantics exceptionally clear.
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 opens with a precise statement: 'PostgreSQL SELECT over financial / market / alt-data tables — returns structured rows.' It names a specific verb (run) and resource (SQL query over financial tables), and clearly distinguishes itself from sibling tools like company_search and news_search by focusing on structured SQL access. The mention of returning structured rows further clarifies the output, leaving no ambiguity about what the tool does.
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 provides explicit usage context: it's for SELECT queries on structured tables, with hard rules and a detailed table listing by domain. It also references get_table_schema and list_tables for additional schema and category info, effectively guiding the agent on how to proceed. While it doesn't explicitly state 'use this instead of X' for each sibling, the scope is clear, and the guidance on filtering by ticker and time_frame is actionable. The only minor gap is the absence of explicit 'when not to use' statements for alternative tools, but the domain-specific focus makes the usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticker_lookupARead-onlyInspect
Resolve a company name, brand, or ticker substring to canonical ticker(s).
Input:
query (required): company name, brand, or ticker substring, e.g. "Apple", "AAPL", "OpenAI"
market (optional): "us" | "jp" | "cn" — omit to search all markets
Returns up to 5 matches ranked by prefix-hit first, then name length; symbols carry their market suffix.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Company name or ticker substring (case-insensitive). Matches historical names + tickers too. | |
| market | No | Optional market filter: 'us' | 'jp' | 'cn'. Omit to search all markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail: it discloses the ranking logic (prefix-hit first, then name length), the result cap (up to 5 matches), and the fact that symbols carry a market suffix. This goes beyond what annotations provide, giving the agent clear expectations of how results are ordered and limited.
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 well-organized with an opening purpose statement followed by a clear 'Input' section and a note on output. It is concise and front-loaded, making it easy to scan. However, the market value list is redundant and partially incorrect, which is a structural flaw that detracts from its efficiency.
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 description covers the input parameters, the result limit, and ranking logic, but it omits behavior for no-match cases (e.g., what happens if no ticker matches) and does not mention that historical names are also matched (which the schema notes). Given the tool's simplicity and the absence of an output schema, this leaves minor but relevant gaps that could affect correct usage.
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 description adds useful examples for 'query' and clarifies the expected input format, but it introduces a serious inconsistency: it lists market values as 'us' | 'jp' | 'cn' while the schema enum includes five values ('us', 'jp', 'hk', 'cn', 'kr'). This misleading subset could cause an agent to omit valid market filters or mistakenly believe other markets are unsupported. Since schema coverage is 100%, the description should align exactly with the schema, and this discrepancy actively harms parameter understanding.
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 clear, specific action: resolving a company name, brand, or ticker substring to canonical ticker(s). It names the resource (tickers) and the operation (resolve), and the examples make the intent unambiguous. While it does not explicitly differentiate from the sibling 'company_search', the purpose is self-contained and obvious.
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 implies its use case (converting names/brands to tickers) but provides no explicit guidance on when to prefer this tool over alternatives like 'company_search' or 'news_search'. It does not mention exclusions or alternative tools, leaving the agent to infer the appropriate selection from the purpose alone.
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.
1 tool update
- Changed
news_search1 field changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Exact ticker symbol(s) — a single symbol, an array, or a comma-separated string; multiple tickers are an OR/overlap filter. US symbols bare (AAPL); other markets carry their exchange suffix — 7203.T, 00700.HK, 600519.SH. Company names/brands are NOT resolved here; resolve a name via ticker_lookup/company_search first."New value: +"Exact ticker symbol(s) — a single symbol, an array, or a comma-separated string; multiple tickers are an OR/overlap filter. Exchange-suffixed (AAPL, 7203.T, 600519.SH). Company names/brands are NOT resolved here."
7 tool updates
- Added
ai_adoption - Added
filing_list - Added
filing_search - Added
industry_inflections - Removed
sec_report_list - Removed
sec_report_search - Changed
ticker_lookup1 field changed- changed
Input schema / properties / market / descriptionPrevious value: -"Optional market filter: 'us' | 'jp' | 'hk' | 'cn' | 'kr'. Omit to search all markets."New value: +"Optional market filter: 'us' | 'jp' | 'cn'. Omit to search all markets."
1 tool update
- Removed
fiscal_utility
1 tool update
- Removed
search_data_catalog
1 tool update
- Added
search_data_catalog
1 tool update
- Removed
search_data_catalog
1 tool update
- Added
search_data_catalog
2 tool updates
- Changed
company_search2 fields changed- changed
Input schema / properties / market / anyOfPrevious value: -[ - { - "enum": [ - "us", - "jp", - "hk", - "cn" - ], - "type": "string" - }, - { - "items": { - "$ref": "#/properties/market/anyOf/0" - }, - "maxItems": 4, - "type": "array" - } -]New value: +[ + { + "enum": [ + "us", + "jp", + "hk", + "cn", + "kr" + ], + "type": "string" + }, + { + "items": { + "$ref": "#/properties/market/anyOf/0" + }, + "maxItems": 5, + "type": "array" + } +] - changed
Input schema / properties / market / descriptionPrevious value: -"Optional market filter. Pass one lowercase value or a list from 'us' | 'jp' | 'hk' | 'cn'. Omit or pass [] for all four; list order does not set priority."New value: +"Optional market filter. Pass one lowercase value or a list from 'us' | 'jp' | 'hk' | 'cn' | 'kr'. Omit or pass [] for all five; list order does not set priority."
- Changed
ticker_lookup2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"Optional market filter: 'us' | 'jp' | 'hk' | 'cn'. Omit to search all markets."New value: +"Optional market filter: 'us' | 'jp' | 'hk' | 'cn' | 'kr'. Omit to search all markets." - changed
Input schema / properties / market / enumPrevious value: -[ - "us", - "jp", - "hk", - "cn" -]New value: +[ + "us", + "jp", + "hk", + "cn", + "kr" +]
1 tool update
- Changed
list_tables4 fields changed- changed
Input schema / properties / categories / descriptionPrevious value: -"Altdata category names (see tool description for the list)"New value: +"Altdata category names (see tool description for the list). Omit, or pass \"all\", for the category index." - changed
Input schema / properties / categories / items / enumPrevious value: -[ - "Energy & Power", - "Data Centers", - "Semiconductors", - "Compute Pricing", - "Model Development", - "Inference Economics", - "Macro & Trade", - "Prediction Markets", - "Critical Minerals" -]New value: +[ + "Energy & Power", + "Data Centers", + "Semiconductors", + "Compute Pricing", + "Model Development", + "Inference Economics", + "Macro & Trade", + "Prediction Markets", + "Critical Minerals", + "all" +] - removed
Input schema / properties / categories / minItemsRemoved value: -1 - removed
Input schema / requiredRemoved value: -[ - "categories" -]
2 tool updates
- Changed
company_search6 fields changed- added
Input schema / properties / market / anyOfAdded value: +[ + { + "enum": [ + "us", + "jp", + "hk", + "cn" + ], + "type": "string" + }, + { + "items": { + "$ref": "#/properties/market/anyOf/0" + }, + "maxItems": 4, + "type": "array" + } +] - changed
Input schema / properties / market / descriptionPrevious value: -"Optional market filter: 'us' | 'jp' — the knowledge base covers US + Japan companies only. Omit to search both."New value: +"Optional market filter. Pass one lowercase value or a list from 'us' | 'jp' | 'hk' | 'cn'. Omit or pass [] for all four; list order does not set priority." - removed
Input schema / properties / market / enumRemoved value: -[ - "us", - "jp" -] - removed
Input schema / properties / market / typeRemoved value: -"string" - changed
Input schema / properties / query / descriptionPrevious value: -"natural language query"New value: +"Natural-language company description" - added
Input schema / properties / query / minLengthAdded value: +1
- Changed
fiscal_utility1 field changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker (e.g. AAPL, MSFT, NVDA)"New value: +"Stock ticker. Coverage is primarily US; sparse JP/HK; no China A-share configuration."
5 tool updates
- Changed
company_search1 field changed- added
Input schema / properties / marketAdded value: +{ + "description": "Optional market filter: 'us' | 'jp' — the knowledge base covers US + Japan companies only. Omit to search both.", + "enum": [ + "us", + "jp" + ], + "type": "string" +}
- Changed
news_search1 field changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Exact ticker symbol(s) — a single symbol, an array, or a comma-separated string; multiple tickers are an OR/overlap filter. Bare symbols only, no exchange suffix. Company names/brands are NOT resolved here; resolve a name via ticker_lookup/company_search first."New value: +"Exact ticker symbol(s) — a single symbol, an array, or a comma-separated string; multiple tickers are an OR/overlap filter. US symbols bare (AAPL); other markets carry their exchange suffix — 7203.T, 00700.HK, 600519.SH. Company names/brands are NOT resolved here; resolve a name via ticker_lookup/company_search first."
- Changed
sec_report_list1 field changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker, e.g. NVDA, AAPL"New value: +"Stock ticker, e.g. NVDA, 6758.T, 00700.HK, 600519.SH"
- Changed
sec_report_search1 field changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker, e.g. NVDA, AAPL"New value: +"Stock ticker, e.g. NVDA, 6758.T, 00700.HK, 600519.SH"
- Changed
ticker_lookup2 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"Optional market filter: 'us' | 'jp'. Omit to search both."New value: +"Optional market filter: 'us' | 'jp' | 'hk' | 'cn'. Omit to search all markets." - changed
Input schema / properties / market / enumPrevious value: -[ - "us", - "jp" -]New value: +[ + "us", + "jp", + "hk", + "cn" +]
4 tool updates
- Added
news_search - Removed
signal_list - Added
ticker_lookup - Removed
ticker_resolve
Related MCP Connectors
Financial data MCP for market, company, news, macro, and US Congress research.
SEC & financial-data MCP: filings, financials, ownership, factors, fund letters, prompts.
SEC filings, financial statements, metrics, insider and institutional holdings as structured data
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceQuery SEC EDGAR filings, XBRL financials, and company data through MCP.698 npm10Apache 2.0
- AlicenseAqualityBmaintenanceAn MCP server that wraps SEC EDGAR APIs to provide company financial data, screening metrics, and disclosure signals for investment diligence, with every figure traced to its source filing.8MIT
- AlicenseNot gradedqualityCmaintenanceHosted MCP server providing read-only access to US public company fundamentals, segment breakdowns, peer comparisons, and earnings data sourced directly from SEC filings.MIT
- AlicenseNot gradedqualityBmaintenanceWall Street data feed for AI agents, providing access to 100M+ source-traced SEC records, institutional holdings, insider trades, congress trading, and more via MCP tools.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.