{"_id":"@codecraftersllc/local-voice-mcp","_rev":"7-233c7765db2b44b85ee5e1fc3b4cbe13","name":"@codecraftersllc/local-voice-mcp","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@codecraftersllc/local-voice-mcp","version":"0.1.0","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.1.0","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"074f992a0a587eca449d8918d2ad16e34b5ee667","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.1.0.tgz","fileCount":28,"integrity":"sha512-VVbPh4mhSl6ZGcFjCrrp9DysCbDcBHhMojiDI9m4NGyd34dxvKEWFWaGpZYKJjnJv06QVWsmI8VVCvWQr2iR6g==","signatures":[{"sig":"MEUCIBjIITpSMfwZJBedRBeuUE2UBLD1W8WhdTds5y/dgInIAiEAn86QcIcMVeGA7FTeNf/lzgAoxgoHjER3X2nre/LsE7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1130990},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"9724a91a472f7b299b987191f0b57fa6881a3b61","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"20.19.1","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.1.0_1748829067314_0.6313906621428644","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@codecraftersllc/local-voice-mcp","version":"0.1.1","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.1.1","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"d0b0f4e5bf12f7a28ebbc8fbe15df9c0ac1d7e0b","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.1.1.tgz","fileCount":29,"integrity":"sha512-Ee9z1ESbPUNOeFYWIl3BoqguqqUisQWXnwlGTkKhEJR6PRLZa9ttL4uayZByyAUgih6YcvuAXhBGpirLREtL4A==","signatures":[{"sig":"MEQCIDDhCtN8OauisnaesE3oOGSWHcGhEVPkeO34gNk9ziQVAiAbDPRqmr2EcQss9ZvQjq2V/P7kbety8QKNewQ6h/HAbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1135112},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"bc96d87b2ee1c30fb5c3df01eb5a098d237c9135","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"20.19.1","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.1.1_1748830141269_0.6444077179526739","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@codecraftersllc/local-voice-mcp","version":"0.1.3","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.1.3","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"929b872c21e907f081fcf0fffa379c02965e3477","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.1.3.tgz","fileCount":29,"integrity":"sha512-n1k2aYKr78mPr5U7y7Wu2Hu3/cvRN/8IeutZwyQlyUD250Dko9Gogu8/ZoSYo9nuHUD8taqhx1jBhFPT/7MOow==","signatures":[{"sig":"MEUCIQDyqudWPFF5OCcAkOlUD1BkFtGs20igcMJM3v1L4qsNJQIgXSYX25Mn56/IAeZ9DO212B/TOEkjwsaqtzLhHKWaIUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1138543},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"6ff76642ba722bef4d6764d695b0f16a68a5d2dd","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"20.19.1","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.1.3_1748832240639_0.24193458731415696","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@codecraftersllc/local-voice-mcp","version":"0.1.4","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.1.4","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"c3498f1c682152fd315cd8f4494c76c51c1d65c6","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.1.4.tgz","fileCount":29,"integrity":"sha512-3C4hIZuz7e+Pw8sHrooHVCGgqJgr9YqsOkbmb4j1EkMBiKVyWUIZuRmI95NF9Z4UNO9dadW3XFlCpP9ox00Etg==","signatures":[{"sig":"MEUCIQCJYlKIm/gnnFAbFv+V0UaZVxuOIaD5uIc3jcaAmOODLgIgCQfCC+OvgXwMmvDGxt975VANDimek1V4y/ZS88i2HI8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1145146},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"12a49185d20f4cd4024ba2429f5783f1a492a232","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"20.19.1","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.1.4_1748834442491_0.07096193045316745","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@codecraftersllc/local-voice-mcp","version":"0.1.5","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.1.5","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"a683df0d075897d21855d0e390943c69df5fda55","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.1.5.tgz","fileCount":31,"integrity":"sha512-NrpW8MJceUbapi4gftPzAxjnELsNaW7JnpVi5PLeMWJ+I0w+wO7Wo2C3Y1mDGkMPOfAu9xLS5m6kABlcVgWtmA==","signatures":[{"sig":"MEYCIQD8VuJHwMrmuyp/a6ldFQ6LR5nx/CcC7LW0aPDAzJ4yvQIhAO+RlZ0UVLiAkcCqTmjkGPm+mqeDEm4Y6or0ESokAKKc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2161438},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"12a49185d20f4cd4024ba2429f5783f1a492a232","mcpName":"io.github.CodeCraftersLLC/local-voice-mcp","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"11.5.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.1.5_1759093141102_0.09567043934613717","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@codecraftersllc/local-voice-mcp","version":"0.2.0","keywords":["mcp","tts","text-to-speech","voice","ai"],"author":{"name":"soyboyscout"},"license":"MIT","_id":"@codecraftersllc/local-voice-mcp@0.2.0","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"dist":{"shasum":"35136ade812e8a9eb4af15193571567489469671","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.2.0.tgz","fileCount":51,"integrity":"sha512-yulGN4F0SAiVBYkwxO9RHXfiP0ikhjTtc73HtDXycGlcDqDd5osOUNtQDF4l9TFaTe+focsJU+CyfiV0MwThsw==","signatures":[{"sig":"MEQCIF7teypw7ACihypWzpxq4hxuR4KJvqUWBQKat8ocMzrFAiBlCYAiiAASzQCSmW6k17ZBt/6FeoTftHzNnXuu2EVDfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1227928},"main":"dist/server.js","types":"./dist/server.d.ts","gitHead":"fb0ae18016e314eca8053e4fb8980eb1f8a3b65a","mcpName":"io.github.CodeCraftersLLC/local-voice-mcp","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","dev:mcp":"ts-node src/mcp-server.ts","version":"npm run build && git add -A dist","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","start:mcp":"npm run build && node dist/mcp-server.js","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"repository":{"url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Give your MCP clients the ability to speak by running local voice models","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.25.42","axios":"^1.9.0","express":"^5.1.0","get-port":"^7.1.0","body-parser":"^2.2.0","@types/express":"^5.0.2","@types/body-parser":"^1.19.5","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","supertest":"^7.1.1","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@jest/globals":"^30.0.0-beta.3","@types/supertest":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/local-voice-mcp_0.2.0_1762052715100_0.08627829823871314","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@codecraftersllc/local-voice-mcp","version":"0.3.0","main":"dist/server.js","mcpName":"io.github.CodeCraftersLLC/local-voice-mcp","bin":{"local-voice-mcp-server":"dist/mcp-server.js"},"author":{"name":"soyboyscout"},"repository":{"type":"git","url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git"},"bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","scripts":{"test":"npx jest","build":"tsc","start":"ts-node src/server.ts","start:mcp":"npm run build && node dist/mcp-server.js","dev:mcp":"ts-node src/mcp-server.ts","dev:http":"MCP_MODE=http ts-node src/mcp-server.ts","prepublishOnly":"npm test && npm run build","version":"npm run build && git add -A dist","postversion":"git push && git push --tags"},"keywords":["mcp","tts","text-to-speech","voice","ai"],"license":"MIT","description":"Give your MCP clients the ability to speak by running local voice models","publishConfig":{"access":"public"},"devDependencies":{"@jest/globals":"^30.0.0-beta.3","@types/jest":"^29.5.14","@types/node":"^22.15.24","@types/supertest":"^6.0.3","jest":"^29.7.0","supertest":"^7.1.1","ts-jest":"^29.3.4","ts-node":"^10.9.2","typescript":"^5.8.3"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","@types/body-parser":"^1.19.5","@types/express":"^5.0.2","axios":"^1.9.0","body-parser":"^2.2.0","express":"^5.1.0","get-port":"^7.1.0","zod":"^3.25.42"},"_id":"@codecraftersllc/local-voice-mcp@0.3.0","gitHead":"4bf8a9c8b1d7f8fa4c996936af04fb53db9238f2","types":"./dist/server.d.ts","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-i1ntH/rXFnLpp0J2f4tsBYBbMrI1ec7r0jyplCr0vHB9/T5VZSXAwDQ6sWMDOraOzYnqWJScCklFkjpyVDPoiQ==","shasum":"4c22f3784f033196a0efc7a4e121bfed2f55b2e6","tarball":"https://registry.npmjs.org/@codecraftersllc/local-voice-mcp/-/local-voice-mcp-0.3.0.tgz","fileCount":51,"unpackedSize":1234367,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCux2avZTfFgHAA9dWMPnzWQwhDQuKaVUyH4Uxh5te38QIgBTnDrUcfT+YDReLQO76RlrzColY4I3SSg8tSpCBROME="}]},"_npmUser":{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"},"directories":{},"maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/local-voice-mcp_0.3.0_1767662625727_0.8156136115344257"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-02T01:51:07.220Z","modified":"2026-01-06T01:23:46.154Z","0.1.0":"2025-06-02T01:51:07.566Z","0.1.1":"2025-06-02T02:09:01.498Z","0.1.3":"2025-06-02T02:44:00.838Z","0.1.4":"2025-06-02T03:20:42.734Z","0.1.5":"2025-09-28T20:59:01.366Z","0.2.0":"2025-11-02T03:05:15.385Z","0.3.0":"2026-01-06T01:23:45.934Z"},"bugs":{"url":"https://github.com/CodeCraftersLLC/local-voice-mcp/issues"},"author":{"name":"soyboyscout"},"license":"MIT","homepage":"https://github.com/CodeCraftersLLC/local-voice-mcp#readme","keywords":["mcp","tts","text-to-speech","voice","ai"],"repository":{"type":"git","url":"git+https://github.com/CodeCraftersLLC/local-voice-mcp.git"},"description":"Give your MCP clients the ability to speak by running local voice models","maintainers":[{"name":"codecraftersllc-admin","email":"npmjs.com@codecrafters.llc"}],"readme":"# Local Voice MCP\n\nGive your MCP clients the ability to speak by running local voice models using Chatterbox Turbo TTS or Kokoro TTS.\n\n## Quickstart\n\nThe package includes a high-quality female reference voice that's used by default with Chatterbox Turbo TTS. All environment variables are optional.\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@codecraftersllc/local-voice-mcp\"],\n      \"env\": {\n        \"USE_MALE_VOICE\": \"false\",\n        \"CHATTERBOX_MAX_CHARACTERS\": \"2000\",\n        \"CHATTERBOX_PLAYBACK_VOLUME\": \"75\"\n      }\n    }\n  }\n}\n```\n\n## TTS Engine Selection\n\nLocal Voice MCP supports two TTS engines:\n\n### Chatterbox Turbo TTS (Default)\n\nHigh-quality voice synthesis with voice cloning support and paralinguistic tags. Automatically detects and uses the optimal backend for your hardware.\n\n- ✅ Cross-platform support (macOS, Windows, Linux)\n- ✅ Voice cloning with reference audio\n- ✅ Paralinguistic tags for expressive speech (`[laugh]`, `[sigh]`, `[cough]`, etc.)\n- ✅ Multi-architecture auto-detection:\n  - Apple Silicon (MPS): Uses MLX with `mlx-community/chatterbox-turbo-6bit`\n  - NVIDIA GPU (CUDA): Uses PyTorch with `ChatterboxTurboTTS`\n  - CPU: Uses PyTorch fallback\n- ✅ Smaller model (350M params) with lower latency\n\n### Kokoro TTS (Cross-Platform)\n\nHigh-quality open-source TTS using ONNX runtime with multi-language and multi-voice support.\n\n- ✅ Cross-platform (macOS, Windows, Linux)\n- ✅ Multiple languages (en-us, en-gb, fr-fr, it, ja, cmn)\n- ✅ 40+ voices with gender and accent options\n- ✅ Voice blending capability\n- ✅ Adjustable speech speed\n- ✅ GPU support\n- ✅ Long-form content (no length limitations)\n- ✅ **Automatic dependency and model installation** (nothing to install manually!)\n\nTo use Kokoro, set the `TTS_ENGINE` environment variable:\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@codecraftersllc/local-voice-mcp\"],\n      \"env\": {\n        \"TTS_ENGINE\": \"kokoro\",\n        \"KOKORO_LANGUAGE\": \"en-us\",\n        \"KOKORO_VOICE\": \"af_sarah\",\n        \"KOKORO_SPEED\": \"1.0\"\n      }\n    }\n  }\n}\n```\n\n**Setup:**\n\nKokoro TTS automatically installs Python dependencies and downloads model files (~100MB) on first use. Just configure the MCP server and you're ready to go!\n\n**What Happens on First Use:**\n\n- Python packages (`kokoro-onnx`, `soundfile`, `numpy`) are automatically installed via pip\n- Model files (`kokoro-v1.0.onnx` ~90MB, `voices-v1.0.bin` ~13MB) are automatically downloaded\n- Files are cached in `~/.cache/kokoro-tts/` for future use\n- This one-time setup takes ~1-2 minutes depending on your internet connection\n\n**Manual Installation (Optional):**\n\nIf you prefer to install dependencies manually or if automatic installation fails:\n\n```bash\n# Install Python dependencies\npip install kokoro-onnx soundfile numpy\n\n# Model files will still auto-download, or you can download manually:\ncd ~/.cache/kokoro-tts\nwget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/kokoro-v1.0.onnx\nwget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/voices-v1.0.bin\n```\n\n**Available Voices:**\n\n- 🇺🇸 American English: `af_alloy`, `af_bella`, `af_sarah`, `af_nova`, `am_adam`, `am_michael`, `am_eric`, and more\n- 🇬🇧 British English: `bf_emma`, `bf_isabella`, `bm_george`, `bm_lewis`, and more\n- 🇫🇷 French: `ff_siwis`\n- 🇮🇹 Italian: `if_sara`, `im_nicola`\n- 🇯🇵 Japanese: `jf_alpha`, `jm_kumo`, and more\n- 🇨🇳 Chinese: `zf_xiaobei`, `zm_yunjian`, and more\n\n**Voice Blending:**\nKokoro supports blending multiple voices for unique voice characteristics:\n\n```bash\n# 60-40 mix of two voices\nKOKORO_VOICE=\"af_sarah:60,am_adam:40\"\n\n# Equal blend (50-50)\nKOKORO_VOICE=\"am_adam,af_sarah\"\n```\n\n## Features\n\n- **MCP Server Implementation**: Full Model Context Protocol server using `@modelcontextprotocol/sdk`\n- **HTTP API**: ElevenLabs-compatible REST API for direct integration\n- **Text-to-Speech Synthesis**: High-quality voice synthesis using Chatterbox Turbo TTS\n- **Voice Cloning**: Support for reference audio for voice cloning\n- **Paralinguistic Tags**: Add expressive elements like `[laugh]`, `[sigh]`, `[cough]` directly in text\n- **Multi-Architecture Support**: Auto-detects and uses optimal backend (MLX for Apple Silicon, CUDA for NVIDIA, CPU fallback)\n- **Volume Control**: Configurable audio playback volume with cross-platform support\n- **Robust File Management**: Automatic cleanup of temporary audio files\n- **Security**: Path validation and sanitization to prevent directory traversal\n- **Dual Mode Operation**: Run as MCP server or HTTP server\n\n## Installation\n\n### From npm (Recommended)\n\n```bash\nnpm install -g local-voice-mcp\n```\n\n### From Source\n\n```bash\ngit clone <repository-url>\ncd local-voice-mcp\nnpm install\nnpm run build\n```\n\n## Usage\n\n### MCP Server Mode (Default)\n\nRun as an MCP server with stdio transport:\n\n```bash\nlocal-voice-mcp-server\n```\n\nOr using npx:\n\n```bash\nnpx local-voice-mcp-server\n```\n\n### HTTP Server Mode\n\nRun as an HTTP server:\n\n```bash\nMCP_MODE=http local-voice-mcp-server\n```\n\nOr set the port:\n\n```bash\nPORT=3000 MCP_MODE=http local-voice-mcp-server\n```\n\n### Development\n\n```bash\n# Run MCP server in development\nnpm run dev:mcp\n\n# Run HTTP server in development\nnpm run dev:http\n\n# Run tests\nnpm test\n\n# Build project\nnpm run build\n```\n\n## MCP Tools\n\nWhen running in MCP mode, the following tools are available:\n\n### `synthesize_text`\n\nConverts text to speech and returns audio data using the configured TTS engine.\n\n**Common Parameters:**\n\n- `text` (string, required): Text to synthesize\n\n**Chatterbox Turbo-Specific Parameters:**\n\n- `referenceAudio` (string, optional): Path to reference audio for voice cloning\n\n**Note:** Chatterbox Turbo uses paralinguistic tags directly in text instead of prosody parameters. Include tags like `[laugh]`, `[sigh]`, `[cough]`, `[chuckle]`, `[gasp]`, `[groan]`, `[clear throat]`, `[sniff]`, `[shush]` in your text for expressive speech.\n\n**Kokoro-Specific Parameters:**\n\n- `speed` (number, optional): Speech speed (0.5-2.0, default: 1.0)\n- `language` (string, optional): Language code (e.g., 'en-us', 'en-gb', 'fr-fr', 'ja', 'cmn', default: 'en-us')\n- `voice` (string, optional): Voice name (e.g., 'af_sarah', 'am_adam', 'bf_emma', default: 'af_sarah')\n- `model_path` (string, optional): Path to Kokoro ONNX model file\n- `voices_path` (string, optional): Path to Kokoro voices bin file\n\n**Returns:**\n\n- JSON response with synthesis status and file path\n\n**Example Response:**\n\n```json\n{\n  \"success\": true,\n  \"message\": \"Speech synthesis completed successfully\",\n  \"audioFile\": \"/tmp/local-voice-mcp/audio_20240115_103000_abc123.wav\",\n  \"textLength\": 25,\n  \"audioFormat\": \"wav\",\n  \"engine\": \"chatterbox\",\n  \"engineName\": \"chatterbox\",\n  \"options\": {},\n  \"generatedAt\": \"2024-01-15T10:30:00.000Z\"\n}\n```\n\nThe audio file is saved to the temporary directory and can be played using any audio player or accessed programmatically.\n\n### `play_audio`\n\nPlay an audio file using the system's default audio player with optional volume control.\n\n**Parameters:**\n\n- `audioFile` (string, required): Path to the audio file to play\n- `volume` (number, optional): Playback volume as percentage (0-100). If not specified, uses CHATTERBOX_PLAYBACK_VOLUME environment variable or default of 50.\n\n**Supported Formats:**\n\n- WAV files (.wav)\n- MP3 files (.mp3)\n\n**Returns:**\n\n- JSON response with playback status and system information\n\n**Example Response:**\n\n```json\n{\n  \"success\": true,\n  \"message\": \"Successfully played audio file: /tmp/local-voice-mcp/audio_123.wav\",\n  \"audioFile\": \"/tmp/local-voice-mcp/audio_123.wav\",\n  \"volume\": 50,\n  \"platform\": \"darwin\",\n  \"command\": \"afplay -v 0.5 /tmp/local-voice-mcp/audio_123.wav\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\"\n}\n```\n\n**Platform Support:**\n\n- **Cross-platform**: Prefers `ffplay` (from ffmpeg) for consistent volume control across all platforms\n- **macOS**: Falls back to `afplay` command with `-v` volume flag\n- **Windows**: Falls back to PowerShell with `MediaPlayer` and volume control\n- **Linux**: Falls back to `mpg123` (MP3) with gain control or `aplay` (WAV, no volume control)\n\n### `tts_status`\n\nReturns the current status of the TTS service.\n\n**Parameters:** None\n\n**Returns:**\n\n- JSON response with service status and capabilities\n\n**Example Response:**\n\n```json\n{\n  \"success\": true,\n  \"status\": \"operational\",\n  \"message\": \"TTS service is ready and operational\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\",\n  \"service\": {\n    \"name\": \"Chatterbox TTS\",\n    \"version\": \"0.1.0\",\n    \"capabilities\": [\n      \"text-to-speech synthesis\",\n      \"voice cloning with reference audio\",\n      \"prosody controls\"\n    ]\n  }\n}\n```\n\n## MCP Resources\n\n### `service-info`\n\nProvides information about the Local Voice MCP service.\n\n**URI:** `local-voice://service-info`\n\n## HTTP API\n\nWhen running in HTTP mode, the server exposes:\n\n### `POST /tts`\n\nElevenLabs-compatible text-to-speech endpoint.\n\n**Headers:**\n\n- `X-API-Key`: API key (placeholder for authentication)\n- `Content-Type`: application/json\n\n**Request Body:**\n\n```json\n{\n  \"text\": \"[sigh] Hello, world! [laugh] This is great!\",\n  \"options\": {\n    \"referenceAudio\": \"path/to/reference.wav\"\n  }\n}\n```\n\n**Response:**\n\n- Content-Type: `audio/wav`\n- Binary audio data\n\n## Configuration\n\n### Environment Variables\n\n#### Server Configuration\n\n- `PORT`: HTTP server port (default: 59125)\n- `MCP_MODE`: Operation mode - \"mcp\" or \"http\" (default: \"mcp\")\n\n#### TTS Engine Selection\n\n- `TTS_ENGINE`: TTS engine to use - \"chatterbox\", \"kani-mlx\", or \"kokoro\" (default: \"chatterbox\")\n\n#### Chatterbox Turbo TTS Configuration\n\nThese environment variables can be used to set default values for Chatterbox Turbo TTS synthesis. They will be used if not overridden by options passed to the synthesize method:\n\n- `PYTHON_PATH`: Path to Python interpreter (default: \"python3\"). **Important:** If using Apple Silicon with Python 3.13+, point this to a conda environment with Python 3.11-3.12 where mlx-audio is installed.\n- `CHATTERBOX_REFERENCE_AUDIO`: Path to reference audio file for voice cloning (can be anywhere on your system, supports .wav, .mp3, .flac, .ogg, .m4a, .aac). If not specified, uses the bundled high-quality female reference voice.\n- `USE_MALE_VOICE`: Use male voice instead of bundled female reference voice (true/false, default: false). When set to true, uses the default Chatterbox male voice instead of the bundled female voice. This only applies when no custom reference audio is specified.\n- `CHATTERBOX_MAX_CHARACTERS`: Maximum number of characters allowed for text input (integer, default: 2000)\n- `CHATTERBOX_OUTPUT_DIR`: Output directory for generated audio files (default: system temp + \"local-voice-mcp\")\n- `CHATTERBOX_PLAYBACK_VOLUME`: Default audio playback volume as percentage (integer, 0-100, default: 50)\n\n**Paralinguistic Tags:** Instead of prosody controls, use paralinguistic tags directly in your text: `[laugh]`, `[sigh]`, `[cough]`, `[chuckle]`, `[gasp]`, `[groan]`, `[clear throat]`, `[sniff]`, `[shush]`\n\n**Example:** `\"[sigh] I can't believe it's Monday again. [laugh] But let's make the best of it!\"`\n\n#### Kokoro Configuration\n\nThese environment variables can be used to set default values for Kokoro synthesis:\n\n- `KOKORO_SPEED`: Speech speed (float, 0.5-2.0, default: 1.0)\n- `KOKORO_LANGUAGE`: Language code (string, default: \"en-us\"). Supported: en-us, en-gb, fr-fr, it, ja, cmn\n- `KOKORO_VOICE`: Voice name (string, default: \"af_sarah\"). See available voices above. Can also use voice blending format like \"voice1:weight,voice2:weight\"\n- `KOKORO_MODEL_PATH`: Path to kokoro ONNX model file (string, default: \"kokoro-v1.0.onnx\")\n- `KOKORO_VOICES_PATH`: Path to voices bin file (string, default: \"voices-v1.0.bin\")\n- `KOKORO_MAX_CHARACTERS`: Maximum number of characters allowed for text input (integer, default: 5000)\n- `KOKORO_OUTPUT_DIR`: Output directory for generated audio files (default: system temp + \"local-voice-mcp\")\n- `PYTHON_PATH`: Path to Python interpreter (default: \"python3\")\n\n**Example:**\n\n```bash\n# Set default TTS parameters via environment variables\n# Reference audio can be anywhere on your system\nexport CHATTERBOX_REFERENCE_AUDIO=\"/Users/john/Music/my-voice.wav\"\nexport CHATTERBOX_MAX_CHARACTERS=\"3000\"\nexport CHATTERBOX_PLAYBACK_VOLUME=\"75\"\n\n# Run the MCP server with these defaults\nlocal-voice-mcp-server\n```\n\n**Using with npx:**\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@codecraftersllc/local-voice-mcp\"],\n      \"env\": {\n        \"CHATTERBOX_REFERENCE_AUDIO\": \"/Users/john/Music/my-voice.wav\",\n        \"CHATTERBOX_MAX_CHARACTERS\": \"3000\",\n        \"CHATTERBOX_PLAYBACK_VOLUME\": \"75\"\n      }\n    }\n  }\n}\n```\n\n**Using male voice instead of bundled female voice:**\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@codecraftersllc/local-voice-mcp\"],\n      \"env\": {\n        \"USE_MALE_VOICE\": \"true\"\n      }\n    }\n  }\n}\n```\n\n**Priority Order:**\n\n1. Options passed to the `synthesize_text` or `play_audio` tools (highest priority)\n2. Environment variables\n3. Built-in defaults (lowest priority)\n\n### MCP Client Configuration\n\nAdd to your MCP client configuration:\n\n```json\n{\n  \"local-voice-mcp\": {\n    \"command\": \"npx\",\n    \"args\": [\"-y\", \"local-voice-mcp-server\"],\n    \"env\": {}\n  }\n}\n```\n\n## Testing with Cursor\n\nCursor is a popular AI-powered code editor that supports MCP. Here's how to test the Local Voice MCP server with Cursor:\n\n### 1. Install the Package\n\nFirst, install the package globally or ensure it's available:\n\n```bash\nnpm install -g local-voice-mcp\n# or\nnpm install local-voice-mcp\n```\n\n### 2. Configure Cursor\n\nAdd the MCP server to your Cursor configuration file. The location depends on your operating system:\n\n- **macOS**: `~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/config.json`\n- **Windows**: `%APPDATA%\\Cursor\\User\\globalStorage\\cursor.mcp\\config.json`\n- **Linux**: `~/.config/Cursor/User/globalStorage/cursor.mcp/config.json`\n\nAdd this configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"local-voice-mcp-server\",\n      \"args\": [],\n      \"env\": {}\n    }\n  }\n}\n```\n\nOr if using npx:\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"local-voice-mcp-server\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\n### 3. Restart Cursor\n\nAfter adding the configuration, restart Cursor to load the MCP server.\n\n### 4. Test the Integration\n\nOnce Cursor is restarted, you can test the TTS functionality:\n\n1. **Open Cursor's AI chat**\n2. **Ask Cursor to use the TTS tools**:\n\n   ```\n   Can you synthesize speech for \"Hello, this is a test of the local voice MCP server\"?\n   ```\n\n3. **Check TTS status**:\n\n   ```\n   What's the status of the TTS service?\n   ```\n\n4. **Test with paralinguistic tags**:\n\n   ```\n   Synthesize \"[sigh] Welcome to the future of AI coding. [laugh] It's going to be amazing!\"\n   ```\n\n5. **Test audio playback**:\n\n   ```\n   Play the audio file that was just generated\n   ```\n\n6. **Test volume control**:\n   ```\n   Play the audio file at 25% volume\n   ```\n\n### 5. Verify the Tools Are Available\n\nYou should see the following tools available in Cursor:\n\n- **`synthesize_text`** - For text-to-speech conversion\n- **`play_audio`** - For playing audio files through system audio\n- **`tts_status`** - For checking service status\n\n### 6. Troubleshooting\n\nIf the MCP server doesn't appear in Cursor:\n\n1. **Check the logs**: Look for error messages in Cursor's developer console\n2. **Verify installation**: Run `local-voice-mcp-server` directly in terminal to ensure it works\n3. **Check paths**: Ensure the command path is correct in your configuration\n4. **Restart Cursor**: Sometimes a full restart is needed after configuration changes\n5. **JSON parsing errors**: If you see \"Unexpected token\" errors, ensure you're using the latest version with proper stdio logging\n\n### 7. Expected Behavior\n\nWhen working correctly:\n\n- Cursor will be able to call the TTS tools\n- You'll receive structured JSON responses with file paths\n- Audio files will be saved to the temporary directory\n- The TTS service will use the Chatterbox Turbo TTS engine\n- Files can be played using system audio players\n\nAll responses are in structured JSON format with clear file paths, making it easy for MCP clients and AI agents to understand and work with the results.\n\n## Requirements\n\n- Node.js 16+\n- Python 3.10-3.12 (Python 3.13+ not yet supported by mlx-audio dependencies)\n- PyTorch (for CUDA/CPU backends)\n- For Apple Silicon: `pip install mlx-audio`\n- For CUDA/CPU: `pip install chatterbox-tts`\n\n**Important for Apple Silicon users:** The `mlx-audio` package requires Python <3.13 due to dependency constraints. If your system Python is 3.13+, you'll need to use a conda environment:\n\n```bash\n# Create a Python 3.11 environment for Chatterbox\nconda create -n chatterbox python=3.11\nconda activate chatterbox\npip install mlx-audio\n\n# Then set PYTHON_PATH in your MCP config to point to this environment\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"local-voice-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@codecraftersllc/local-voice-mcp\"],\n      \"env\": {\n        \"TTS_ENGINE\": \"chatterbox\",\n        \"PYTHON_PATH\": \"/path/to/miniconda3/envs/chatterbox/bin/python\"\n      }\n    }\n  }\n}\n```\n\nThe service automatically detects your hardware and uses the optimal backend:\n\n| Platform | Backend | Model |\n|----------|---------|-------|\n| Apple Silicon (via MLX) | MLX | `mlx-community/chatterbox-turbo-6bit` |\n| NVIDIA GPU (CUDA) | PyTorch | `ChatterboxTurboTTS` |\n| CPU | PyTorch | `ChatterboxTurboTTS` (slower) |\n\n## Architecture\n\n```\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│   MCP Client    │    │  HTTP Client     │    │   CLI Tool      │\n│ (Cursor, etc.)  │    │                  │    │                 │\n└─────────┬───────┘    └─────────┬────────┘    └─────────┬───────┘\n          │                      │                       │\n          │ stdio                │ HTTP                  │ stdio\n          │                      │                       │\n          ▼                      ▼                       ▼\n    ┌─────────────────────────────────────────────────────────────┐\n    │              Local Voice MCP Server                         │\n    │  ┌─────────────────┐    ┌─────────────────────────────────┐ │\n    │  │   MCP Server    │    │         HTTP Server             │ │\n    │  │   (stdio)       │    │      (Express.js)               │ │\n    │  └─────────────────┘    └─────────────────────────────────┘ │\n    │                                   │                         │\n    │  ┌─────────────────────────────────────────────────────────┐ │\n    │  │              TTS Tools & Services                       │ │\n    │  │  ┌─────────────────┐    ┌─────────────────────────────┐ │ │\n    │  │  │ ChatterboxService│    │    File Management         │ │ │\n    │  │  │                 │    │   (Cleanup & Security)     │ │ │\n    │  │  └─────────────────┘    └─────────────────────────────┘ │ │\n    │  └─────────────────────────────────────────────────────────┘ │\n    └─────────────────────────────────────────────────────────────┘\n                                   │\n                                   ▼\n                        ┌─────────────────────┐\n                        │   Python TTS        │\n                        │ (Chatterbox Turbo)  │\n                        └─────────────────────┘\n```\n\n## License\n\nMIT\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass\n6. Submit a pull request\n","readmeFilename":"README.md"}