Single tool with a descriptive name but critically lacks proper MCP schema definition, input validation, parameter descriptions, and error handling guidance. The tool exists as a Python class method but has no explicit JSON Schema registration visible in the source code. Descriptions are present but lack LLM-optimization details. No output schema documentation, no error classification, and no recovery guidance. This is a proof-of-concept implementation, not production-ready tooling.
Tools (1)
enrich_leadread onlyauthsource verified50/100
Simulates B2B attribute resolution and builds email copy targeting the company profiles.
No visible JSON Schema definition for tool input parameters. Tool exists as Python code but no explicit MCP tool registration with schema is present in the source.
Parameters lack type constraints and descriptions required by LLMs. 'prospect_name', 'domain', and 'focus' have brief descriptions but no format specifications, constraints, or guidance on when each is required.
No output schema documentation. The tool returns a dict with 'enriched_profile' and 'outreach_email_draft' keys, but LLMs cannot predict the structure or content of nested fields without explicit schema definition.
No error handling or recovery guidance. The mock implementation cannot fail, but a production version calling external APIs has no error classification (retryable vs user-fixable vs fatal) or actionable error messages.
enrich_lead
Recommendations
Register the tool explicitly with a proper JSON Schema input definition including type, description, and constraints for each parameter. Example: {'type': 'object', 'properties': {'prospect_name': {'type': 'string', 'description': 'Full name of the prospect (e.g., "Sarah Connor"). Used to personalize outreach copy.', 'minLength': 2, 'maxLength': 100}, 'domain': {'type': 'string', 'description': 'Company domain without www or protocol (e.g., "skynet.io"). Used to infer company name and industry.', 'pattern': '^[a-z0-9][a-z0-9-]*[a-z0-9]\\.[a-z]{2,}$'}, 'focus': {'type': 'string', 'description': 'Business focus area to emphasize in email copy (e.g., "AI agents for manufacturing"). Determines which features are highlighted.', 'minLength': 10, 'maxLength': 200}}, 'required': ['prospect_name', 'domain', 'focus']}
Document the output schema explicitly. Define the structure of 'enriched_profile' (with fields: company_name [string], estimated_size [string], industry [string], key_technologies [array of strings]) and 'outreach_email_draft' (string). Clarify that estimated_size is a range, not exact.
Expand tool description to 150-250 characters with actionable context: 'Enrich a B2B prospect by inferring company attributes from domain and generating a personalized cold outreach email. Use this when you need to send targeted outreach based on prospect name and company domain. Returns company profile metadata and draft email copy.'
Add parameter descriptions that answer: What is this for? What format is expected? Example: 'domain: Company domain (e.g., skynet.io). Extract from email addresses by removing name prefix and domain extensions. Used to infer company name, size, and industry for enrichment.'
Tool description is under 200 characters but lacks critical context: When should the LLM call this? What prerequisites exist? What does 'mock mode' mean to the agent? These gaps force LLMs to guess.
No MCP transport mechanism visible. Code shows a standalone Python class with no MCP protocol wrapper, stdio handler, or HTTP endpoint. Cannot be invoked as an MCP server.
Hard-coded mock data. The tool always returns identical enriched_profile structure regardless of input, simulating B2B enrichment without real data source. LLMs will not trust inconsistent or identical responses.
enrich_lead
Implement proper error handling with recovery guidance. When domain parsing fails, return: {'error': 'Invalid domain format. Expected format: example.com', 'recovery': 'Ensure domain has no protocol (http://) or www prefix. Try searching for the company website if uncertain.', 'retryable': true}.
Wrap the tool in an MCP server with stdio or HTTP transport. Use the official MCP SDK to register tools with schemas and handle protocol handshakes. The standalone Python class is not an MCP server.
Replace mock data with either a real B2B enrichment API integration (with API key injected via environment variables, never as a parameter) or more diverse mock data that varies by input to simulate realistic behavior.
Add a 'confidence_score' field to enriched_profile (0-100) to indicate how certain the enrichment is. LLMs use confidence to decide whether to ask the user for confirmation before sending emails.
Document any rate limits, timeouts, or quota constraints in the tool description. If the real API has a 10 request/minute limit, state it so the agent knows when to batch calls or throttle usage.
Include validation for required parameters. If 'focus' is empty or under 10 characters, return a clear error: 'Focus area is too vague. Provide at least 10 characters describing what business problem you want to solve (e.g., "improving manufacturing efficiency").' This guides LLMs to refine input.