connectwise-manage-mcp-1 (sberlo9/connectwise-manage-mcp-1) is an MCP server listed on the M8ven Trust Index. It scores 74 out of 100, grade C. It declares 50 tools. No publisher has claimed this listing.

Warning. Serious findings were identified. Review the full report before connecting. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

sberlo9

Source: github_code

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Code appears obfuscated
1 file are unreadable to a human reviewer. Cannot audit what they do.
🔐
You'll be asked for 4 credentials: CONDUIT_S2S_SECRET, CW_MANAGE_PRIVATE_KEY, CW_MANAGE_PUBLIC_KEY, MCP_BEARER_TOKEN
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes51 tools · 1 behind config

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

cw_search_activities

Search schedule activities in ConnectWise Manage.

cw_get_activity

Get a specific activity by ID.

cw_create_activity

Create a new activity.

cw_search_agreements

Search finance agreements (recurring revenue contracts) in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "cancelledFlag = false", "company/name = 'Acme'").

cw_get_agreement

Get a specific finance agreement by ID.

cw_get_agreement_additions

Get additions (line items) for a specific agreement.

cw_search_invoices

Search invoices in ConnectWise Manage.

cw_get_invoice

Get a specific invoice by ID.

cw_search_catalog_items

Search the ConnectWise product catalog. Use 'conditions' for CW query syntax (e.g. "identifier like '%SKU-%'" or "manufacturer/id=5").

cw_get_catalog_item

Get a specific catalog item by ID.

cw_create_catalog_item

Create a new catalog item (product SKU) in ConnectWise. Surfaces the common MSP fields directly; use 'extraFields' for anything else supported by POST /procurement/catalog (e.g. manufacturerPartNumber, unitOfMeasure, ianCode, upc, minStockLevel).

cw_update_catalog_item

Update an existing catalog item using JSON Patch operations.

cw_list_catalog_categories

List product categories from the ConnectWise catalog.

cw_list_catalog_subcategories

List product subcategories from the ConnectWise catalog.

cw_list_manufacturers

List manufacturers referenced by catalog items.

cw_search_companies

Search companies in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "name like '%Acme%'").

cw_get_company

Get a specific company by ID.

cw_create_company

Create a new company.

cw_update_company

Update an existing company using JSON Patch operations.

cw_search_configurations

Search configuration items (assets/CIs) in ConnectWise Manage.

cw_get_configuration

Get a specific configuration item (asset/CI) by ID.

cw_search_contacts

Search contacts in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "firstName = 'John'").

cw_get_contact

Get a specific contact by ID.

cw_create_contact

Create a new contact.

cw_search_members

Search members (technicians/users) in ConnectWise Manage.

cw_get_member

Get a specific member by ID.

cw_search_opportunities

Search sales opportunities in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "status/name = '1. Open'", "closedFlag = false").

cw_get_opportunity

Get a specific sales opportunity by ID.

cw_search_opportunity_forecasts

Search opportunity forecasts/revenue items for a specific opportunity.

cw_search_opportunity_notes

Get notes on a specific sales opportunity.

cw_search_sales_stages

List sales pipeline stages in ConnectWise Manage.

cw_search_projects

Search projects in ConnectWise Manage.

cw_get_project

Get a specific project by ID.

cw_search_project_tickets

Search tickets under a project. Use projectId to filter by project, or conditions for CW query syntax.

cw_get_project_ticket

Get a specific project ticket by ID.

cw_get_project_ticket_notes

Get all notes on a project ticket, including notes from any child tickets.

cw_add_project_ticket_note

Add a note to a project ticket. Use internalAnalysisFlag for internal-only notes or resolutionFlag for resolution notes. Defaults to a plain discussion note.

cw_create_project

Create a new project.

cw_list_boards

List service boards in ConnectWise Manage.

cw_list_priorities

List ticket priorities in ConnectWise Manage.

cw_list_statuses

List ticket statuses for a specific service board in ConnectWise Manage.

cw_search_tickets

Search service tickets in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "status/name != 'Closed'" or "company/name = 'Acme'").

cw_get_ticket

Get a specific service ticket by ID.

cw_create_ticket

Create a new service ticket.

cw_update_ticket

Update an existing service ticket using JSON Patch operations.

cw_get_ticket_notes

Get all notes/discussions on a service ticket, including notes from any child tickets.

cw_add_ticket_note

Add a note to a service ticket. Use detailDescriptionFlag for a description note, internalAnalysisFlag for an internal-only note, or resolutionFlag for a resolution note. Defaults to a plain discussion note visible to the customer.

cw_search_time_entries

Search time entries in ConnectWise Manage.

cw_get_time_entry

Get a specific time entry by ID.

cw_create_time_entry

Create a new time entry.

cw_test_connectionbehind config

Test the connection to ConnectWise Manage.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configAUTH_MODEenv (default) or gateway for header-based auth
configAZURE_AUDIENCE
configAZURE_CLIENT_ID
configAZURE_EXTRA_AUDIENCES
configAZURE_REQUIRED_ROLE
configAZURE_TENANT_ID
🔐 secretCONDUIT_S2S_SECRET
configCW_MANAGE_CLIENT_IDClient ID from [ConnectWise Developer Portal](https://developer.connectwise.com/)
configCW_MANAGE_COMPANY_IDYour ConnectWise company identifier
🔐 secretCW_MANAGE_PRIVATE_KEYAPI member private key
🔐 secretCW_MANAGE_PUBLIC_KEYAPI member public key
configCW_MANAGE_REJECT_UNAUTHORIZEDSet to false for self-signed certs (default: true)
configCW_MANAGE_URLAPI base URL (see below)
🔐 secretMCP_BEARER_TOKEN
configMCP_HTTP_HOST
configMCP_HTTP_PORTHTTP port (default: 8080)
configMCP_OAUTH_ENABLED
configMCP_SERVER_URL
configMCP_TRANSPORTstdio (default) or http
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

51/51 tools missing one or more hints — cw_test_connection (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); cw_search_activities (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); cw_get_activity (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +48 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool test coverage

Only 4/51 tools referenced in tests (8%)

Write tests that reference each tool by name so every tool has at least one test.

Readable source code

1 file are minified or bundled, which is usually build output rather than concealment

Ship unminified, readable source.

Secrets not logged

1 secret value sent to error

Redact or omit secret values from log output.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 5 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/sberlo9/connectwise-manage-mcp-1?variant=verified)](https://m8ven.ai/mcp/sberlo9/connectwise-manage-mcp-1)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 9821e933b194757ce1776408e74341db25aedcf3
code hash: 06381a1665d612193d1aa12a556dc1f42f7cce716ea3c7cda29a5450aa73726f
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client