Trader Alpha Signals
trader_signalsScan Verilex datasets for alpha signals: 8-K filings, short interest spikes, new patents, trademarks, litigation, and delinquent filers. Set lookback from 1 to 90 days.
Instructions
Get recent alpha signals for traders and hedge funds. Signals include new 8-K filings, short interest spikes, new patent grants, new trademark filings, new litigation, and delinquent filers. Scans activity across all Verilex datasets over a configurable lookback period.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback period in days (default 7, max 90) | |
| signal_types | No | Filter to specific signal types (default: all) | |
| limit | No | Maximum signals to return (default 100, max 500) |
Implementation Reference
- src/tools/company.ts:185-253 (registration)The 'trader_signals' tool is registered via server.registerTool() with the name 'trader_signals'. The registration includes title 'Trader Alpha Signals', description, inputSchema (days, signal_types, limit), and the async handler function.
server.registerTool( "trader_signals", { title: "Trader Alpha Signals", description: "Get recent alpha signals for traders and hedge funds. Signals include new 8-K filings, " + "short interest spikes, new patent grants, new trademark filings, new litigation, " + "and delinquent filers. Scans activity across all Verilex datasets over a configurable lookback period.", inputSchema: { days: z .number() .int() .min(1) .max(90) .optional() .describe("Lookback period in days (default 7, max 90)"), signal_types: z .array(z.enum([ "new_8k", "short_interest_spike", "new_patent", "new_trademark", "new_litigation", "delinquent_filer", ])) .optional() .describe("Filter to specific signal types (default: all)"), limit: z .number() .int() .min(1) .max(500) .optional() .describe("Maximum signals to return (default 100, max 500)"), }, }, async ({ days, signal_types, limit }) => { const res = await apiGet<{ dataset: string; lookback_days: number; count: number; signals: Record<string, unknown>[]; }>("/api/v1/companies/signals", { days: days ?? 7, signal_types: signal_types ? signal_types.join(",") : undefined, limit: limit ?? 100, }); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { lookback_days, count, signals } = res.data; const summary = `Found ${count} signal(s) in the last ${lookback_days} days.`; const json = JSON.stringify(signals, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, ); - src/tools/company.ts:221-252 (handler)The handler function for 'trader_signals' accepts { days, signal_types, limit }, calls apiGet to /api/v1/companies/signals with optional query parameters, and returns the formatted response with signal count and data.
async ({ days, signal_types, limit }) => { const res = await apiGet<{ dataset: string; lookback_days: number; count: number; signals: Record<string, unknown>[]; }>("/api/v1/companies/signals", { days: days ?? 7, signal_types: signal_types ? signal_types.join(",") : undefined, limit: limit ?? 100, }); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { lookback_days, count, signals } = res.data; const summary = `Found ${count} signal(s) in the last ${lookback_days} days.`; const json = JSON.stringify(signals, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, - src/tools/company.ts:193-219 (schema)Input schema for 'trader_signals': days (int 1-90, default 7), signal_types (array of enum values: new_8k, short_interest_spike, new_patent, new_trademark, new_litigation, delinquent_filer), limit (int 1-500, default 100).
inputSchema: { days: z .number() .int() .min(1) .max(90) .optional() .describe("Lookback period in days (default 7, max 90)"), signal_types: z .array(z.enum([ "new_8k", "short_interest_spike", "new_patent", "new_trademark", "new_litigation", "delinquent_filer", ])) .optional() .describe("Filter to specific signal types (default: all)"), limit: z .number() .int() .min(1) .max(500) .optional() .describe("Maximum signals to return (default 100, max 500)"), },