get_icp_fit_score
Evaluate companies against your ideal customer profile across 5 dimensions to identify sales-ready prospects. Uses your product details and buyer data for instant scoring without AI calls.
Instructions
Tells you in seconds whether the company you're thinking about is worth your time — scores them against who actually buys from you and why, across 5 dimensions. No AI calls, instant results.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| companyName | No | Company name to evaluate | |
| domain | No | Company website domain | |
| industry | No | Industry vertical | |
| employeeCount | No | Number of employees | |
| revenue | No | Revenue range (e.g., "$1M-$5M") | |
| geography | No | HQ location | |
| techStack | No | Technologies the company uses | |
| painPoints | No | Known pain points or challenges they face | |
| triggerEvents | No | Recent trigger events (e.g., "just raised Series B", "new CTO hired") | |
| productDescription | No | A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet, ask them: "What does your product do, and who do you sell to?" before calling this tool. | |
| vertical | No | The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If unclear, ask. | |
| targetRole | No | The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their vertical. |
Implementation Reference
- src/catalog.js:41-72 (registration)Registration of the get_icp_fit_score tool in the static catalog.
{ name: 'get_icp_fit_score', description: 'Tells you in seconds whether the company you\'re thinking about is worth your time — scores them against who actually buys from you and why, across 5 dimensions. No AI calls, instant results.', annotations: READ_ONLY, inputSchema: { type: 'object', properties: { companyName: { type: 'string', description: 'Company name to evaluate' }, domain: { type: 'string', description: 'Company website domain' }, industry: { type: 'string', description: 'Industry vertical' }, employeeCount: { type: 'number', description: 'Number of employees' }, revenue: { type: 'string', description: 'Revenue range (e.g., "$1M-$5M")' }, geography: { type: 'string', description: 'HQ location' }, techStack: { type: 'array', items: { type: 'string' }, description: 'Technologies the company uses', }, painPoints: { type: 'array', items: { type: 'string' }, description: 'Known pain points or challenges they face', }, triggerEvents: { type: 'array', items: { type: 'string' }, description: 'Recent trigger events (e.g., "just raised Series B", "new CTO hired")', }, ...COLD_START_PARAMS, }, }, }, - src/server.js:47-69 (handler)The MCP server handler for all tools, which proxies tool execution to the backend Andru API.
server.setRequestHandler( CallToolRequestSchema, async (request) => { if (!client) { return { content: [{ type: 'text', text: JSON.stringify({ error: 'ANDRU_API_KEY not configured. Tool execution requires an API key.' }) }], isError: true, }; } const { name, arguments: args } = request.params; try { return await client.callTool(name, args || {}); } catch (error) { return { content: [{ type: 'text', text: JSON.stringify({ error: error.message }), }], isError: true, }; } } ); - src/client.js:31-38 (handler)The client-side method that handles the actual API call for executing the tool.
* Execute an MCP tool. * @param {string} name - Tool name * @param {object} args - Tool arguments * @returns {Promise<{ content: Array<{ type: string, text: string }>, isError?: boolean }>} */ async callTool(name, args) { return this.post('/api/mcp/tools/call', { tool: name, arguments: args }); }