{"_id":"@callmcp/server","_rev":"7-cdb74bc162dce8c7930ce7042962f8f8","name":"@callmcp/server","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@callmcp/server","version":"0.1.0","license":"MIT","_id":"@callmcp/server@0.1.0","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"bin":{"callmcp-server":"dist/index.js"},"dist":{"shasum":"c76f92685dca2c6965ee128495d197685f14690f","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.0.tgz","fileCount":30,"integrity":"sha512-REFDDkZttT8XPryWmgoq3BjUNiGCuDssj8ZFIbPMCdW4B3O53416tmy0Xz64mWOgprkDMoMPRbtQTVijkC3kkQ==","signatures":[{"sig":"MEYCIQDKIxy0eDtOIx+cdIxwbKdFCCNCkUdH1LRFkX+S+aadaQIhAPNjUE2Fka8nvN3dZ64kyVxWXvm934GTYLL7+WMe5TOo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170390},"main":"./dist/index.js","type":"module","_from":"file:callmcp-server-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"_resolved":"C:\\Users\\cgall\\AppData\\Local\\Temp\\b1c292d9900a534a28fa889b73df73ce\\callmcp-server-0.1.0.tgz","_integrity":"sha512-REFDDkZttT8XPryWmgoq3BjUNiGCuDssj8ZFIbPMCdW4B3O53416tmy0Xz64mWOgprkDMoMPRbtQTVijkC3kkQ==","_npmVersion":"10.8.2","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.24.1","@callmcp/driver-interface":"0.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.4","typescript":"^5.7.2","@types/node":"^22.10.2","@callmcp/driver-byok":"0.1.0","@callmcp/driver-dograh":"0.1.0","@callmcp/driver-kaicalls":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_0.1.0_1783643332091_0.184822333070084","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@callmcp/server","version":"0.1.1","license":"MIT","_id":"@callmcp/server@0.1.1","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"bin":{"callmcp-server":"dist/index.js"},"dist":{"shasum":"b8ddca36b1063202077e4fe538b5a89d9004215a","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.1.tgz","fileCount":30,"integrity":"sha512-RIwE7MgQ5zmT5skXsbodTAdm+JICKqnZUlDhP+FaYGyvZRP0A1d1zXyf3FL4aJhXFZAWgdv29TrQrc6lJVqxVA==","signatures":[{"sig":"MEUCIHiH4N+qJY26KINNqifmT5l9Z4y7u9+Zzn7u0X69JsSVAiEAh2PZrl6VtmjXxi8oMgughTlZDvmmJoKS3LTHmuj0sdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170424},"main":"./dist/index.js","type":"module","_from":"file:callmcp-server-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"mcpName":"ai.callmcp/server","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"_resolved":"C:\\Users\\cgall\\AppData\\Local\\Temp\\1f1ddea0d1e398133e52c4a95cfbc189\\callmcp-server-0.1.1.tgz","_integrity":"sha512-RIwE7MgQ5zmT5skXsbodTAdm+JICKqnZUlDhP+FaYGyvZRP0A1d1zXyf3FL4aJhXFZAWgdv29TrQrc6lJVqxVA==","_npmVersion":"10.8.2","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.24.1","@callmcp/driver-interface":"0.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.4","typescript":"^5.7.2","@types/node":"^22.10.2","@callmcp/driver-byok":"0.1.0","@callmcp/driver-dograh":"0.1.0","@callmcp/driver-kaicalls":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_0.1.1_1783644483977_0.8193253434805488","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@callmcp/server","version":"0.1.2","license":"MIT","_id":"@callmcp/server@0.1.2","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"bin":{"callmcp-server":"dist/index.js"},"dist":{"shasum":"58925666f621c66bb8749bb1d2f7c510b885a3c6","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.2.tgz","fileCount":31,"integrity":"sha512-l5SciXO+/37BOct/MGZRlTwzWBGTftKCyrLr2hOhrqadVQ9+QW5ecYjjqeXIN4SzhklGWGpLPrvkDCOGMr3ZmA==","signatures":[{"sig":"MEQCIGgyQXeYZK+NCG3Qe3EXKfUj5YPlPEvb4jyQgRcB0DtbAiAX1sKOMRpzrgDOtXcusDXLE2X+Hf9EHmX6u3QMiPqkpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174804},"main":"./dist/index.js","type":"module","_from":"file:callmcp-server-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"mcpName":"ai.callmcp/server","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"_resolved":"C:\\Users\\cgall\\AppData\\Local\\Temp\\7f8f97685089a3a01456ab21db1d2d40\\callmcp-server-0.1.2.tgz","_integrity":"sha512-l5SciXO+/37BOct/MGZRlTwzWBGTftKCyrLr2hOhrqadVQ9+QW5ecYjjqeXIN4SzhklGWGpLPrvkDCOGMr3ZmA==","_npmVersion":"10.8.2","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.24.1","@callmcp/driver-interface":"0.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.4","typescript":"^5.7.2","@types/node":"^22.10.2","@callmcp/driver-byok":"0.1.0","@callmcp/driver-dograh":"0.1.0","@callmcp/driver-kaicalls":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_0.1.2_1783644767983_0.6702022741221574","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@callmcp/server","version":"0.1.3","license":"MIT","_id":"@callmcp/server@0.1.3","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"bin":{"callmcp":"dist/index.js","callmcp-server":"dist/index.js"},"dist":{"shasum":"f7e02da40785ffcd347c3d6443d88d24574b8b0a","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.3.tgz","fileCount":30,"integrity":"sha512-KsI31wpUDDHpv8YC52dpAj+tOl903nNEcm7G8jxniZMzqhZn8vQiV8U4qy19pVxm77JBivwI8okA6ljc3iCeug==","signatures":[{"sig":"MEYCIQC2Vyfp84h6bR1mAldhxoLGTFqAg7dHCiV4V4k+BD9TJwIhAPJO0mCfOnqIxgstINmvWS+kP9dy6YmhhNFkJetiiK/i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181061},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"880fd2bf3cb2e4b35d7d8b30cadb014bed89234d","mcpName":"ai.callmcp/server","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"deprecated":"broken: published with unresolved workspace:* dependency versions, npm install will fail. Use 0.1.4 or later.","_npmVersion":"10.8.2","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.24.1","@callmcp/driver-interface":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"optionalDependencies":{"@callmcp/driver-byok":"workspace:*","@callmcp/driver-dograh":"workspace:*","@callmcp/driver-kaicalls":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/server_0.1.3_1783719129180_0.7369670500298371","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@callmcp/server","version":"0.1.4","license":"MIT","_id":"@callmcp/server@0.1.4","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"bin":{"callmcp":"dist/index.js","callmcp-server":"dist/index.js"},"dist":{"shasum":"a2e9693a3fe3136813457ca5068cb1153dfae525","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.4.tgz","fileCount":31,"integrity":"sha512-6esWKLR4KQS1TtLt8hdPU4lNHPvCOSO7j4TwHyIk2z2YgWxbs+7Z6ph+dkl3B0OC7WB8T08i2s+/5/zG3Vy6ZQ==","signatures":[{"sig":"MEQCIDA4gFAph4DEZVrrab35zFRfaaiaXsKfawe1MlKoqMu+AiAtDcBA02Q5BPi29xkrpl6CbAiroQCGtjkHdP8l9t76WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182113},"main":"./dist/index.js","type":"module","_from":"file:callmcp-server-0.1.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"mcpName":"ai.callmcp/server","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"_resolved":"C:\\Users\\cgall\\AppData\\Local\\Temp\\92fe39de6aff3decec2cb2d02ed72d22\\callmcp-server-0.1.4.tgz","_integrity":"sha512-6esWKLR4KQS1TtLt8hdPU4lNHPvCOSO7j4TwHyIk2z2YgWxbs+7Z6ph+dkl3B0OC7WB8T08i2s+/5/zG3Vy6ZQ==","_npmVersion":"10.8.2","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.24.1","@callmcp/driver-interface":"0.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"optionalDependencies":{"@callmcp/driver-byok":"0.1.0","@callmcp/driver-dograh":"0.1.0","@callmcp/driver-kaicalls":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/server_0.1.4_1783719186387_0.6575294341357523","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@callmcp/server","version":"0.1.5","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","license":"MIT","mcpName":"ai.callmcp/server","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"bin":{"callmcp-server":"dist/index.js","callmcp":"dist/index.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","zod":"^3.24.1","@callmcp/driver-interface":"0.1.0"},"optionalDependencies":{"@callmcp/driver-byok":"0.1.0","@callmcp/driver-dograh":"0.1.0","@callmcp/driver-kaicalls":"0.1.1"},"devDependencies":{"@types/node":"^22.10.2","typescript":"^5.7.2","vitest":"^2.1.4"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsc -p tsconfig.json --watch","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","typecheck":"tsc -p tsconfig.json --noEmit"},"_id":"@callmcp/server@0.1.5","_integrity":"sha512-uDu/OOmbs+SKFQ+Bp83xubr5UJZrbuEDQJJNGphUg06l9YptuWc93UZZOMtUoNOi0bswEX7o8zu9jVIrmAr4Gw==","_resolved":"C:\\Users\\cgall\\AppData\\Local\\Temp\\458d6a0d664dabd338bfe68d35a55623\\callmcp-server-0.1.5.tgz","_from":"file:callmcp-server-0.1.5.tgz","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-uDu/OOmbs+SKFQ+Bp83xubr5UJZrbuEDQJJNGphUg06l9YptuWc93UZZOMtUoNOi0bswEX7o8zu9jVIrmAr4Gw==","shasum":"c91dd31187d1d4bcb99e82e2c0049dc4defc2267","tarball":"https://registry.npmjs.org/@callmcp/server/-/server-0.1.5.tgz","fileCount":31,"unpackedSize":182113,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBprCYRXcNajUU6M+rMeiQA2dCO/NpRgN29whG+r97nwAiEAnBshXsPqBrxWxTEuEDzC8vk7GZqT3SagSxSYrnoU0/c="}]},"_npmUser":{"name":"kaicmo","email":"connor@kaicalls.com"},"directories":{},"maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server_0.1.5_1783720795938_0.8436306198925545"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-10T00:28:51.965Z","modified":"2026-07-10T21:59:56.208Z","0.1.0":"2026-07-10T00:28:52.241Z","0.1.1":"2026-07-10T00:48:04.100Z","0.1.2":"2026-07-10T00:52:48.155Z","0.1.3":"2026-07-10T21:32:09.356Z","0.1.4":"2026-07-10T21:33:06.594Z","0.1.5":"2026-07-10T21:59:56.081Z"},"license":"MIT","description":"CallMCP server core — MCP server implementing the 14-tool CallMCP telephony contract (SPEC.md) against any registered driver.","maintainers":[{"name":"kaicmo","email":"connor@kaicalls.com"}],"readme":"# @callmcp/server\n\n[![npm version](https://img.shields.io/npm/v/@callmcp/server)](https://www.npmjs.com/package/@callmcp/server)\n\nThe CallMCP server core — an MCP server implementing the 14-tool CallMCP\ntelephony contract ([`SPEC.md`](../../SPEC.md) at the repo root) against\nwhichever `Driver` you configure. This package has no telephony logic of its\nown; it's the neutral layer that turns a `Driver` implementation\n([`@callmcp/driver-kaicalls`](../driver-kaicalls/README.md),\n[`@callmcp/driver-dograh`](../driver-dograh/README.md),\n[`@callmcp/driver-byok`](../driver-byok/README.md),\nor a third-party one) into a spec-conformant MCP server.\n\n## What's in here\n\n| File | What it's for |\n|---|---|\n| `src/config.ts` | Resolves a `callmcp.config.json` file or env vars into a set of configured drivers, exactly one marked default. |\n| `src/driverRegistry.ts` | Dynamically loads driver packages (or embeds already-constructed `Driver`s), falls back to [`@callmcp/driver-interface`](../driver-interface/README.md)'s `MockDriver` if nothing loads, notifies listeners on reconfiguration. |\n| `src/approval.ts` | `ApprovalStore` — the SPEC §3 approval state machine (pending/approved/denied/expired), elicitation-first with the out-of-band-URL fallback for clients that don't support MCP elicitation. |\n| `src/tools.ts` | `ServerCore` — registers all 14 tools with their SPEC-defined schemas and annotations; `make_call`/`send_sms` route through `ensureDestinationApproved` before ever touching a driver. |\n| `src/dynamicTools.ts` | Computes the live `tools/list` from the active driver's capability manifest (SPEC §2.2) and fires `notifications/tools/list_changed` when the driver set changes. |\n| `src/transports.ts` | stdio and Streamable HTTP transports, both backed by the same `ServerCore`. Also serves `/approve/:id`, the human-facing approval page for the non-elicitation fallback. |\n| `src/index.ts` | CLI entrypoint (`callmcp-server` bin). |\n| `test/server.test.ts` | Unit tests against [`@callmcp/driver-interface`](../driver-interface/README.md)'s `MockDriver`, plus a real dynamic-`import()` test against the three bundled driver packages. |\n\n## Usage\n\n```bash\nnpx @callmcp/server                    # stdio transport, reads ./callmcp.config.json if present\nnpx @callmcp/server --http --port 8787 # Streamable HTTP transport\nnpx @callmcp/server doctor             # read-only journey preflight\nnpx @callmcp/server --sandbox          # explicit local sandbox; never contacts a provider\n```\n\n### Config file\n\n```json\n{\n  \"drivers\": [\n    { \"id\": \"kaicalls\", \"type\": \"kaicalls\", \"default\": true,\n      \"credentials\": { \"apiKey\": \"kc_live_...\" } },\n    { \"id\": \"dograh\", \"type\": \"dograh\",\n      \"credentials\": { \"baseUrl\": \"http://localhost:8000\", \"apiKey\": \"...\" } }\n  ],\n  \"http\": { \"port\": 8787, \"publicUrl\": \"https://your-host.example.com\" }\n}\n```\n\n- `type` is one of `kaicalls`, `dograh`, `byok`, or `mock` (an in-memory\n  no-credentials driver for local testing, from [`@callmcp/driver-interface`](../driver-interface/README.md)).\n- Exactly one driver may be `\"default\": true`. Omit it entirely and the\n  first configured driver becomes default. A tool call with no `driver`\n  field routes to whichever one is default.\n- `credentials`/`options` are shallow-merged and passed straight through to\n  the driver package's constructor — see each driver's own README for its\n  expected shape (e.g. `KaiCallsDriverConfig`, `DograhDriverOptions`,\n  `BYOKDriverConfig`).\n- `http.publicUrl` matters even in stdio mode: it's what the out-of-band\n  approval link (SPEC §3.4) points at when the connected client doesn't\n  support MCP elicitation. If you're running stdio-only with no HTTP\n  surface reachable at that URL, a human can't open the link — see the\n  note in `src/index.ts`.\n\n### Env vars (no config file — e.g. a single-tenant Docker container)\n\n```bash\nCALLMCP_DRIVER_TYPE=kaicalls\nCALLMCP_DRIVER_CREDENTIALS='{\"apiKey\":\"kc_live_...\"}'\nnpx @callmcp/server\n```\n\nOr `CALLMCP_DRIVERS_JSON` (a JSON array, same shape as the config file's\n`drivers` field) for more than one driver without a mounted file.\n\n### No driver configured\n\nThe server fails closed. It does not silently load the in-memory mock, because\nthat can make an unconfigured deployment look production-ready. Use\n`--sandbox` or an explicit `{ \"id\": \"mock\", \"type\": \"mock\" }` entry for\nlocal testing, then configure a real provider before activation.\n\n### Managed KaiCalls path\n\nFor the shortest hosted path, configure `type: \"kaicalls\"` with a\n`kc_live_...` API key. KaiCalls' API-first onboarding is `POST\nhttps://www.kaicalls.com/api/v1/signup`; existing accounts use the managed\nMCP endpoint at `https://www.kaicalls.com/api/mcp`. KaiCalls currently does not\nissue a `kc_test_` sandbox key, so CallMCP's `--sandbox` is intentionally local\nand never substitutes for provider-side activation.\n\n## Third-party drivers\n\nA driver package doesn't need to be in this monorepo. Export a\n`createDriver(entry: { id, credentials, options }) => Driver` factory (named\nor default export) and reference it as `type` in your config — see\n`driverRegistry.ts`'s factory-convention lookup. The three bundled drivers\npredate this convention and are loaded via a known-class fallback instead;\nnew drivers should use the factory.\n","readmeFilename":"README.md"}