Screen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria. Metric IDs (canonical names from filing_metrics): - Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev - Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roi...
Risk signalsHigh parameter count (13 properties)
Part of the MetricDuck — Financial Analysis server.
Free to start. No card required.
AI agents use screen_companies to create or modify resources in MetricDuck — Financial Analysis. Write operations carry medium risk because an autonomous agent could trigger bulk unintended modifications. Rate limits prevent a single agent session from making hundreds of changes in rapid succession. Argument validation ensures the agent passes expected values.
Without a policy, an AI agent could call screen_companies repeatedly, creating or modifying resources faster than any human could review. PolicyLayer's rate limiting ensures write operations happen at a controlled pace, and argument validation catches malformed or unexpected inputs before they reach MetricDuck — Financial Analysis.
Write tools can modify data. A rate limit prevents runaway bulk operations from AI agents.
{
"version": "1",
"default": "deny",
"tools": {
"screen_companies": {
"limits": [
{
"counter": "screen_companies_rate",
"window": "minute",
"max": 30,
"scope": "grant"
}
]
}
}
} See the full MetricDuck — Financial Analysis policy for all 22 tools.
These attack patterns abuse exactly the kind of access screen_companies gives an agent. Each links to the full case and the policy that stops it:
Other write tools across the catalogue. The same approach applies to each: rate-limit and validate the arguments.
Screen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria. Metric IDs (canonical names from filing_metrics): - Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev - Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, roce - Cash Flow: fcf, net_cf_ops, cash_conversion - Balance Sheet: debt_to_equity, current_ratio, ttl_debt, ttl_equity, cash_st_invs - Size: revenues, net_income, ebitda, gross_profit Growth screening: use period_type on any base metric: - Revenue growth YoY: metric_id="revenues", period_type="ttm.yoy" - 3-year revenue CAGR: metric_id="revenues", period_type="ttm.cagr3" - Earnings growth: metric_id="net_income", period_type="ttm.yoy" Period types: ttm (default), q, fy, ss (balance sheet snapshot), ttm.yoy, ttm.cagr3, ttm.cagr5 Sectors: TECH, FIN, HEALTH, CONS_STAPLES, CONS_DISC, IND, ENERGY, UTIL, RE, MAT, COMM Operators: gt (>), gte (>=), lt (<), lte (<=), eq (=), between Tag filtering (required_tags / excluded_tags): filter by business model classification. Requires companies to be classified — unclassified companies are excluded from tag-filtered results. Note: For P/E screening, negative P/E means losses. Add a gt(0) filter to exclude loss-making companies. Note: ROIC values are decimals (0.15 = 15%). Margins and returns are also decimals. Use Cases: - "High ROIC tech stocks" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}], sectors=["TECH"] - "Undervalued profitable industrials" -> filters=[{metric_id:"pe_ratio", operator:"lt", value:15}, {metric_id:"pe_ratio", operator:"gt", value:0}], sectors=["IND"] - "Revenue growing >10% YoY" -> filters=[{metric_id:"revenues", operator:"gt", value:0.10, period_type:"ttm.yoy"}] - "AI infrastructure companies not exposed to China supply chain" -> required_tags=["ai_ml_infrastructure"], excluded_tags=["china_supply_chain_heavy"] - "Profitable subscription businesses" -> filters=[{metric_id:"net_margin", operator:"gt", value:0.10}], required_tags=["subscription_recurring"] - "Quality companies with a material charge" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}, {metric_id:"market_cap", operator:"gt", value:10000000000}], signals=["has_material_charge"] When signals are provided, results include matched_signals and signal_details fields. Signals filter AFTER metric screening — only companies passing metric filters are checked for signals. Responses capped at ~20K chars. If truncated, reduce limit or add stricter filters.. It is categorised as a Write tool in the MetricDuck — Financial Analysis MCP Server, which means it can create or modify data. Consider rate limits to prevent runaway writes.
Register the MetricDuck — Financial Analysis MCP server in PolicyLayer and add a rule for screen_companies: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches MetricDuck — Financial Analysis. Nothing to install.
screen_companies is a Write tool with medium risk. Write tools should be rate-limited to prevent accidental bulk modifications.
Yes. Add a rate_limit block to the screen_companies rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for screen_companies. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
screen_companies is provided by the MetricDuck — Financial Analysis MCP server (https://mcp.metricduck.com/mcp). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
Deterministic rules across all 22 MetricDuck — Financial Analysis tools. Per-identity grants. Full audit log. Live in minutes. Nothing to install.
Free to start. No card required.
4,600+ MCP servers and 31,000+ tools scanned and risk-classified.