A competitor displacement agent that discovers competitors, monitors signals, identifies impacted customers, and generates outreach campaigns using Claude MCP, Apollo, and Google Vertex AI.
This FastAPI server exposes 26 tools via HTTP endpoints but lacks proper MCP tool registration patterns. Tool definitions are inferred from FastAPI route handlers rather than explicitly registered with schemas. Most tools have minimal descriptions (10-50 chars), many parameters lack type information or descriptions, and output schemas are undocumented. No error handling guidance, no parameter validation hints, and no security annotations. The server functions as a web API, not a properly structured MCP server.
Adds a new competitor to the system with name, category, product positioning, technology UID, and customer domains
Builds Apollo query payloads for searching accounts and people based on competitor and signal
Returns the competitive landscape report in Markdown format
Renders the main dashboard HTML with company profile, competitors, signals, opportunities, campaigns, scan runs, and relationship graph
Discovers company information and competitors using Claude MCP with fallback to demo data
Discovers company information and competitors using Claude MCP or fallback data based on company name
No explicit MCP tool registration. Tools are inferred from FastAPI routes, not registered via MCP protocol. This violates the tool registration pattern and makes the server incompatible with standard MCP clients.
Output schemas completely undocumented. Tools return HTML, JSON, or redirects but no schema is declared. LLMs cannot plan downstream calls or extract structured data.
Most tool descriptions are under 50 characters and lack context on WHEN to use the tool or WHAT it returns. Examples: 'Health check endpoint' (23 chars), 'Renders the main dashboard HTML' (31 chars).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Finds article-backed competitor displacement signals through Claude CLI web search
Returns the relationship graph data for competitor displacement visualization in JSON format
Finds decision makers for an opportunity using Apollo or Claude MCP
Finds impacted customers for a signal using Apollo or Claude MCP prospecting
Generates a campaign draft with subject, email body, LinkedIn note, and call opener using Gemini
Generates a personalized email for a specific contact using Claude or fallback Gemini
Generates outreach emails for selected contacts from an opportunity
Generates outreach emails for selected contacts from a signal
Health check endpoint that returns server status
Returns a list of all competitor signals discovered
Renders the opportunity detail HTML with signal, campaigns, and company information
Renders the competitive landscape report as HTML
Maps a domain to an Apollo organization ID using Apollo API
Initiates a competitor scan to discover signals and opportunities
Scheduled scan endpoint that requires a shared secret header for authentication
Scores an opportunity based on technology match, contact depth, employee fit, and signal urgency
Searches for competitor customer accounts using Apollo API or demo data
Searches for buyer contacts at a specific account using Apollo API
Finds competitor customer accounts and email-bearing buyer contacts via Apollo with enrichment
Renders the signal detail workspace HTML with opportunities and campaigns
Complex object parameters (competitor, signal, account, contact, opportunity) lack inline schema documentation. LLMs cannot infer required fields, types, or valid values for nested objects.
No error handling guidance. Tools return HTTP redirects or exceptions but do not tell LLMs what to do next (retry, ask user, abort). Per pattern:recovery-guide, errors must be actionable.