Skip to main content
Glama
thesma-dev

Thesma MCP Server

Official
by thesma-dev

screen_companies

Screen US public companies by financial metrics—profitability, growth, leverage—and filter by labor market and SBA lending signals.

Instructions

Find US public companies matching financial criteria. Combine filters: profitability (margins), growth rates, leverage ratios, index membership, SIC code, stock exchange (nyse/nasdaq, comma-separated for multiple), domicile (us/adr), and insider/institutional signals. Supports labor market filters: industry hiring trend, employment growth, wage growth, comp-to-market ratio, and HQ-county LAUS local unemployment (min/max local unemployment rate, local unemployment trend, min local labor force). Supports SBA 7(a) lending filters: local loan count (trailing 4Q in HQ county), local lending growth (YoY %), industry lending growth (NAICS national YoY %), and industry charge-off rate (%). Set include='lending_context' or include='labor_context,lending_context' to surface an SBA lending context summary on each row. Note: include='labor_context' and include='lending_context' require a Pro+ plan. Free/Starter callers receive a tier upgrade message instead of enriched results. Sort by any ratio: gross_margin, operating_margin, net_margin, return_on_equity, return_on_assets, debt_to_equity, current_ratio, interest_coverage, revenue_growth_yoy, net_income_growth_yoy, eps_growth_yoy. Margin/ratio/growth filters use integer percent (20 for 20%, not 0.20). Values 0<x<1 are rejected as ambiguous. Pass 0 for no minimum. Use search='' to filter by name substring or ticker prefix (case-insensitive; server trims/escapes/skips nulls; does not normalise 'BRK.B' vs 'BRK-B' and does not consult ticker aliases; omit search rather than passing an empty string, which the server treats as a no-op; any match lacking a qualifying annual CompanyRatio row is silently excluded by the screener inner-join). Filter by taxonomy='us-gaap' or 'ifrs-full' and/or by presentation currency via currency='' (case-insensitive, e.g. 'USD', 'EUR', 'JPY'); both are server-validated — unknown values return 400. Filter by Russell-index membership: in_index=True returns only companies in any tracked index (sp500, russell1000, or russell2000); in_index=False returns only unindexed companies. Note: combining in_index=False with a query that matches an indexed ticker (e.g. 'AAPL') returns no results because the ticker is filtered out.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sicNo
sortNo
tierNo
limitNo
orderNo
searchNo
includeNo
currencyNo
domicileNo
exchangeNo
in_indexNo
taxonomyNo
min_revenueNo
min_eps_growthNo
min_net_incomeNo
min_net_marginNo
max_gross_marginNo
min_gross_marginNo
min_current_ratioNo
has_insider_buyingNo
max_debt_to_equityNo
min_revenue_growthNo
min_operating_marginNo
min_return_on_assetsNo
min_return_on_equityNo
industry_hiring_trendNo
min_interest_coverageNo
min_local_labor_forceNo
max_industry_quits_rateNo
min_industry_quits_rateNo
local_unemployment_trendNo
max_local_sba_loan_countNo
min_comp_to_market_ratioNo
min_industry_wage_growthNo
min_local_sba_loan_countNo
min_hq_county_wage_growthNo
has_institutional_increaseNo
max_industry_openings_rateNo
min_industry_openings_rateNo
max_local_unemployment_rateNo
min_local_unemployment_rateNo
max_local_sba_lending_growthNo
min_local_sba_lending_growthNo
max_industry_employment_growthNo
min_industry_employment_growthNo
min_industry_sba_lending_growthNo
max_industry_sba_charge_off_rateNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and delivers richly: it discloses server-side handling (trims/escapes/skips nulls, treats empty search as no-op, silently excludes matches lacking an annual CompanyRatio row), value-format rejections (0<x<1 ambiguous), validation outcomes (unknown taxonomy/currency return 400), and membership logic (in_index=False excludes indexed tickers). This level of behavioral detail is exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense—every clause adds operational detail relevant to correct invocation. It leads with the primary purpose and sequentially covers filter domains, enrichment includes, plan constraints, formatting rules, and search behavior. While it could be better structured with bullet lists, the density-for-complexity trade-off is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 47 parameters, no annotations, and no schema descriptions, this description is remarkably complete. It covers all major filter categories, special include options, parameter formats, error cases, search semantics, and membership rules. The existence of an output schema relieves the need to explain return fields, and the description addresses the most complex behavioral edge cases comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 does so by explaining core parameter semantics: sort keys (list of ratio names), value formats (integer percent), search behavior (name substring/ticker prefix, case-insensitive, no normalization), taxonomy/currency validation, and index membership behavior. It does not individually document all 47 parameters, but it groups them clearly and highlights non-obvious quirks. This is well above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Find US public companies matching financial criteria.' It clearly differentiates this tool from sibling tools through its screening/filtering purpose and enumerates the diverse filter types (profitability, growth, leverage, index, SIC, exchange, labor, SBA lending) that distinguish it from single-entity or metric-specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides extensive guidance on how to apply filters (e.g., 'Margin/ratio/growth filters use integer percent', 'Pass 0 for no minimum'), how to request enrichment contexts ('Set include='lending_context'...'), and notes plan limitations. It clearly implies when to use this screening tool, though it does not explicitly name sibling alternatives or exclusion cases (e.g., when to prefer 'get_company' for a single ticker).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thesma-dev/thesma-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server