{"_id":"@alfe.ai/connectwise-automate-mcp","_rev":"3-4a83256d25f738f18c240fa2e6ced183","name":"@alfe.ai/connectwise-automate-mcp","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@alfe.ai/connectwise-automate-mcp","version":"0.1.0","author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/connectwise-automate-mcp@0.1.0","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","bin":{"connectwise-automate-mcp":"dist/bin.js"},"dist":{"shasum":"910e79b68765a7a631313d8c4c56297e41b05b18","tarball":"https://registry.npmjs.org/@alfe.ai/connectwise-automate-mcp/-/connectwise-automate-mcp-0.1.0.tgz","fileCount":12,"integrity":"sha512-uRaG6U9ipTZUivaYpPpIchw77ZllRbcD7yCpRUE2b3XQZbnyl19f27UOLnaIdQ7KRRCadOMV2QzxOJi//2l2nQ==","signatures":[{"sig":"MEUCIAnDEtD5RtNZGi+vjeeiq60y6hUPhXGhCtUJfD/pYvB+AiEAmSHZv0k84Y0zNgUCgJO24O0U2egZEuwaLLU3uYIoaLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59659},"main":"./dist/server.js","type":"module","_from":"file:alfe.ai-connectwise-automate-mcp-0.1.0.tgz","types":"./dist/server.d.ts","exports":{".":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/d85cbb603007033c4ab0022a7e0e8ecf/alfe.ai-connectwise-automate-mcp-0.1.0.tgz","_integrity":"sha512-uRaG6U9ipTZUivaYpPpIchw77ZllRbcD7yCpRUE2b3XQZbnyl19f27UOLnaIdQ7KRRCadOMV2QzxOJi//2l2nQ==","_npmVersion":"10.9.8","description":"ConnectWise Automate inventory and monitoring MCP server with Alfe connections","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.5","@alfe.ai/config":"0.4.1","@alfe.ai/agent-api-client":"0.19.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/connectwise-automate-mcp_0.1.0_1788928263842_0.9810541510694648","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alfe.ai/connectwise-automate-mcp","version":"0.1.1","author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/connectwise-automate-mcp@0.1.1","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","bin":{"connectwise-automate-mcp":"dist/bin.js"},"dist":{"shasum":"c01b47a46b971d1331ec20472c2a1f3a3be1116e","tarball":"https://registry.npmjs.org/@alfe.ai/connectwise-automate-mcp/-/connectwise-automate-mcp-0.1.1.tgz","fileCount":12,"integrity":"sha512-gK7KnIPcKvrGP7OcJGZ1MRPqr3r+HEbCvfwwevhR4s4b+JmolteOK0SLhzX4+aa93Av5uxEwBFyBpqMeGV2czg==","signatures":[{"sig":"MEUCIAkvmxvF5yWIblmBxPSPe8qRq9IyqpOym/+TWzi0XsRUAiEAzlszgO3ZOATeP6gWnoaLZfMosXerAyCrQjfdm+KJtNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIQDu3JxZibr22r9QS72dh738eTKNOV5W8525P5kNzLVDRAIfGpmO8qsTqt907Sg0f6aBXUWrjJsjNvbttMSY8Ax/1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59659},"main":"./dist/server.js","type":"module","_from":"file:alfe.ai-connectwise-automate-mcp-0.1.1.tgz","types":"./dist/server.d.ts","exports":{".":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/6ed63c86b25b4fc912bee58fccb7b1bf/alfe.ai-connectwise-automate-mcp-0.1.1.tgz","_integrity":"sha512-gK7KnIPcKvrGP7OcJGZ1MRPqr3r+HEbCvfwwevhR4s4b+JmolteOK0SLhzX4+aa93Av5uxEwBFyBpqMeGV2czg==","_npmVersion":"10.9.8","description":"ConnectWise Automate inventory and monitoring MCP server with Alfe connections","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.5","@alfe.ai/config":"0.4.1","@alfe.ai/agent-api-client":"0.19.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/connectwise-automate-mcp_0.1.1_1789857351039_0.8773160174115979","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"_id":"@alfe.ai/connectwise-automate-mcp@0.1.2","bin":{"connectwise-automate-mcp":"dist/bin.js"},"dist":{"shasum":"6e0522e4b01bd7a74c880a21329352d96be06751","tarball":"https://registry.npmjs.org/@alfe.ai/connectwise-automate-mcp/-/connectwise-automate-mcp-0.1.2.tgz","fileCount":12,"integrity":"sha512-a72QFvOXbzmylGj0MljxEBO2G7k5q28ICGay4udmIMplTZz9NYY3wSdU6GQ2ndkqUhiO4JYO9bEGMVuAPE0/dw==","signatures":[{"sig":"MEQCIDmW/0MhiZ/7maOVTg8J5Z1/Yl7LXQ0s8oecVCHOXm6cAiAMkrlptJCoE+5EaMS6Aa2z38JUwZg22NrHFq63pi+Iiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDdvOY0nKAoiambbiWW9E1GBuTiIM8m48gPSvzGU9DHngIgGHSFmPYoW1RxINOLsUiKkoEizTZCfgg/3LHwmGk6p7Y="}],"unpackedSize":59659},"main":"./dist/server.js","name":"@alfe.ai/connectwise-automate-mcp","type":"module","_from":"file:alfe.ai-connectwise-automate-mcp-0.1.2.tgz","types":"./dist/server.d.ts","author":{"url":"https://alfe.ai","name":"Alfe"},"exports":{".":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"license":"UNLICENSED","scripts":{"lint":"eslint .","test":"vitest run","build":"tsdown","typecheck":"tsc --noEmit"},"version":"0.1.2","_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"homepage":"https://alfe.ai","_resolved":"/tmp/497243e4900fefda4d82b704e8df505c/alfe.ai-connectwise-automate-mcp-0.1.2.tgz","_integrity":"sha512-a72QFvOXbzmylGj0MljxEBO2G7k5q28ICGay4udmIMplTZz9NYY3wSdU6GQ2ndkqUhiO4JYO9bEGMVuAPE0/dw==","_npmVersion":"10.9.8","description":"ConnectWise Automate inventory and monitoring MCP server with Alfe connections","directories":{},"maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.0.5","@alfe.ai/config":"0.4.1","@alfe.ai/agent-api-client":"0.19.2","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/connectwise-automate-mcp_0.1.2_1789945612390_0.5441122404172698"}}},"time":{"created":"2026-09-09T04:31:03.670Z","modified":"2026-09-20T23:06:52.670Z","0.1.0":"2026-09-09T04:31:03.988Z","0.1.1":"2026-09-19T22:35:51.115Z","0.1.2":"2026-09-20T23:06:52.466Z"},"author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","homepage":"https://alfe.ai","description":"ConnectWise Automate inventory and monitoring MCP server with Alfe connections","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"readme":"# ConnectWise Automate MCP\n\nRuntime-agnostic stdio MCP server for Automate client, location and endpoint\ninventory, available scripts, computer monitors, and script/monitor history.\nEvery provider operation requires an explicit Alfe `connectionId`.\n\nCreate a **ConnectWise Automate** connection in Alfe using the public HTTPS\nserver origin and an integrator username/password. Alfe supplies the vendor\nClientID. This server reads Alfe configuration through `@alfe.ai/config` and\nresolves fresh connection credentials through `AgentApiClient` on every call.\nIt requires no ConnectWise environment variables or copied secrets.\n\nThe integration manifest starts the first release with:\n\n```yaml\nmcp_servers:\n  - id: connectwise-automate\n    command: npx\n    args: [\"-y\", \"@alfe.ai/connectwise-automate-mcp@0.1.0\"]\n    env: {}\n```\n\nCall `automate_list_connections`, then pass the chosen `connectionId` to:\n\n- `automate_check_connection`\n- `automate_list_clients`\n- `automate_list_locations`\n- `automate_list_computers`\n- `automate_list_scripts`\n- `automate_list_monitor_history`\n- `automate_list_internal_monitor_results`\n- `automate_list_computer_monitors` (also requires `computerId`)\n- `automate_list_computer_script_history` (also requires `computerId`)\n\nList tools accept a 1-based `page`, `pageSize` (1–200, default 50), and an\nAutomate `condition` expression. They return `{ items, page, pageSize }` for\none page. Scripts are discovered and their execution history can be inspected;\nthese tools do not execute scripts, reboot computers, or change monitors.\n\nThe server calls `/cwa/api/v1/` on the selected origin. It caches bearer tokens\nper connection, refreshes while they are still valid, and reauthenticates after\nexpiration or one failed GET. Credential rotation and revoked Alfe scope take\neffect on the next tool call. Interactive/2FA login challenges return an\nactionable connection error.\n\nPrivate-network and loopback servers are unsupported. Each request resolves\nthe hostname afresh, rejects any non-public DNS answer, and pins the HTTPS\nsocket to a checked IP while retaining TLS hostname validation. Redirects are\nnever followed. Requests, DNS, responses and tool results have explicit bounds;\nraw provider errors and credential-bearing fields are never forwarded.\n\n## API contract and verification\n\nThe primary API reference is the [ConnectWise Automate developer\nportal](https://developer.connectwise.com/Products/Automate/Integrating_with_Automate/API),\nwhich requires a ConnectWise developer login. The implementation was checked\nagainst its exported **Automate API v1** OpenAPI contracts, preserved in the\n[System](https://github.com/covenanttechnologysolutions/connectwise-rest/blob/d04740719c5a62008af4dc31287a621b2f07f860/generator/automate-json/System.json),\n[Company](https://github.com/covenanttechnologysolutions/connectwise-rest/blob/d04740719c5a62008af4dc31287a621b2f07f860/generator/automate-json/Company.json),\n[Computers](https://github.com/covenanttechnologysolutions/connectwise-rest/blob/d04740719c5a62008af4dc31287a621b2f07f860/generator/automate-json/Computers.json),\n[Scripts](https://github.com/covenanttechnologysolutions/connectwise-rest/blob/d04740719c5a62008af4dc31287a621b2f07f860/generator/automate-json/Scripts.json)\nand [Monitors](https://github.com/covenanttechnologysolutions/connectwise-rest/blob/d04740719c5a62008af4dc31287a621b2f07f860/generator/automate-json/Monitors.json)\nfiles at that immutable mirror revision. The mirror is independently\nmaintained; it is not a live contract obtained from the customer's server.\n\nTests exercise the token wire format/lifecycle, endpoint and pagination\ncontracts, connection selection/rotation/revocation, DNS and response bounds,\nerror redaction, and real in-memory MCP protocol requests. No live customer\nAutomate server was available during implementation. Before declaring a\ndeployment operational, configure a real vendor ClientID and integrator\nconnection, run `automate_check_connection`, page each relevant inventory tool,\nand verify refresh against the installed Automate version. An account must\nhave the corresponding Automate read permissions; permission failures are\nreported without widening access.\n","readmeFilename":"README.md"}