Company Profile
company_profileRetrieve a comprehensive company profile by ticker, CIK, or name, including SEC filings, OTC data, patents, trademarks, and court cases from multiple datasets.
Instructions
Get a unified company profile across all Verilex datasets. Searches by ticker symbol, SEC CIK number, or company name. Returns SEC filings, OTC data (shell risk, financials), patent portfolio, trademark registrations, and court cases — all in one response. This is the premium cross-dataset intelligence endpoint.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Company identifier: ticker symbol (e.g. AAPL), CIK number (e.g. 0000320193), or company name |
Implementation Reference
- src/tools/company.ts:35-56 (handler)The async handler function for the company_profile tool. It takes an identifier (ticker/CIK/name), calls apiGet on /api/v1/company/:identifier, and returns the JSON result or an error message.
async ({ identifier }) => { const res = await apiGet<Record<string, unknown>>( `/api/v1/company/${encodeURIComponent(identifier)}`, ); if (!res.ok) { const msg = res.status === 404 ? `No data found for '${identifier}' across any dataset.` : `API error (${res.status}): ${JSON.stringify(res.data)}`; return { content: [{ type: "text" as const, text: msg }], isError: res.status !== 404, }; } return { content: [ { type: "text" as const, text: JSON.stringify(res.data, null, 2) }, ], }; }, - src/tools/company.ts:27-33 (schema)Input schema for company_profile: a single 'identifier' field (string, 1-100 chars, describing ticker/CIK/name).
inputSchema: { identifier: z .string() .min(1) .max(100) .describe("Company identifier: ticker symbol (e.g. AAPL), CIK number (e.g. 0000320193), or company name"), }, - src/tools/company.ts:18-57 (registration)Registration of the 'company_profile' tool using server.registerTool() with name, metadata (title, description, inputSchema), and handler.
server.registerTool( "company_profile", { title: "Company Profile", description: "Get a unified company profile across all Verilex datasets. Searches by ticker symbol, " + "SEC CIK number, or company name. Returns SEC filings, OTC data (shell risk, financials), " + "patent portfolio, trademark registrations, and court cases — all in one response. " + "This is the premium cross-dataset intelligence endpoint.", inputSchema: { identifier: z .string() .min(1) .max(100) .describe("Company identifier: ticker symbol (e.g. AAPL), CIK number (e.g. 0000320193), or company name"), }, }, async ({ identifier }) => { const res = await apiGet<Record<string, unknown>>( `/api/v1/company/${encodeURIComponent(identifier)}`, ); if (!res.ok) { const msg = res.status === 404 ? `No data found for '${identifier}' across any dataset.` : `API error (${res.status}): ${JSON.stringify(res.data)}`; return { content: [{ type: "text" as const, text: msg }], isError: res.status !== 404, }; } return { content: [ { type: "text" as const, text: JSON.stringify(res.data, null, 2) }, ], }; }, ); - src/index.ts:46-46 (registration)Top-level wiring: registerCompanyTools(server) is called from src/index.ts to register all company tools including company_profile.
registerCompanyTools(server); - src/client.ts:44-76 (helper)The apiGet helper used by the handler to make HTTP GET requests to the Verilex API.
export async function apiGet<T = unknown>( path: string, params?: Record<string, string | number | undefined>, ): Promise<ApiResponse<T>> { const url = buildUrl(path, params); const headers: Record<string, string> = { Accept: "application/json", "User-Agent": "verilex-mcp-server/0.1.0", }; // Forward x402 payment token if present in env (for paid endpoints) const paymentToken = process.env.VERILEX_PAYMENT_TOKEN; if (paymentToken) { headers["X-Payment-Token"] = paymentToken; } const res = await fetch(url, { headers }); const data = (await res.json()) as T; const stale = res.headers.get("X-Data-Stale"); const lastUpdated = res.headers.get("X-Data-Last-Updated"); const ageSeconds = res.headers.get("X-Data-Age-Seconds"); return { ok: res.ok, status: res.status, data, stale: stale === "true", lastUpdated: lastUpdated ?? undefined, ageSeconds: ageSeconds ? Number(ageSeconds) : undefined, }; }