An MCP server for lead qualification and CRM synchronization that extracts qualification information from user messages and syncs leads to CRM systems.
This server has critical definition gaps. Tool descriptions are present but vague (e.g., 'Extract and collect one lead qualificatino field' contains a typo and lacks actionable context). Input schemas exist but lack depth: parameters have minimal descriptions, no enums for constrained values, and no output schemas documented. The 'lead' parameter in crm-sync-agent is typed as 'object' with only a generic description, no structure, required fields, or examples. Error handling is minimal (generic catch-all). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles (WRITE operations). Naming is acceptable but not verb-forward (lead-qualifier, crm-sync-agent, clear-session lack clarity on what 'lead-qualifier' returns or how it differs from a full qualification flow).
Clear lead qualification data for a given session.
Sync lead data to the CRM system.
Extract and collect one lead qualificatino field from the user's latest message.
Typo in lead-qualifier description ('qualificatino' instead of 'qualification') and vague wording ('Extract and collect one lead qualification field'), does not explain WHEN to use this vs. a full qualification flow, what the output structure is, or how sessionId state is managed.
crm-sync-agent 'lead' parameter is typed as bare 'object' with no schema, required fields, or structure documentation. LLM cannot infer what fields to pass (budget, authority, need, timeline?) or their types. Violates pattern:constrained-input and pattern:tool-description.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract structured data. lead-qualifier returns a JSON string (field, value, score) but this is not declared in the tool definition. crm-sync-agent returns a success message but no structured response.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
No tool annotations despite clear risk profiles. crm-sync-agent and clear-session are WRITE operations but lack destructiveHint. lead-qualifier is READ_ONLY but lacks readOnlyHint. Agents cannot reason about idempotency or retry safety.
Error handling is generic (catch-all 'Error: {err.message}'). No recovery guidance, error classification, or actionable next steps. If lead-qualifier fails to extract a field, the LLM has no guidance on retry or fallback.