Drillr — The financial MCP for AI agents
by drillr.ai · remote · no sign-in to list tools · v2.3.0 · published by ai.drillr
Financial data and research MCP for US/CN/JP equities: filings, statements, ownership, signals.
10 tools: 1 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http drillr https://gateway.drillr.ai/mcp/dataFindings
Matches of fixed checks, with the text they matched.
- Warnrun_sql
The server marks "run_sql" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_sql" says "run": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
10 tools
Changes things 1Claude Code: ask
run_sqlPostgreSQL SELECT over financial / market / alt-data tables — returns structured rows.1 finding
Why it is in this group
- The name "run_sql" says "run": a word for a change.
- The input takes a statement or command to run (input.sql), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_sql" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_sql" says "run": a word for a change.
Description, as the server wrote it 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_end` is 'YYYY-MM'. Compare as strings (`period_end >= '2024-01'`); a `::date` cast on it fails. - Filter structured tables by ticker (`WHERE ticker IN ('AAPL','MSFT')`; screening: add `ticker 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=[...])
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
Only reads 9Claude Code: allow
ai_adoptionSearch concrete enterprise AI applications disclosed in US company earnings calls.No findings
Why it is in this group
- The description's first verb is "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
company_searchUse for qualitative company discovery (industry, business model, supply chain, competitors, management background).No findings
Why it is in this group
- The name "company_search" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
filing_listUse to discover which SEC filings exist for a ticker before searching content.No findings
Why it is in this group
- The name "filing_list" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
filing_searchSearch one company's SEC filings.No findings
Why it is in this group
- The name "filing_search" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
get_table_schemaColumn definitions (name, type, description) for a data table, plus its usage note where one exists: required filters, ticker format, and market coverage.No findings
Why it is in this group
- The name "get_table_schema" says "get": a word for reading.
Description, as the server wrote it Column definitions (name, type, description) for a data table, plus its usage note where one exists: required filters, ticker format, and market coverage.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
industry_inflectionsSearch industry inflections identified through structured research of earnings calls held by US-listed companies, including the change mechanism, impact scope, market attention and…No findings
Why it is in this group
- The description's first verb is "search": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
list_tablesList alternative-data tables under the given categories.No findings
Why it is in this group
- The name "list_tables" says "list": a word for reading.
Description, as the server wrote it 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
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
news_searchUse for any news, event, development, or statement question about a company, theme, or the market.No findings
Why it is in this group
- The name "news_search" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
ticker_lookupResolve a company name, brand, or ticker substring to canonical ticker(s).No findings
Why it is in this group
- The name "ticker_lookup" says "lookup": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 2.3.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http drillr https://gateway.drillr.ai/mcp/dataRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__drillr__filing_list",
"mcp__drillr__filing_search",
"mcp__drillr__company_search",
"mcp__drillr__ticker_lookup",
"mcp__drillr__get_table_schema",
"mcp__drillr__list_tables",
"mcp__drillr__news_search",
"mcp__drillr__industry_inflections",
"mcp__drillr__ai_adoption"
],
"ask": [
"mcp__drillr__run_sql"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as drillr. Review it before you use it.