loading…
Search for a command to run...
loading…
Demo MCP server for booking confirmed sales appointments through Claude. Allows users to request appointments, check status, and get detailed BANT briefings usi
Demo MCP server for booking confirmed sales appointments through Claude. Allows users to request appointments, check status, and get detailed BANT briefings using natural language, with realistic fake data for demonstration.
Demo MCP server for LeadClaw — a service for booking confirmed sales appointments through Claude. Human freelance SDRs handle the outbound; AI handles matching, quality, billing, and reporting. Customers pay only per BANT-qualified meeting that lands on their calendar.
This server is the showcase implementation used for the demo video and concept pitch. It returns realistic fake data so Claude Desktop calls feel live without any real SDR plumbing behind them yet.
In Claude Desktop you can say:
Book 3 sales appointments next Tuesday in Dallas with AI startup CEOs. Budget $450.
…and Claude will:
book_appointments on this server.request_id and an ETA.check_status (immediately or later) and see appointments populate.get_appointment_details.Nothing real happens on the SDR side — but the customer experience is identical to what the real product will feel like.
| Tool | Purpose |
|---|---|
book_appointments |
Submit a request for N confirmed appointments. Returns a request_id. |
check_status |
Poll a request; returns confirmed appointments so far and current phase. |
get_appointment_details |
Full briefing for one appointment: contact, company, BANT, SDR notes, meeting link. |
Status advances based on wall-clock time since the request was created — no background workers needed:
| Elapsed | Phase | Confirmed |
|---|---|---|
| 0–5s | processing |
0 |
| 5–15s | matching |
0 |
| 15s | in_progress |
1 |
| +30s each | in_progress |
+1 |
| All seats filled | completed |
N |
So a 3-seat request is fully completed ~75 seconds after book_appointments. Tunable in src/tools/status.ts.
Requirements: Node.js 18+ (this repo was developed against Node 24).
npm install
npm run build
The compiled server entrypoint is dist/index.js. Data persists to data/store.json (auto-created).
Edit your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"leadclaw": {
"command": "node",
"args": ["C:\\absolute\\path\\to\\leadclaw-mcp\\dist\\index.js"]
}
}
}
Replace the path with the absolute path to your built dist/index.js. On macOS/Linux use forward slashes.
Restart Claude Desktop. The three LeadClaw tools should appear in the tool list.
node dist/index.js
Then paste the following on stdin (one JSON object per line):
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1.0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
You should see three tools advertised.
leadclaw-mcp/
├── src/
│ ├── index.ts MCP server entrypoint (stdio transport)
│ ├── tools/
│ │ ├── book.ts book_appointments
│ │ ├── status.ts check_status (time-based phase simulation)
│ │ └── details.ts get_appointment_details
│ ├── mock/
│ │ ├── companies.ts fake AI/SaaS company pool
│ │ ├── people.ts fake names + default role pool
│ │ └── generator.ts appointment + BANT + meeting-time synthesis
│ └── db/
│ └── store.ts JSON file persistence
├── data/
│ └── store.json auto-generated on first request (gitignored)
└── dist/ build output
Book 3 sales appointments next Tuesday in Dallas with AI startup CEOs. Budget $450.
book_appointments → you see the tool call card.check_status. First call (within ~15s) shows processing/matching; wait ~75s and call again to see all 3 confirmed.get_appointment_details.For the 30-second video cut, edit out the wait between calls.
These come after the concept lands.
Выполни в терминале:
claude mcp add leadclaw-mcp -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.