Lightweight contact and deal tracker with agent-driven follow-ups and pipeline reviews, built on FastMCP. Records are JSON files under the workspace, one per contact, deal or interaction, read and written by src/synapse_crm/store.py.
View on mpak registry | Built by NimbleBrain
- 3 entity types with JSON Schema definitions and
allOfcomposition - 4 custom domain tools for pipeline management and interaction tracking
- 2 bundled skills: follow-up coaching and daily pipeline review
- Hooks: auto-trigger follow-up coach on new interactions and deal stage changes
- Schedules: daily weekday pipeline review at 9 AM
- 3 named views: active pipeline, needs follow-up, recent interactions
- Seed data with realistic contacts, deals, and interactions
- Synapse UI: pipeline + contacts toggle, slide-over detail panel with view/edit/create modes, contact search, mobile-responsive cards
| Entity | Prefix | Schema | Notes |
|---|---|---|---|
| Contact | ct_ |
contact.schema.json | People — the hub entity. Deals and interactions link here. |
| Deal | dl_ |
deal.schema.json | Sales opportunities with stage, value, and close date. |
| Interaction | ix_ |
interaction.schema.json | Activity log: meetings, emails, calls, notes. |
add_field writes a new field into the entity's schema file and the store validates it from that call on. The create_* and update_* argument schemas are built when the server starts, so tools/list shows the field after the next start, as it did under Upjack.
| Tool | Purpose |
|---|---|
move_deal_stage |
Advance/regress a deal with auto close-date and probability |
log_interaction |
Create an interaction with auto-wired contact relationship |
pipeline_summary |
Aggregate metrics by stage: count, value, win rate |
contact_timeline |
Full interaction history for a contact (newest first) |
The server serves both skills over MCP under SEP-2640 (io.modelcontextprotocol/skills): skills/list and skills/get describe them, and resources/read returns skill://follow-up-coach/SKILL.md and skill://pipeline-reviewer/SKILL.md. Each folder name equals the name in its frontmatter, as the SEP requires. Both methods answer on the 2025-11-25 handshake era as well as 2026-07-28 (src/synapse_crm/skills.py). The older upjack://skills/<folder> resources still return the same files.
Ensures every interaction has a concrete next step. Auto-sets follow-up dates based on interaction type (meetings: 2 days, calls: 5 days, emails: 3 days). Triggered on interaction.created and deal.updated (stage change).
Daily health check of the sales pipeline. Identifies stale deals (no interaction in 14+ days), overdue follow-ups, and past-due close dates. Runs weekdays at 9 AM.
synapse-crm/
├── manifest.json
├── context.md
├── pyproject.toml
├── Makefile
├── schemas/
│ ├── contact.schema.json
│ ├── deal.schema.json
│ └── interaction.schema.json
├── skills/
│ ├── follow-up-coach/SKILL.md
│ └── pipeline-reviewer/SKILL.md
├── seed/
│ ├── sample-contacts.json
│ ├── sample-deals.json
│ └── sample-interactions.json
├── src/synapse_crm/
│ ├── __init__.py
│ ├── server.py
│ ├── skills.py # skills/list and skills/get on every protocol era
│ ├── store.py # records as JSON files, schema validation, relationship queries
│ ├── entity_tools.py # generated CRUD, relationship, seed, schema and index tools
│ └── tools/
│ ├── __init__.py
│ ├── move_deal_stage.py
│ ├── log_interaction.py
│ ├── pipeline_summary.py
│ ├── contact_timeline.py
│ ├── find_or_create_contact.py
│ └── link_deals_to_contacts.py
├── ui/ # React + Vite + Synapse SDK
│ ├── package.json
│ ├── vite.config.ts
│ └── src/
│ ├── App.tsx
│ ├── tokens.ts
│ ├── components/ # DetailPanel, DealView, ContactView, DealCard, PipelineSummaryBar
│ ├── views/ # PipelineView, ContactListView
│ └── hooks/ # useDeals, useContacts, usePipelineSummary
└── tests/ # pytest
make run # stdio mode for local MCP host development make run-http # HTTP mode on port 8001 make dev # vite dev server for the UI make bundle # refresh deps/ snapshot for platform install