Lightweight CRM with contact management, deal pipeline, and agent-driven follow-ups
Synapse CRM has well-structured tool definitions with clear naming (verb_noun pattern) and comprehensive descriptions (avg 180 chars). All 6 tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is minimal; tools lack recovery guidance. The server uses upjack/FastMCP framework which auto-generates CRUD tools from manifest, but custom domain tools (move_deal_stage, log_interaction, pipeline_summary, find_or_create_contact, link_deals_to_contacts, contact_timeline) are well-designed for CRM workflows. Missing: per-parameter constraints (enums for stage/interaction_type), output schema documentation, and error classification.
Get all interactions for a contact in reverse chronological order. Shows the full history of meetings, emails, calls, and notes. Use this to review relationship history before outreach.
ALWAYS use this instead of create_contact. Searches for an existing contact by email (exact) or name (fuzzy) and returns it, updating any new fields. Only creates a new contact if no match is found. Prevents duplicates.
Wire deals to contacts by matching the deal's contact_name field to existing contacts. Run this after seed_data to establish belongs_to relationships. Safe to run multiple times — skips deals that are already linked.
Log an interaction (meeting, email, call, note) for a contact. Automatically links the interaction to the contact via a belongs_to relationship and denormalizes the contact name. Use this instead of create_interaction directly.
Move a deal to a new pipeline stage. Validates the stage is one of: lead, qualified, proposal, negotiation, closed_won, closed_lost. Automatically sets close_date to today when moving to closed_won or closed_lost (if not already set). Use this instead of update_deal for stage changes.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination) for move_deal_stage, log_interaction, pipeline_summary, find_or_create_contact, link_deals_to_contacts, contact_timeline. This breaks downstream tool chaining and forces agents to guess field names.
Enum constraints missing for constrained parameters. move_deal_stage accepts stage as free-form string with validation in description only ('must be one of: lead, qualified, proposal, negotiation, closed_won, closed_lost'). log_interaction similarly accepts interaction_type as free-form. LLMs cannot parse text constraints reliably, use JSON Schema enum.
Error handling lacks recovery guidance. No tool documents what errors are retryable, what the LLM should do on failure, or what invalid inputs look like. E.g., move_deal_stage does not explain what happens if stage is invalid or deal_id does not exist.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get an aggregate view of the sales pipeline: deal count, total value, and average probability grouped by stage. Also shows weighted pipeline value and overall win rate. Read-only, no side effects.
link_deals_to_contacts has no input parameters (empty schema). Tool description says 'Run this after seed_data' but does not explain what it returns or how to verify success. No output schema documented.
Optional parameters lack defaults or guidance. find_or_create_contact has 6 optional params (email, phone, company, role, lead_source, notes). No description of which are recommended, which are mutually exclusive, or what happens if all are omitted.