{"_id":"@efficy/tribecrm-mcp-server","_rev":"8-cdf5efaaa1c28d1aee30803e516147ad","name":"@efficy/tribecrm-mcp-server","dist-tags":{"latest":"0.5.0"},"versions":{"0.2.0":{"name":"@efficy/tribecrm-mcp-server","version":"0.2.0","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.2.0","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"36d65e87c21e177ff128435a6bb4b6478c366f9e","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.2.0.tgz","fileCount":15,"integrity":"sha512-DzUC154Umt/dlgC+Gug89bWbDBod1ULjBBXKBUyTSBNWy7CICr+tv/j4umiNO7Ev0yNAl3cteh/2BIayLMFxqA==","signatures":[{"sig":"MEYCIQC5+6PAgpOqo0CsBjfkgsPZ3d59X+yOgcLBk26BNimtswIhAMpe8G8B64j5cD3udjDyDnCdHbNydt6C3siF3NHAKwvC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46992},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"771b8cee8e2b093ed3d757a99e676ba2e6d79c85","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"24.12.0","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.2.0_1769545746986_0.7976918934065345","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@efficy/tribecrm-mcp-server","version":"0.2.1","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.2.1","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"cad047f66c6290aeeb8c61531a896485b4cffa60","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.2.1.tgz","fileCount":15,"integrity":"sha512-EcxGJFig+pUTuIOlFyfuUSzWYJvdh4byNk/Y8rUWNtLJfYxoF/Y4R20pYPINnXU6pbD/FtxS58vYtxqUhHyqlg==","signatures":[{"sig":"MEQCIHOzBdokSaDdQVe7ZCUhaVOB27sAxaL8c/xg3NXxxOFhAiBTY6u3qsVyO/h2ZOvIYMhi2SKS+ueFLukrCUhtX0IyUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47980},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"08791c5684f0e1ec6f5f6d38042cdaa80040636f","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"24.12.0","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.2.1_1769547028083_0.8540573576071226","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@efficy/tribecrm-mcp-server","version":"0.3.0","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.3.0","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"bf890716cf5c4378b4997aa50c11c585b91635de","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.3.0.tgz","fileCount":15,"integrity":"sha512-41hlbcUXmDTPNdeS9UOSViRPCXqABwGP//7cKOmtJrJ9LIOI9WB7hFATGqE6MPtHKgyAEG6Ex5TnyX155pVIlQ==","signatures":[{"sig":"MEUCIQCiZs54IQoiLIqomZWgGVrN0B1PF/Bi00yELUuYmFVIEQIgTqtAzufwK4s0A9NmYnhavOdWjTi6DYwOwUUXfpqmBjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48638},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a941c8d276ba6faa5ca8b4731505c7ec4d4da22b","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"18.20.8","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.3.0_1769775336415_0.8613000301374956","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@efficy/tribecrm-mcp-server","version":"0.4.0","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.4.0","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"50bb5c2dee1808ff47e4a07ab47bbabcfd1cc18d","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.4.0.tgz","fileCount":15,"integrity":"sha512-wicK1lUUq4EmtSlqAGQHzLFZ7z3O7b+a68TX1xTZviwiUtlji8P/CmJrohEIN9L64CwymfNfkXWYA9tEypbAFg==","signatures":[{"sig":"MEQCIG0brUTOfNCi+COrM4+VrUcsNfi2rFVK6Y0sU94sn+xrAiBehab5tUaiZPfWCvnwBDDaqEyrOk5ukKtvyViX5mLlNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52193},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1241c1dafa9f1c9d874f375d4e45994f5294b086","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"18.20.8","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.4.0_1770645404489_0.6805496815348828","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@efficy/tribecrm-mcp-server","version":"0.4.1","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.4.1","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"85a0bccc7a605540f422081954d289b878cc8bf2","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.4.1.tgz","fileCount":27,"integrity":"sha512-xJjjxclK2RnRI7RHkAvJ+gTwwZbaLZ5f/mrhiQrfkLtBPMyxrmsuOdQBpnfdOh6aim47FXOa7t1Uvkth28O8fg==","signatures":[{"sig":"MEUCIQC9RvY+xldFw7Unyojq7ifjSraOmJJJ90I92wAFZJ8r0gIgJaL55cKhPRaaN7r+ZJxmbj48XWx3kfvAdJtMwrGe65Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147220},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1241c1dafa9f1c9d874f375d4e45994f5294b086","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/index.js","prepare":"npm run build","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"18.20.8","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9","@vitest/ui":"^2.1.9","typescript":"^5.7.3","@types/node":"^22.10.5","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.4.1_1770649076589_0.8135266516227349","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@efficy/tribecrm-mcp-server","version":"0.4.2","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.4.2","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js"},"dist":{"shasum":"b177b29f0efac0ab9f662faef48e5561c967f68e","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.4.2.tgz","fileCount":27,"integrity":"sha512-T3VzVdbeqlaM/u6d4YU34oRmYUvACbxOQcEVOz8antydat8fqk1T+EofuS+YMbxjcjlltjsTppUn1cwlskDVCw==","signatures":[{"sig":"MEYCIQC4birndXARV51jzKRrwVx/OpMXBSi0aC1SL36L8e6mnwIhAOu7maDA8NP5GwIiflwmX/pYMIgjgKpCRkrgD6DSnaIS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156668},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"59bfb25dbe5e94a805c8bb8775eb4afa73510318","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/index.js","prepare":"npm run build","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"18.20.8","dependencies":{"axios":"^1.13.5","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@vitest/ui":"^3.2.4","typescript":"^5.7.3","@types/node":"^22.10.5","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.4.2_1770720803770_0.11105173306257843","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@efficy/tribecrm-mcp-server","version":"0.4.3","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","_id":"@efficy/tribecrm-mcp-server@0.4.3","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"bin":{"tribecrm-mcp-server":"dist/index.js","tribecrm-authenticate":"dist/scripts/authenticate.js"},"dist":{"shasum":"accb6ab21fa486119b51289ebaf65b1db4d51ff9","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.4.3.tgz","fileCount":55,"integrity":"sha512-iOmCB9i2TIV8VnuhgezhNCrZV1KwkKeX6JOamuSTO+Qf+w+0ryXDNGk/y5W7/ymufEHByt/UpJP13oc16juhPA==","signatures":[{"sig":"MEYCIQCQdI9rRq1HAXMA+UDsm7kdIwupscvSE5OAKOPpzrsCIgIhAJA4gc8CtxbufhCzgiwhyPsWG1FE51YZoyZdi7RoSCd2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245146},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"72755dda511db728d0cfd159a5de5ee1d5f64a3e","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/index.js","prepare":"npm run build","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"repository":{"url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","directories":{},"_nodeVersion":"18.20.8","dependencies":{"axios":"^1.13.5","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@vitest/ui":"^3.2.4","typescript":"^5.7.3","@types/node":"^22.10.5","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tribecrm-mcp-server_0.4.3_1770729387782_0.6739239129770889","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@efficy/tribecrm-mcp-server","version":"0.5.0","description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","main":"dist/index.js","type":"module","bin":{"tribecrm-mcp-server":"dist/index.js","tribecrm-authenticate":"dist/scripts/authenticate.js"},"scripts":{"build":"tsc","dev":"tsc --watch","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","test:ui":"vitest --ui","test:coverage":"vitest run --coverage","prepare":"npm run build","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git"},"bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.26.0","axios":"^1.13.5","dotenv":"^16.4.7"},"devDependencies":{"@types/node":"^22.10.5","@vitest/coverage-v8":"^3.2.4","@vitest/ui":"^3.2.4","typescript":"^5.7.3","vitest":"^3.2.4"},"_id":"@efficy/tribecrm-mcp-server@0.5.0","gitHead":"27376ecd9a1247bbb406fbf920c7cedf4624af76","types":"./dist/index.d.ts","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-nPw4a2zZ9AQkrLRMtbT6iqF14apxT4+KxRqfRNJn6ipToUwwj7+r4Rmw8Mm5bPgrXoEsCDCE+ZVaIkURaf5Auw==","shasum":"841487365bfe73b0ef8fc393b5c2b89f81c5e2a7","tarball":"https://registry.npmjs.org/@efficy/tribecrm-mcp-server/-/tribecrm-mcp-server-0.5.0.tgz","fileCount":63,"unpackedSize":313903,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEzO/+6wKjz33HPSnJ6Rp5FxWuHxSi0HpW4FmCZvimomAiB1I6H0TCsQ3EdvwJJ74kkh3IlCrYboOLXWzd+Hc8C/vw=="}]},"_npmUser":{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"},"directories":{},"maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tribecrm-mcp-server_0.5.0_1771088695686_0.5472055252772146"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-27T20:29:06.898Z","modified":"2026-02-14T17:04:55.978Z","0.2.0":"2026-01-27T20:29:07.117Z","0.2.1":"2026-01-27T20:50:28.217Z","0.3.0":"2026-01-30T12:15:36.557Z","0.4.0":"2026-02-09T13:56:44.658Z","0.4.1":"2026-02-09T14:57:56.798Z","0.4.2":"2026-02-10T10:53:23.910Z","0.4.3":"2026-02-10T13:16:27.929Z","0.5.0":"2026-02-14T17:04:55.858Z"},"bugs":{"url":"https://github.com/efficy-sa/tribecrm-mcp-server/issues"},"author":{"name":"Johann Norsa","email":"johann.norsa@efficy.com"},"license":"MIT","homepage":"https://github.com/efficy-sa/tribecrm-mcp-server#readme","keywords":["mcp","model-context-protocol","tribecrm","api","crm","odata","claude","ai","llm"],"repository":{"type":"git","url":"git+https://github.com/efficy-sa/tribecrm-mcp-server.git"},"description":"Model Context Protocol server for TribeCRM API - enables AI assistants to interact with TribeCRM","maintainers":[{"name":"johann.norsa","email":"johann.norsa.pub@gmail.com"}],"readme":"# TribeCRM MCP Server\r\n\r\n[![npm version](https://img.shields.io/npm/v/@efficy/tribecrm-mcp-server)](https://www.npmjs.com/package/@efficy/tribecrm-mcp-server)\r\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://www.typescriptlang.org/)\r\n[![MCP SDK](https://img.shields.io/badge/MCP%20SDK-1.0-green)](https://github.com/modelcontextprotocol)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\nModel Context Protocol (MCP) server for TribeCRM API integration. This server enables AI assistants like Claude to interact with TribeCRM entities, perform searches, and manage connectors.\r\n\r\n## 🚀 Features\r\n\r\n### Tools\r\n- **Entity Management** (CRUD operations)\r\n  - Create, read, update, and delete CRM entities\r\n  - Support for contacts, companies, deals, activities, and more\r\n- **Advanced Search & Query**\r\n  - Search across entities with filters and pagination\r\n  - Complex filter criteria support\r\n- **Connector Management**\r\n  - List available integration connectors\r\n  - Get connector details and status\r\n\r\n### Resources\r\n- **Entity Type Definitions**: Access schema and field information for entity types\r\n- **Dynamic Resources**: Entity data exposed as MCP resources for context\r\n\r\n### Security Modes\r\n- **Read-Only Mode** (default): Secure by default - only allows querying and retrieving data\r\n- **Read-Write Mode**: Full access including create, update, and delete operations\r\n\r\n> ⚠️ **Breaking Change in v0.4.0**: The server now defaults to read-only mode for security. If you need write access, set `TRIBECRM_MODE=read-write` in your configuration.\r\n\r\n## 🔐 Authentication Methods\r\n\r\n### App Authentication (Default)\r\nThe server uses **OAuth2 Client Credentials flow** for service account authentication. This is the default and recommended method for AI assistants and automated systems.\r\n\r\n**Use case**: AI assistants, automation, backend services\r\n\r\n**Configuration**:\r\n```bash\r\nTRIBECRM_AUTH=app  # Default - can be omitted\r\n```\r\n\r\n### User Authentication ✨ NEW\r\n**OAuth2 Authorization Code flow** for user-specific authentication. This allows the MCP server to act on behalf of a specific user rather than a service account.\r\n\r\n**Use case**: Personal AI assistants, user-specific operations\r\n\r\n**✨ Recommended: Authenticate directly from Claude**\r\n\r\nThe easiest way to authenticate is directly from your conversation with Claude:\r\n\r\n1. Configure your MCP client with `TRIBECRM_AUTH=user` (see Configuration section)\r\n2. Restart Claude Desktop\r\n3. Ask Claude: **\"Can you authenticate with TribeCRM?\"**\r\n4. Claude will use the `tribecrm_authenticate` tool to generate an authentication link\r\n5. Click the link, log in to TribeCRM, and accept the consent\r\n6. Tokens are saved automatically - no restart needed!\r\n\r\n**Alternative: CLI Authentication**\r\n\r\nFor testing, debugging, or pre-authentication, you can use the CLI command:\r\n\r\n```bash\r\nnpx @efficy/tribecrm-mcp-server authenticate\r\n# or if installed locally:\r\nnpm run authenticate\r\n```\r\n\r\nYour browser will open for TribeCRM login, and tokens will be saved to `~/.tribecrm/tokens.json`\r\n\r\n**Features**:\r\n- ✨ **No terminal needed** - authenticate directly from Claude\r\n- 🔄 Automatic token refresh (tokens valid for 24 hours)\r\n- 💾 Secure local token storage (`~/.tribecrm/tokens.json`)\r\n- ⚡ No restart required after authentication\r\n- ✅ Standard OAuth2 Authorization Code flow\r\n- 🔐 User-specific access rights respected\r\n\r\n**Requirements**:\r\n- Both `TRIBECRM_CLIENT_ID` and `TRIBECRM_CLIENT_SECRET` are required for the authentication flow\r\n- Redirect URI must be pre-registered in your OAuth client configuration (default: `http://localhost:3001/callback`)\r\n\r\n## 📋 Prerequisites\r\n\r\n- Node.js 18 or higher\r\n- TribeCRM API credentials (Client ID and Secret)\r\n- Access to a TribeCRM instance\r\n\r\n## 🔧 Installation\r\n\r\n### Option 1: Using npx (Recommended)\r\n\r\nNo installation required! The server can be run directly using npx.\r\n\r\n### Option 2: Local Development\r\n\r\n```bash\r\ngit clone https://github.com/efficy-sa/tribecrm-mcp-server.git\r\ncd tribecrm-mcp-server\r\nnpm install\r\nnpm run build\r\n```\r\n\r\n## ⚙️ Configuration\r\n\r\n### Claude Desktop Configuration\r\n\r\nAdd to your Claude Desktop config file:\r\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\r\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\r\n\r\n#### Using npx (Recommended)\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"tribecrm\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@efficy/tribecrm-mcp-server\"],\r\n      \"env\": {\r\n        \"TRIBECRM_API_URL\": \"https://api.tribecrm.nl\",\r\n        \"TRIBECRM_AUTH_URL\": \"https://auth.tribecrm.nl\",\r\n        \"TRIBECRM_CLIENT_ID\": \"your_client_id\",\r\n        \"TRIBECRM_CLIENT_SECRET\": \"your_client_secret\",\r\n        \"TRIBECRM_MODE\": \"read-only\",\r\n        \"TRIBECRM_AUTH\": \"app\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n**Note**:\r\n- Set `TRIBECRM_MODE` to `read-write` if you need to create, update, or delete entities.\r\n- For user authentication, set `TRIBECRM_AUTH` to `user` and optionally add `TRIBECRM_REDIRECT_URI` (defaults to `http://localhost:3000/callback`).\r\n\r\n#### Using Local Installation\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"tribecrm\": {\r\n      \"command\": \"node\",\r\n      \"args\": [\"/absolute/path/to/tribecrm-mcp-server/dist/index.js\"],\r\n      \"env\": {\r\n        \"TRIBECRM_API_URL\": \"https://api.tribecrm.nl\",\r\n        \"TRIBECRM_AUTH_URL\": \"https://auth.tribecrm.nl\",\r\n        \"TRIBECRM_CLIENT_ID\": \"your_client_id\",\r\n        \"TRIBECRM_CLIENT_SECRET\": \"your_client_secret\",\r\n        \"TRIBECRM_MODE\": \"read-only\",\r\n        \"TRIBECRM_AUTH\": \"app\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Getting TribeCRM Credentials\r\n\r\n1. Log in to your TribeCRM instance\r\n2. Navigate to Settings > Integrations > OAuth2 Apps\r\n3. Create a new OAuth2 application with \"Service Account\" type\r\n4. Copy the Client ID and Client Secret\r\n5. Add required scopes: `read write offline`\r\n\r\n### Environment Variables\r\n\r\n- `TRIBECRM_API_URL` (required): Your TribeCRM API URL (e.g., https://api.tribecrm.nl or https://api-staging.tribecrm.nl)\r\n- `TRIBECRM_AUTH_URL` (required): Your TribeCRM OAuth2 authentication URL (e.g., https://auth.tribecrm.nl or https://auth-staging.tribecrm.nl)\r\n- `TRIBECRM_CLIENT_ID` (required): OAuth2 Client ID\r\n- `TRIBECRM_CLIENT_SECRET` (required for both auth methods): OAuth2 Client Secret\r\n  - Required when using `TRIBECRM_AUTH=app` (default) - for Client Credentials flow\r\n  - Required when using `TRIBECRM_AUTH=user` - for Authorization Code token exchange\r\n- `TRIBECRM_MODE` (optional): Server operation mode - `read-only` (default) or `read-write`\r\n  - `read-only`: Only allows queries and data retrieval (get, query operations). Write tools are hidden.\r\n  - `read-write`: Allows full access including create, update, and delete operations.\r\n- `TRIBECRM_AUTH` (optional): Authentication method - `app` (default) or `user`\r\n  - `app`: OAuth2 Client Credentials flow for service account authentication\r\n  - `user`: OAuth2 Authorization Code flow for user-specific authentication\r\n- `TRIBECRM_REDIRECT_URI` (optional): Redirect URI for user authentication (only needed when `TRIBECRM_AUTH=user`)\r\n  - Default: `http://localhost:3001/callback`\r\n  - Must match the redirect URI configured in your TribeCRM OAuth application\r\n\r\n## 📚 Available Tools\r\n\r\n### Authentication Operations\r\n\r\n#### `tribecrm_authenticate`\r\nStart user authentication flow (only available when `TRIBECRM_AUTH=user`)\r\n\r\n**Use case**: When user authentication is required but no valid tokens are found, this tool generates an authentication URL and starts a background callback server to handle the OAuth flow.\r\n\r\n**Parameters:** None\r\n\r\n**Returns**: Authentication URL and step-by-step instructions\r\n\r\n**Features**:\r\n- ✨ Authenticate directly from Claude without using the terminal\r\n- 🔄 Background callback server automatically handles OAuth redirects\r\n- 💾 Tokens saved automatically to `~/.tribecrm/tokens.json`\r\n- ⚡ No restart required - tokens work immediately after authentication\r\n\r\n**Example workflow**:\r\n1. User asks: \"Can you authenticate with TribeCRM?\"\r\n2. Claude calls `tribecrm_authenticate` tool\r\n3. User clicks the provided authentication link\r\n4. User logs in to TribeCRM and accepts consent\r\n5. Tokens are saved automatically\r\n6. User can immediately use TribeCRM tools\r\n\r\n**Error messages**: If authentication is needed, other TribeCRM tools will display a helpful error message suggesting to use this tool or run `npm run authenticate` manually.\r\n\r\n#### `tribecrm_get_current_employee`\r\nGet information about the currently authenticated employee\r\n\r\n**Parameters:**\r\n- `expand` (string, optional): OData $expand parameter (e.g., \"Person\")\r\n\r\n**Example:**\r\n```json\r\n{\r\n  \"expand\": \"Person\"\r\n}\r\n```\r\n\r\n### Entity Operations\r\n\r\n#### `tribecrm_get_entity`\r\nRetrieve a specific entity by ID\r\n\r\n**Parameters:**\r\n- `entityType` (string): Entity type (e.g., 'contact', 'company', 'deal')\r\n- `entityId` (string): Unique entity identifier\r\n\r\n**Example:**\r\n```json\r\n{\r\n  \"entityType\": \"contact\",\r\n  \"entityId\": \"12345\"\r\n}\r\n```\r\n\r\n#### `tribecrm_create_entity`\r\nCreate a new entity\r\n\r\n**Parameters:**\r\n- `entityType` (string): Entity type to create\r\n- `data` (object): Entity data as key-value pairs\r\n\r\n**Example:**\r\n```json\r\n{\r\n  \"entityType\": \"contact\",\r\n  \"data\": {\r\n    \"name\": \"John Smith\",\r\n    \"email\": \"john@example.com\",\r\n    \"phone\": \"+1234567890\"\r\n  }\r\n}\r\n```\r\n\r\n#### `tribecrm_update_entity`\r\nUpdate an existing entity\r\n\r\n**Parameters:**\r\n- `entityType` (string): Entity type\r\n- `entityId` (string): Entity ID to update\r\n- `data` (object): Updated entity data\r\n\r\n**Example:**\r\n```json\r\n{\r\n  \"entityType\": \"contact\",\r\n  \"entityId\": \"12345\",\r\n  \"data\": {\r\n    \"email\": \"newemail@example.com\"\r\n  }\r\n}\r\n```\r\n\r\n#### `tribecrm_delete_entity`\r\nDelete an entity\r\n\r\n**Parameters:**\r\n- `entityType` (string): Entity type\r\n- `entityId` (string): Entity ID to delete\r\n\r\n### Search Operations\r\n\r\n#### `tribecrm_search_entities`\r\nSearch for entities with filters and pagination\r\n\r\n**Parameters:**\r\n- `entityType` (string, required): Entity type to search\r\n- `query` (string, optional): Search query string\r\n- `filters` (object, optional): Filter criteria\r\n- `page` (number, optional): Page number (default: 1)\r\n- `pageSize` (number, optional): Results per page (default: 20, max: 100)\r\n\r\n**Example:**\r\n```json\r\n{\r\n  \"entityType\": \"company\",\r\n  \"query\": \"tech\",\r\n  \"filters\": {\r\n    \"location\": \"New York\",\r\n    \"status\": \"active\"\r\n  },\r\n  \"page\": 1,\r\n  \"pageSize\": 20\r\n}\r\n```\r\n\r\n### Connector Operations\r\n\r\n#### `tribecrm_list_connectors`\r\nList all available connectors\r\n\r\n**Parameters:** None\r\n\r\n#### `tribecrm_get_connector`\r\nGet details of a specific connector\r\n\r\n**Parameters:**\r\n- `connectorId` (string): Connector ID\r\n\r\n## 📖 Documentation\r\n\r\n- [Usage Examples](docs/EXAMPLES.md) - Detailed usage examples and scenarios\r\n- [Troubleshooting Guide](docs/TROUBLESHOOTING.md) - Common issues and solutions\r\n- [Contributing](CONTRIBUTING.md) - Guidelines for contributing to this project\r\n\r\n## 🏗️ Architecture\r\n\r\n```\r\n┌─────────────────┐\r\n│  MCP Client     │\r\n│  (Claude, etc.) │\r\n└────────┬────────┘\r\n         │\r\n         │ MCP Protocol (stdio)\r\n         │\r\n┌────────▼────────────────┐\r\n│  TribeCRM MCP Server    │\r\n│  ┌──────────────────┐   │\r\n│  │  Tool Handlers   │   │\r\n│  │  - Entity CRUD   │   │\r\n│  │  - Search        │   │\r\n│  │  - Connectors    │   │\r\n│  └──────────────────┘   │\r\n│  ┌──────────────────┐   │\r\n│  │ Resource Handler │   │\r\n│  │ - Entity Types   │   │\r\n│  └──────────────────┘   │\r\n│  ┌──────────────────┐   │\r\n│  │  API Client      │   │\r\n│  │  - OAuth2 Auth   │   │\r\n│  │  - HTTP Requests │   │\r\n│  └──────────────────┘   │\r\n└────────┬────────────────┘\r\n         │\r\n         │ HTTPS + OAuth2\r\n         │\r\n┌────────▼────────────┐\r\n│  TribeCRM API       │\r\n│  (REST API)         │\r\n└─────────────────────┘\r\n```\r\n\r\n## 🔐 Authentication\r\n\r\nThe server uses OAuth2 Client Credentials flow:\r\n1. Authenticates with TribeCRM API using client credentials\r\n2. Obtains access token\r\n3. Automatically refreshes token before expiry\r\n4. Includes token in all API requests\r\n\r\n## 🧪 Testing\r\n\r\nThe project has comprehensive unit tests with >95% code coverage.\r\n\r\n### Running Tests\r\n\r\n```bash\r\n# Run all tests\r\nnpm test\r\n\r\n# Run tests in watch mode\r\nnpm run test:watch\r\n\r\n# Run tests with coverage report\r\nnpm run test:coverage\r\n\r\n# Run tests with UI\r\nnpm run test:ui\r\n```\r\n\r\n### Test Coverage\r\n\r\n| File | Coverage | Details |\r\n|------|----------|---------|\r\n| client.ts | 100% | All API client methods tested |\r\n| types.ts | - | Type definitions (no runtime coverage needed) |\r\n| index.ts | - | Server initialization (tested separately) |\r\n\r\n**Coverage Standards**:\r\n- Lines: 95%+\r\n- Functions: 95%+\r\n- Branches: 95%+\r\n- Statements: 95%+\r\n\r\n### Writing Tests\r\n\r\nTests are written using [Vitest](https://vitest.dev/) and follow these conventions:\r\n- Test files: `*.test.ts` in `src/` directory\r\n- Comprehensive mocking of external dependencies (axios)\r\n- Clear test descriptions using describe/it blocks\r\n- Both positive and negative test cases\r\n\r\n## 🛠️ Development\r\n\r\n### Project Structure\r\n\r\n```\r\ntribecrm-mcp-server/\r\n├── src/\r\n│   ├── index.ts          # Main MCP server implementation\r\n│   ├── client.ts         # TribeCRM API client\r\n│   └── types.ts          # TypeScript type definitions\r\n├── docs/\r\n│   ├── EXAMPLES.md       # Usage examples\r\n│   └── TROUBLESHOOTING.md # Troubleshooting guide\r\n├── dist/                 # Compiled JavaScript (generated)\r\n├── .env.example          # Environment template\r\n├── package.json          # Dependencies and scripts\r\n├── tsconfig.json         # TypeScript configuration\r\n└── README.md            # This file\r\n```\r\n\r\n### Tech Stack\r\n\r\n- **TypeScript** - Type-safe development\r\n- **@modelcontextprotocol/sdk** - MCP protocol implementation\r\n- **axios** - HTTP client for API requests\r\n- **dotenv** - Environment variable management\r\n\r\n## 🤝 Contributing\r\n\r\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\r\n\r\n## 📝 License\r\n\r\nMIT License - see LICENSE file for details\r\n\r\n## 🔗 Links\r\n\r\n- [TribeCRM](https://tribecrm.com) - Official TribeCRM website\r\n- [Model Context Protocol](https://modelcontextprotocol.io) - MCP documentation\r\n- [GitHub Repository](https://github.com/efficy-sa/tribecrm-mcp-server)\r\n\r\n## 📧 Support\r\n\r\nFor issues and questions:\r\n- Open an issue on [GitHub](https://github.com/efficy-sa/tribecrm-mcp-server/issues)\r\n- Check the [Troubleshooting Guide](docs/TROUBLESHOOTING.md)\r\n\r\n---\r\n\r\n**Note:** This is an unofficial MCP server for TribeCRM. For official API documentation, please refer to your TribeCRM instance documentation.\r\n","readmeFilename":"README.md"}