{
  "markdown": "# Crisphive MCP\n\n[![smithery badge](https://smithery.ai/badge/crisphive/crisphive-mcp)](https://smithery.ai/servers/crisphive/crisphive-mcp)\n[![glama score](https://glama.ai/mcp/servers/crisphive/crisphive-mcp/badges/score.svg)](https://glama.ai/mcp/servers/crisphive/crisphive-mcp)\n[![npm](https://img.shields.io/npm/v/%40crisphive%2Fmcp)](https://www.npmjs.com/package/@crisphive/mcp)\n\nThe official MCP (Model Context Protocol) server for the\n[Crisphive API](https://docs.crisphive.com/) — **agentic AI scheduling\ninfrastructure for field operations**.\n\nLets AI agents — Claude, ChatGPT, Gemini, Cursor or any MCP client — match\nschedules between customers and businesses and route crews to jobs by\n**location, skills, and real-time availability**: **job booking & appointment\nscheduling**, **work-order tracking**, availability from a live **dispatch &\nscheduling engine**, **customer (CRM) sync**, service catalogs,\n**technician & crew rosters**, geographic **service territories** and **fleet**\n— for trades and home services such as HVAC, plumbing, electrical, cleaning,\nappliance repair and property maintenance. Scheduling is **constraint-based on\na deterministic solver**: the agent handles the conversation, the solver makes\nthe decision — same inputs, same plan, never an LLM guessing at a calendar.\nHosted remote server; nothing to\ninstall or run (this repository holds the documentation and registry manifest).\n\n```\nhttps://api.crisphive.com/mcp\n```\n\n## Try these first\n\nConnect (a `chsk_test_` sandbox key is enough), then paste any of these straight\ninto your agent:\n\n1. **Job creation** — *\"Schedule a 2-hour HVAC job at 145 Laurier Ave W\n   tomorrow for Marie Tremblay, 613-555-0142.\"*\n   (`createCustomer → listJobRequestBookingWindows → createJobRequest →\n   quoteJobRequest → confirmJobRequest`)\n2. **Emergency insertion** — *\"Emergency plumbing job now at 99 Bank St for\n   David Okafor (613-555-0198) — show me what gets rescheduled.\"*\n   (`listEmergencyCandidates → previewEmergencyReschedule →\n   commitEmergencyReschedule`)\n3. **Daily outline** — *\"Outline my day tomorrow and flag anything at risk.\"*\n   (`listJobRequests → getTechnicianSchedule`)\n4. **Availability discovery** — *\"Find 3 hours this week for a bike ride with\n   my wife without risking any jobs.\"*\n   (`getTechnicianSchedule` → the agent reasons over the slack)\n\nThe same prompts appear on every Crisphive listing and docs page, so what you\nsee here is exactly the first-run experience everywhere.\n\n→ Full overview, tool table and one-click connect: https://crisphive.com/claude\n\n## Requirements\n\nAny MCP client that supports remote servers over Streamable HTTP —\nclaude.ai, Claude Desktop, Claude Code, ChatGPT, Gemini CLI, Cursor, VS Code,\nWindsurf, Cline, Zed, LM Studio, ….\n\n## Installation\n\n### claude.ai / Claude Desktop (OAuth — no key needed)\n\n**Settings → Connectors → Add custom connector**, paste\n`https://api.crisphive.com/mcp`. Sign in as the Crisphive business owner when\nthe consent screen opens. *(Custom connectors require a Claude plan that\nsupports them.)*\n\n### Claude Code\n\n```sh\n# OAuth (you'll be prompted to authorize in the browser)\nclaude mcp add --transport http crisphive https://api.crisphive.com/mcp\n\n# or with an API key (sandbox key shown — safe to experiment)\nclaude mcp add --transport http crisphive https://api.crisphive.com/mcp \\\n  --header \"Authorization: Bearer chsk_test_YOUR_KEY\"\n```\n\n### Cursor\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](cursor://anysphere.cursor-deeplink/mcp/install?name=crisphive&config=eyJ1cmwiOiJodHRwczovL2FwaS5jcmlzcGhpdmUuY29tL21jcCJ9)\n\nOr add to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"crisphive\": { \"url\": \"https://api.crisphive.com/mcp\" }\n  }\n}\n```\n\n### VS Code\n\n```sh\ncode --add-mcp '{\"name\":\"crisphive\",\"url\":\"https://api.crisphive.com/mcp\"}'\n```\n\n### ChatGPT\n\n**Settings → Connectors** (developer mode) → add MCP server with URL\n`https://api.crisphive.com/mcp` (OAuth).\n\n### Gemini CLI\n\nAdd to `~/.gemini/settings.json` (note: Gemini CLI uses `httpUrl` for\nStreamable HTTP servers):\n\n```json\n{\n  \"mcpServers\": {\n    \"crisphive\": {\n      \"httpUrl\": \"https://api.crisphive.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer chsk_test_YOUR_KEY\" }\n    }\n  }\n}\n```\n\n### Other MCP clients (Windsurf, Cline, Zed, LM Studio, …)\n\nMost clients accept the standard remote-server shape:\n\n```json\n{\n  \"mcpServers\": {\n    \"crisphive\": {\n      \"url\": \"https://api.crisphive.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer chsk_test_YOUR_KEY\" }\n    }\n  }\n}\n```\n\nOnly the URL field name varies in a few clients:\n\n| Client | Config file | URL field |\n|---|---|---|\n| Cline / Roo Code | `cline_mcp_settings.json` | `url` |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` | `serverUrl` |\n| Gemini CLI | `~/.gemini/settings.json` | `httpUrl` |\n| Zed | `settings.json` → `context_servers` | `url` |\n\nClients that only speak stdio can bridge with\n[`mcp-remote`](https://www.npmjs.com/package/mcp-remote):\n\n```json\n{\n  \"mcpServers\": {\n    \"crisphive\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://api.crisphive.com/mcp\"]\n    }\n  }\n}\n```\n\n### Local server (npm — `@crisphive/mcp`)\n\nThis repository also ships a thin **local stdio server**: the same 57 tools\n(same names, same schemas — generated from the same `/v1` OpenAPI spec as the\nhosted endpoint), where each call is an HTTPS request to the Crisphive API\nwith your key. No business logic runs locally.\n\n```json\n{\n  \"mcpServers\": {\n    \"crisphive\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@crisphive/mcp\"],\n      \"env\": { \"CRISPHIVE_API_KEY\": \"chsk_test_YOUR_KEY\" }\n    }\n  }\n}\n```\n\nEnvironment variables:\n\n| Variable | Required | Meaning |\n|---|---|---|\n| `CRISPHIVE_API_KEY` | for tool calls | `chsk_live_…` = production data, `chsk_test_…` = isolated sandbox. Create keys in the dashboard (Developers → API keys). |\n| `CRISPHIVE_BASE_URL` | no | API origin override (default `https://api.crisphive.com`). |\n\nPrefer the **hosted remote server** (`https://api.crisphive.com/mcp`) when your\nclient supports it — OAuth, no key handling, always current. The local package\nexists for stdio-only clients and self-hosted setups.\n\nDeveloping in this repo: `npm ci && npm test`. The tool registry\n(`src/tools.generated.json`) is generated — `npm run generate` refreshes it\nfrom the live spec; CI fails if it drifts from `/v1`.\n\n## Authentication\n\nEvery request is authenticated with a secret API key sent as a bearer token.\nCreate keys from your Crisphive business dashboard. **The key prefix selects the\ndata environment:**\n\n- `chsk_live_…` → live (production) data\n- `chsk_test_…` → sandbox (isolated test) data\n\nLoad keys from the environment — never commit them.\n\n**Keys expire.** The lifetime is chosen when the key is created — 30 days by\ndefault, up to 365 — and is fixed for that key's life; it cannot be extended\nlater. To renew, create a *second* key, point your agent at it, then revoke the\nfirst: a business can hold several active keys at once, so the changeover has\nno downtime and needs no special endpoint (the same procedure AWS documents for\naccess keys). Read `expires_at` from the dashboard or the key API and schedule\nthe swap. An aged-out key fails with `API_KEY_EXPIRED`, distinct from\n`API_KEY_INVALID`, so you can alert on a missed renewal separately from a\nrevocation.\n\nCrisphive emails the business's owners 7 days before a key expires (14 days for\nan OAuth connection), so an expiry should not be a surprise — but the mail goes\nto the business, not necessarily to you, so track `expires_at` yourself. A key\ndeliberately created for less than 7 days gets no advance notice; it would have\narrived at creation.\n\nThe MCP endpoint additionally supports **OAuth 2.1** for end-user connectors\n(claude.ai, ChatGPT, …): the business owner authorizes your agent on a consent\nscreen and no key is ever handled. A compliant MCP client runs the whole flow\nautomatically — discovery, dynamic client registration, authorization code +\nPKCE. Full flow, scopes and token lifetimes:\n[docs/integration.md](docs/integration.md).\n\n## Tools\n\n57 tools, one per operation of the public `/v1` API — same names as the SDK\nmethods (`listCustomers`, `createJobRequest`, …), derived from the same OpenAPI\nspec so REST and MCP never drift. Full reference:\n[docs/tools.md](docs/tools.md).\n\n| Group | Tools |\n|---|---|\n| **Customers** (CRM sync, full CRUD) | `listCustomers` · `createCustomer` · `getCustomer` · `updateCustomer` · `deleteCustomer` |\n| **Bookings** (create & track) | `createJobRequest` · `listJobRequests` · `getJobRequest` · `getJobRequestTimeline` · `listJobRequestBookingWindows` · `listJobRequestChanges` |\n| **Catalog** (read-only) | `listJobTypes` · `getJobType` · `listSkills` · `listSkillCategories` · `listSkillsByCategory` · `listServiceAreas` · `getServiceArea` |\n| **Team & fleet** (reads) | `listTechnicians` · `getTechnician` · `listVehicles` · `getVehicle` |\n| **Team roster management** (HR-system sync) | `createTechnician` · `updateTechnician` · `deleteTechnician` · `replaceTechnicianBuddies` · `replaceTechnicianLeads` · `replaceTechnicianVehicles` · `replaceTechnicianServiceAreas` · `replaceTechnicianSkills` · `listTechnicianSkills` |\n| **Matching & scheduling** (read-only, engine-computed) | `listMatchingSlots` · `listCrewCandidates` · `getTechnicianSchedule` · `listNearbyTechnicians` |\n| **Scheduling actions** (drive the schedule) | `quoteJobRequest` · `confirmJobRequest` · `previewJobRequestMove` · `commitJobRequestMove` |\n| **Priority & emergency dispatch** (P0–P3, SLA, cascade) | `updateJobPriority` · `listEmergencyCandidates` · `previewEmergencyReschedule` · `commitEmergencyReschedule` |\n\nTypical agent flow:\n\n```\nlistSkills / listJobTypes                → discover reference IDs\ncreateCustomer                           → { customer_id }\nlistJobRequestBookingWindows             → offer only the returned windows\ncreateJobRequest                         → booking created\nquoteJobRequest → confirmJobRequest      → scheduled (auto or forced technician)\ngetJobRequest / listJobRequestChanges    → track status\n```\n\nEmergency (P0) flow:\n\n```\ncreateJobRequest (priority: \"p0\") → quoteJobRequest\nlistEmergencyCandidates                  → ranked techs + crew_recommendation\npreviewEmergencyReschedule               → what moves (or reassigns)\ncommitEmergencyReschedule                → inserted + auto-confirmed\n```\n\n## Pagination\n\nList tools accept `page` / `limit` and return a `meta` object (`total`,\n`count`, `per_page`, `current_page`, `total_pages`).\n\n## Idempotency\n\nCreate/commit tools (`createCustomer`, `createTechnician`, `createJobRequest`,\n`confirmJobRequest`, `commitJobRequestMove`, `commitEmergencyReschedule`)\naccept an `idempotency_key` argument so retries never create a duplicate —\npass the same value when retrying.\n\n## Errors\n\nEvery tool returns the Crisphive response envelope (as text and as\n`structuredContent`): `error_code` is `0` on success, a stable string on\nfailure (`CUSTOMER_NOT_FOUND`, `API_KEY_INVALID`, …). Match codes, never\nmessage strings.\n\n## Documentation\n\n- Docs: https://docs.crisphive.com\n- MCP: https://docs.crisphive.com/mcp\n- API reference: https://docs.crisphive.com/technical-reference\n- Webhooks: https://docs.crisphive.com/webhook\n- For AI (OpenAPI spec + assistant bootstrap): https://docs.crisphive.com/for-ai\n- Client integration guide: [docs/integration.md](docs/integration.md)\n- Tool reference: [docs/tools.md](docs/tools.md)\n\n## Privacy & support\n\n- **Privacy policy:** https://crisphive.com/privacy-policy — Crisphive processes\n  the business data reachable through the API (customers, bookings, technicians,\n  fleet) solely to operate the Service; it does **not** sell personal\n  information. Data is retained while the account is active and shared only with\n  service providers/sub-processors as necessary. An agent connected over MCP acts\n  on behalf of the authorizing business and is scoped to that business's data,\n  environment (live vs sandbox) and granted permissions.\n- **Support:** support@crisphive.com\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 12124,
  "sha": "855f3ef9dec55ddb21df335fe7062fe62aa0f477eba53dfe2289c34191733c16",
  "repo_slug": "crisphive/crisphive-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_crisphive_mcp_53f9a518/readme"
}