account-hygiene
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
HubSpot deal records and sales pipelines: deal fields, default and custom pipeline stages, deal amount conventions (MRR vs. TCV), forecast categories and weighted forecasting, and associating deals with contacts and companies.
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill deals --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill deals -a windsurf -y
name: "HubSpot Deals" description: > HubSpot deal records and sales pipelines: deal fields, default and custom pipeline stages, deal amount conventions (MRR vs. TCV), forecast categories and weighted forecasting, and associating deals with contacts and companies. when_to_use: >- When searching, creating, updating, or reporting on deal records and pipelines in HubSpot CRM. Use when: hubspot deal, hubspot pipeline, hubspot opportunity, hubspot sale, hubspot revenue, deal search hubspot, deal management hubspot, hubspot forecast, hubspot deal stage, sales pipeline hubspot, or hubspot close date.
Deals in HubSpot represent sales opportunities -- potential or active revenue from clients. For MSPs, deals track managed services agreements, project engagements, hardware sales, or any revenue opportunity moving through the sales process. Each deal belongs to a pipeline (e.g., "Sales Pipeline" or "Renewals") and progresses through stages (e.g., "Discovery", "Proposal", "Closed Won"). Deals are associated with contacts and companies to provide full context on who is involved and which client the revenue belongs to.
Conduit's `hubspot` connector is HubSpot's own hosted MCP server (`https://mcp.hubspot.com/anthropic/v1/mcp`, OAuth). Its CRM tools are generic over object type, so every call names the `objectType`:
| Tool | Call shape | |------|-----------| | `search_crm_objects` | `objectType`, optional `query` (free text), `filterGroups` (property `filters` and `associatedWith` association filters), `properties`, `sorts`, `limit` (max 200), `offset` | | `get_crm_objects` | `objectType`, `objectIds` (1-100), `properties` | | `manage_crm_objects` | `createRequest.objects[]` or `updateRequest.objects[]` (each with `objectType`, `properties`, optional `associations`, and `objectId` for updates), plus `confirmationStatus` (`CONFIRMED` only after the user approved the exact change) | | `search_properties` / `get_properties` | Discover property names and enumeration values for an `objectType` | | `search_owners` | Resolve `hubspot_owner_id` values to people |
Parameter names in the tables below (such as `contactId`) describe the HubSpot fields involved; send them in the call shapes above. See `hubspot-api-patterns` for the full tool list.
opportunity exists and what it is worth; the line items, catalog, and margin live in `salesbuildr-quotes` or `connectwise-cpq-quotes`.
`xero-invoices` or `qbo-invoices`.
identical vocabulary; use `salesbuildr-opportunities`.
| Tool | Description | Key Parameters | |------|-------------|----------------| | `get_crm_objects` (`objectType: "deals"`) | Get deals by ID | `objectIds` (required, 1-100) | | `manage_crm_objects` (`createRequest`, `objectType: "deals"`) | Create a new deal | `dealname` (required), `amount`, `dealstage`, `pipeline` | | `manage_crm_objects` (`updateRequest`, `objectType: "deals"`) | Update an existing deal | `objectId` (required), property fields to update | | `search_properties` (`objectType: "deals"`) | List all available deal properties | None | | `search_crm_objects` (`objectType: "deals"`) | Search deals by criteria | `filterGroups`, `sorts`, `limit`, `offset` |
Call `search_crm_objects` (`objectType: "deals"`) with filter groups to find deals:
**Search by deal name:**
{
"filterGroups": [
{
"filters": [
{
"propertyName": "dealname",
"operator": "CONTAINS_TOKEN",
"value": "Managed Services"
}
]
}
],
"limit": 100
}**Search by deal stage:**
{
"filterGroups": [
{
"filters": [
{
"propertyName": "dealstage",
"operator": "EQ",
"value": "proposalpendinng"
}
]
}
],
"sorts": [
{
"propertyName": "amount",
"direction": "DESCENDING"
}
],
"limit": 100
}**Search by close date range (upcoming closings):**
{
"filterGroups": [
{
"filters": [
{
"propertyName": "closedate",
"operator": "GTE",
"value": "2026-02-01"
},
{
"propertyName": "closedate",
"operator": "LTE",
"value": "2026-03-31"
}
]
}
],
"limit": 100
}**Search for high-value open deals:**
{
"filterGroups": [
{
"filters": [
{
"propertyName": "amount",
"operator": "GT",
"value": "10000"
},
{
"propertyName": "dealstage",
"operator": "NOT_IN",
"values": ["closedwon", "closedlost"]
}
]
}
],
"sorts": [
{
"propertyName": "amount",
"direction": "DESCENDING"
}
],
"limit": 100
}Call `manage_crm_objects` (`createRequest`, `objectType: "deals"`) with the deal's properties:
**Example: Create a managed services deal:**
Call `manage_crm_objects` (`updateRequest`, `objectType: "deals"`) with the deal's `objectId` and the properties to change:
**Example: Move deal to next stage:**
Call `get_crm_objects` (`objectType: "deals"`) with the deal ID in `objectIds`:
**Example:**
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: wyre-ai.github.io/msp-claude-plugins
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
1Password MCP fundamentals through Conduit: the region plus two independent credential halves (Events Reporting token, Users API…
How to review a departing or departed user's 1Password footprint with the read-only tools: confirm the seat is suspended, find…
Triage of 1Password sign-in attempts for one client account: pulling the sign-in feed over a window, grouping failures by user,…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership,…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.