Skip to main content
The MSPortal MCP server exposes 161 tools across 28 modules. An AI assistant only ever sees the tools that your granted scopes and MSPortal permissions allow, so the working set is a subset of the list below.
Access column: Read tools never change data. Write (confirm) tools return a confirmation step before anything is committed, so the assistant tells you what it is about to do first. Write tools apply immediately and are limited to low-risk, self-scoped actions (for example marking your own notifications as read).

Core

Scopes: companies.read, goals.read, planner.read, reports.read, tickets.read
ToolAccessDescription
get_companyReadGet one company by ID.
get_current_userReadReturn the connected MSPortal user, tenant, user type, company, and OAuth grant summary.
list_companiesReadList companies visible to the connected user.
search_portalReadSearch across visible companies, tickets, goals, planner items, and reports with small capped result sets.
submit_feedbackReadSend product feedback to the MSPortal team. Use this whenever the user asks for something the MCP server cannot do (a missing tool, capability, or data set), or wants to report a bug or suggestion. Summarize what the user was trying to accomplish in the message.

Tickets

Scopes: tickets.read, tickets.write
ToolAccessDescription
get_ticketReadGet a ticket with public notes.
list_ticket_notesReadList the notes/updates on a ticket. Internal notes are only returned for tenant users that request them.
list_ticket_status_optionsReadList the valid PSA statuses for a ticket’s integration. Use the returned externalId with update_ticket_status. ConnectWise statuses are board-scoped: prefer options whose boardExternalId matches the ticket’s board.
list_ticketsReadList visible PSA tickets.
add_ticket_noteWrite (confirm)Stage or post a note to a ticket. The note is written to the client’s PSA (Halo, ConnectWise, Autotask, Syncro) via its API, not just locally.
create_ticketWrite (confirm)Stage or create a PSA ticket through the tenant’s active PSA integration.
update_ticket_statusWrite (confirm)Stage or update a ticket’s status in the client’s PSA via its API. statusExternalId must come from list_ticket_status_options.

Devices

Scopes: devices.read
ToolAccessDescription
get_deviceReadGet one device.
list_device_alertsReadList active device alerts: offline servers (status offline or not seen in 7 days; workstations are excluded as expected noise) and devices with warranties expiring within the next 30 days. The limit applies per alert category.
list_device_typesReadList device types.
list_devicesReadList devices with filters, including fleet/lifecycle queries: os contains-match (e.g. “server”, “windows 10”), warranty expiry windows (warrantyExpiresBefore/After), stale devices (lastSeenBefore), and hardware age (firstSeenBefore).
list_locationsReadList locations.

Reporting

Scopes: reports.read, reports.write
ToolAccessDescription
get_reportReadGet one report. Report structures are only returned when explicitly requested.
get_report_scheduleReadGet one report schedule.
list_report_schedulesReadList report schedules.
list_report_templatesReadList report templates.
list_report_typesReadList report types.
list_reportsReadList report summaries with pagination and optional filters.
create_reportWrite (confirm)Stage or create a report configuration.
delete_reportWrite (confirm)Stage or delete a report.
edit_reportWrite (confirm)Stage or edit a report configuration.
publish_reportWrite (confirm)Stage or publish a report by setting status to published.
run_report_scheduleWrite (confirm)Stage or trigger a report schedule run immediately.

Analytics

Scopes: analytics.read, training.read
ToolAccessDescription
get_portfolio_summaryReadGet portfolio analytics summary.
get_ticket_trendsReadGet pre-computed weekly ticket trend analytics: created/closed/backlog per week, per-company totals (top 50 by volume), per-category totals (top 50), and a deterministic forecast with volume direction, backlog outlook, resolution trend, and company/category watchlists. Data is aggregated weekly — use list_tickets for individual tickets.
get_training_analyticsReadGet training analytics.
get_user_activityReadGet user activity analytics.
list_company_auditReadList company audit metrics.

Planner

Scopes: planner.read, planner.write
ToolAccessDescription
get_planner_itemReadGet one planner item.
list_planner_item_linksReadList the goals, assigned compliance checks, secure score controls, and devices linked to a planner item.
list_planner_itemsReadList planner items with filters.
list_planner_typesReadList planner item types.
archive_planner_itemWrite (confirm)Stage or archive a planner item.
create_planner_itemWrite (confirm)Stage or create a planner item.
edit_planner_itemWrite (confirm)Stage or edit a planner item.
link_planner_item_entitiesWrite (confirm)Stage or attach existing goals, assigned compliance checks, secure score controls, or devices to a planner item. Idempotent: re-linking the same entity is a no-op.
unlink_planner_item_entityWrite (confirm)Stage or remove one linked goal, assigned compliance check, secure score control, or device from a planner item.

Goals

Scopes: goals.read, goals.write
ToolAccessDescription
get_goalReadGet a goal with tasks and updates.
list_goal_optionsReadList goal status, priority, and category options.
list_goalsReadList goals with filters.
create_goalWrite (confirm)Stage or create a goal.
delete_goalWrite (confirm)Stage or delete a goal.
edit_goalWrite (confirm)Stage or edit a goal.

Compliance

Scopes: compliance.read, compliance.write
ToolAccessDescription
get_compliance_checkReadGet one assigned compliance check.
get_compliance_runReadGet a compliance run with assigned checks.
list_compliance_checksReadList assigned compliance checks.
list_compliance_runsReadList compliance runs.
list_compliance_status_optionsReadList the valid status options for an assigned compliance check. Use the returned id as statusItemId with update_compliance_status.
list_compliance_templatesReadList compliance check templates.
create_compliance_runWrite (confirm)Stage or commit creating compliance runs (one per company) and enqueue assignment of checks from templates, groups, and/or individual checks. At least one of templateIds, groupIds, or checkIds is required.
update_compliance_statusWrite (confirm)Stage or update an assigned compliance check status/notes/priority.

Meetings & Calendar

Scopes: calendar.read, calendar.write
ToolAccessDescription
get_meetingReadGet a meeting with participants.
list_meeting_action_itemsReadList a meeting’s action items, including assignee, status, priority, and due date.
list_meeting_agendaReadList a meeting’s agenda items in order, including linked planner items, assigned compliance checks, goals, budgets, reports, training courses, and devices.
list_meeting_participantsReadList the attendees on a meeting.
list_meeting_typesReadList meeting types.
list_meetingsReadList calendar meetings.
add_meeting_action_itemWrite (confirm)Stage or add an action item to a meeting, optionally assigned to a portal user with a due date and priority.
add_meeting_agenda_itemsWrite (confirm)Stage or append agenda items to a meeting. Link existing planner items, assigned compliance checks (e.g. failed checks from list_compliance_checks), goals, budgets, reports, training courses, or devices, or insert text blocks and dividers.
add_meeting_participantsWrite (confirm)Stage or add attendees to an existing meeting. Provide a userId (tenant user, from list_users) or an external email per attendee. Idempotent: already-attached attendees are skipped.
create_meetingWrite (confirm)Stage or create a calendar meeting.
remove_meeting_agenda_itemWrite (confirm)Stage or remove one agenda item from a meeting (remaining items shift up).
remove_meeting_participantWrite (confirm)Stage or remove one attendee from a meeting, identified by userId or email.
reorder_meeting_agenda_itemWrite (confirm)Stage or move one agenda item to a new zero-based position within its meeting (other items shift).
update_meetingWrite (confirm)Stage or update a meeting’s title, times, status, location, or notes. To cancel a meeting, set status to “Canceled”.
update_meeting_action_itemWrite (confirm)Stage or update a meeting action item’s description, assignee, due date, status, priority, or notes.

Training

Scopes: training.read, training.write
ToolAccessDescription
get_training_courseReadGet one training course.
list_training_categoriesReadList training categories.
list_training_coursesReadList training courses.
list_training_enrollmentsReadList training enrollments.
assign_trainingWrite (confirm)Stage or assign a training course to users.
edit_training_enrollmentWrite (confirm)Stage or edit a training enrollment.

Budgets

Scopes: budgets.read, budgets.write
ToolAccessDescription
get_budgetReadGet one budget with line items.
list_budget_categoriesReadList budget categories.
list_budget_productsReadList budget products.
list_budgetsReadList budgets.
add_budget_itemWrite (confirm)Stage or add a budget line item.
create_budgetWrite (confirm)Stage or create a budget.
delete_budgetWrite (confirm)Stage or delete a budget.
edit_budgetWrite (confirm)Stage or edit a budget.

Surveys

Scopes: surveys.read, surveys.write
ToolAccessDescription
get_nps_summaryReadPre-computed NPS analytics rows (promoters/passives/detractors, NPS score, response rate) bucketed by period (daily/weekly/monthly/quarterly/yearly/all_time), tenant-wide and per company. Filter by companyId for ‘NPS by client’, by periodType for trend questions, or by surveyId for one NPS campaign. Newest periods first.
get_surveyReadGet a general survey with questions.
get_survey_statsReadAggregated stats for one general survey: invites sent, completed responses, response rate, and per-question rollups (average value for numeric/likert/NPS/rating questions, option counts for select questions). Use instead of re-aggregating list_survey_responses.
list_survey_responsesReadList responses for a general survey.
list_surveysReadList general surveys.
create_surveyWrite (confirm)Stage or create a complete general survey: title, description, and questions with answer types and options. Created inactive by default — chain with set_survey_status to activate, send_survey_invites to dispatch, and list_survey_responses to read results.
send_survey_invitesWrite (confirm)Stage or send email invitations for an active general survey to a list of recipients. Sends real emails on commit.
set_survey_statusWrite (confirm)Stage or set the active status of a general survey (activate or deactivate).

Automation

Scopes: automation.read, automation.write
ToolAccessDescription
get_automation_ruleReadGet one automation rule.
list_automation_executionsReadList automation execution history.
list_automation_rulesReadList automation rules.
create_automation_ruleWrite (confirm)Stage or create an automation rule (trigger + conditions + actions). Actions can open tickets, send email, send surveys, update fields, and more.
delete_automation_ruleWrite (confirm)Stage or permanently delete an automation rule.
edit_automation_ruleWrite (confirm)Stage or apply a partial update to an existing automation rule.
toggle_automation_ruleWrite (confirm)Stage or toggle an automation rule.

Users & Contacts

Scopes: users.read, users.write
ToolAccessDescription
list_company_contactsReadList company users (client portal contacts) with optional search, status, and company filters.
invite_userWrite (confirm)Stage or commit inviting a user to the tenant by email. Sends an invitation email (or links an existing account). Provide companyId to invite a company (client portal) user.
set_user_statusWrite (confirm)Stage or commit changing a user’s status (active, disabled, pending, imported). Disabling a user blocks their portal access.

Microsoft 365 & Secure Score

Scopes: m365.read
ToolAccessDescription
get_m365_license_summaryReadGet aggregated Microsoft 365 license totals: SKU count, purchased vs consumed vs available units, utilization percent, and company count.
get_secure_score_summaryReadGet the Microsoft Secure Score posture summary: current vs max score, percentage, trend over the recorded history, per-category breakdown, and industry comparison when available. Returns null data when no secure score snapshot exists for the scope.
get_secure_score_trendReadGet daily Microsoft Secure Score data points (current score, max score, percentage) over a configurable lookback window (default 90 days), for charting or trend analysis.
list_m365_domainsReadList Microsoft 365 domains with verification, default/initial flags, authentication type, and supported services.
list_m365_licensesReadList Microsoft 365 license SKUs with consumed/enabled units, assigned user counts, renewal dates, and subscription status. One row per company + SKU; optionally filtered to a single company.
list_m365_usersReadList Microsoft 365 users with pagination, free-text search, and filters for department, office, user type, account state, and license SKU.
list_secure_score_recommendationsReadList Microsoft Secure Score improvement actions sorted by points remaining (highest impact first), with category, tier, implementation cost, user impact, remediation guidance, and current state. By default only actions that still have points to gain are returned. Pair with create_planner_item to build a remediation plan.

Backup

Scopes: backup.read
ToolAccessDescription
get_backup_summaryReadGet a unified backup protection summary aggregated across all active backup providers (Cove, Acronis, NinjaOne): protected/warning/failed/unprotected device counts, total storage, active alert count, and the providers included.
list_backup_alertsReadList backup alerts (Acronis) with pagination and severity/status/search filters. Returns an empty list when no Acronis integration is active.
list_backup_devicesReadList backed-up devices/resources across all active backup providers (Cove, Acronis, NinjaOne), excluding M365 mailbox/site backups. Cross-provider pagination is approximate: page applies per provider, so one page may return up to (active providers x limit) rows and totalCount is summed across providers.

Projects

Scopes: projects.read
ToolAccessDescription
get_projectReadGet one project with its client-visibility overlay. Heavy overlay detail (deliverables, milestones, client actions, weekly updates) is only returned when explicitly requested.
list_projectsReadList PSA projects with health overlay data, pagination, and optional filters. Returns lean summaries — use get_project for deliverables, milestones, client actions, and weekly updates.

Client Health

Scopes: customer_success.read
ToolAccessDescription
get_client_health_historyReadGet daily health score snapshots for one company, including per-dimension scores, over a configurable lookback window (default 180 days).
get_client_health_summaryReadGet portfolio-wide client health summary stats: average health score, counts by risk level, average NPS, tool stack adoption, and overdue invoices.
get_csat_summaryReadCSAT (customer satisfaction) rollup from ticket-close survey responses: overall stats (total responses, average score, CSAT %, satisfied/neutral/dissatisfied counts, low-score count) plus a per-company breakdown. Filter by date window (periodStart/periodEnd) for ‘CSAT this quarter’ questions, or by a single CSAT survey campaign.
list_client_healthReadList client health scores across companies with risk level, trend, dimension scores, and key engagement/financial signals. Supports pagination, risk filtering, and search.

Financials

Scopes: financial.read
ToolAccessDescription
get_invoiceReadGet one synced invoice by ID with full amounts, payments, and billing detail.
get_invoice_summaryReadGet aggregate invoice totals: invoice count, total billed, outstanding balance, open count, and overdue count/amount. Optionally scoped to specific companies.
get_quoteReadGet one Quoter quote by ID with full pricing totals and lifecycle dates.
get_revenue_summaryReadGet monthly revenue over a lookback window (default 12 months), grouped by classification (managed / other recurring / non-recurring), PSA provider, or line type. One row per month + group. Useful for QBR prep, revenue trend analysis, and profitability conversations.
list_invoicesReadList PSA-synced invoices with status, type, dates, totals, payments, and balances. Supports pagination, company filtering, status/type/date filters, and search. Invoices are owned by the PSA — this is a read-only view.
list_quotesReadList Quoter quotes with stage, owner, company, and monthly/annual/one-time totals. Supports pagination, company filtering, stage filtering, and search. Quotes are created and managed in Quoter — this is a read-only view.

Integrations

Scopes: integrations.read, integrations.write
ToolAccessDescription
get_integrationReadGet one integration’s sync health, including a lastRuns map of per-entity last-sync timestamps. Never returns credentials or configuration.
list_integrationsReadList tenant integrations with sync health (status, derived health, failure counters, last error, per-entity last-sync timestamps). Never returns credentials or configuration. Returns a detail object { integrations, companyIntegrations }; companyIntegrations is null unless includeCompanyIntegrations is true.
pause_integrationWrite (confirm)Stage or pause an integration. Pausing stops all background syncs for the provider until it is resumed (status becomes ‘paused’ with reason ‘manual_pause’).
resume_integrationWrite (confirm)Stage or resume a paused integration. Sets status to ‘active’ and clears the pause and failure state (paused_at, paused_reason, last error fields, consecutive failures).

Documentation

Scopes: documentation.read, documentation.write
ToolAccessDescription
get_documentation_documentReadGet one documentation document with its full HTML content: a built-in custom page, a Hudu article (with attachment metadata and public share links where sharing is enabled), or an IT Glue document. Per-item visibility rules are enforced.
list_documentation_documentsReadList documentation from the merged library: built-in custom pages plus articles synced from Hudu and IT Glue. Returns a short plain-text excerpt per document; use get_documentation_document for full content. Supports search, company, folder, and source filters.
list_documentation_foldersReadList documentation folders across all sources (custom, Hudu, IT Glue) with per-folder document counts. Use the returned folderKey to filter list_documentation_documents, and the UUID of custom:<uuid> keys as folderId when creating pages.
list_documentation_visibility_rolesReadList the company permission-group roles (client portal roles) that can be used as visibility targets when creating documentation pages. Pass the returned role ids as roleIds to create_documentation_page to restrict a page to company users in those roles.
create_documentation_pageWrite (confirm)Create a built-in documentation page (inline HTML custom document) in the tenant’s documentation library. Optionally scoped to a company and placed in a custom folder. The page gets a first revision and a visibility rule, like pages created from Settings: shared with all company users by default, or restricted to specific permission-group roles via roleIds (see list_documentation_visibility_roles).
set_documentation_page_visibilityWrite (confirm)Replace the visibility rules of an existing built-in documentation page: restrict it to specific company permission-group roles (see list_documentation_visibility_roles) or share it with all company users in scope. Use this to share a page that was created from the onboarding page library into the documentation hub for a specific role, or to change who can see a page after creation. Existing rules are replaced, not merged. Only custom pages support this; Hudu and IT Glue articles are managed from Settings.
update_documentation_pageWrite (confirm)Update the title, HTML body, and/or summary of a built-in documentation page. Creates a new revision (the previous content stays in revision history). Only custom inline pages can be edited — Hudu and IT Glue articles are managed in their source system. contentHtml replaces the entire body, so fetch the current content with get_documentation_document and apply your edit to it.

Onboarding

Scopes: onboarding.read, onboarding.write
ToolAccessDescription
get_onboarding_portalReadGet the full detail of one onboarding portal: phases with tasks, documents, surveys, approvals, contacts, key dates, dependencies, and PSA project links.
list_onboarding_portalsReadList client onboarding portals with status, progress counts (phases, tasks, documents), and contact counts. Filter by company or status (draft, active, completed, converted, archived).
list_onboarding_templatesReadList client onboarding templates with phase/task counts and estimated duration. Use a template ID with create_onboarding_portal to spin up a portal for a new client.
create_onboarding_portalWrite (confirm)Stage or create a client onboarding portal from a template, with optional client contacts. The portal is created in draft status and no client emails are sent — use start_onboarding_portal to activate it and send invites.
start_onboarding_portalWrite (confirm)Stage or activate a draft onboarding portal (draft → active). Sends real invite emails to all portal contacts on commit.

Technology Standards

Scopes: standards.read
ToolAccessDescription
get_company_standardsReadGet one company’s standards deployment: every catalog item with the company’s status (not_started, in_progress, deployed, not_applicable, declined), vCIO notes, and the linked planner item when remediation is tracked. Items with no recorded status are not_started.
get_standard_adoptionReadAdoption of standards across all companies, item by item. Without itemId: status counts for every standard (how many companies have each tool deployed / in progress / not started / N/A / declined). With itemId (from list_standards): also lists the company names in each status bucket (capped at 100 per bucket) — answers ‘which clients are not on our standard EDR’. Companies excluded from standards tracking are not counted.
get_standards_complianceReadPer-company standards compliance rollup, scored like the /standards page: each required item that isn’t N/A or declined counts as one check; requireOneOf categories count as one check satisfied by any deployed item. Returns per-company score, status counts, missingRequiredCount, and tenant-wide totals. The missingRequired name list (capped at 25) is only populated when companyId is provided — call again with one companyId to see WHICH checks a company is missing. Companies excluded from standards tracking are flagged and unscored (an excluded companyId returns one flagged record with null score). Ideal for QBR prep and ‘which clients are below our standards’ questions.
list_standardsReadList the tenant’s technology standards catalog (also called the tool stack): categories with their standard items (name, vendor, required vs optional, default price). Categories marked requireOneOf are satisfied when any one item in them is deployed. Use the item ids with get_standard_adoption and the statuses from get_company_standards.

Security

Scopes: security.read
ToolAccessDescription
get_security_summaryReadCross-provider security posture summary: Cork (compliance findings, vulnerabilities incl. critical/known-exploited, endpoints), Acronis EDR (incident counts by state/severity/mitigation, endpoint protection), and Huntress (agents, escalations, incident reports, remediations). A provider section is null when its data is unavailable; zero counts mean no data synced. Pair with get_secure_score_summary (M365) for the full QBR risk story.
list_edr_incidentsReadList Acronis EDR incidents (newest first) with severity (HIGH/MEDIUM/LOW), state (NOT_STARTED/INVESTIGATING/CLOSED), mitigation state, verdict, and affected host. Search matches host name/domain.
list_huntress_itemsReadList Huntress security items — escalations, incident reports, and remediations — with status, severity, category, the affected company/organization, and a link to the Huntress portal. Filter by itemType to focus on one kind.
list_vulnerabilitiesReadList Cork vulnerabilities sorted by CVSS score (highest first): CVE id/description, affected software, CVSS/EPSS scores, priority (critical/accelerated/routine), and known-exploited flag. Search matches CVE id and software fields.

Broadcasts

Scopes: broadcasts.read, broadcasts.write
ToolAccessDescription
get_broadcastReadGet one broadcast including its HTML body and dark-wrapper setting.
list_broadcast_groupsReadList broadcast groups with member counts. Use these group IDs when sending a broadcast. Optionally scoped to one company.
list_broadcast_recipientsReadList the recipients of one broadcast with per-recipient delivery status (paginated).
list_broadcastsReadList emergency broadcast history with delivery counts and status (paginated). Excludes the HTML body; use get_broadcast for full content.
send_broadcastWrite (confirm)Stage or send an emergency broadcast email to every member of the selected broadcast groups. The proposal preview shows the resolved recipient count and group names before anything is sent.

Notifications

Scopes: notifications.read, notifications.write
ToolAccessDescription
list_notificationsReadList in-app notifications for the calling user (paginated). Defaults to unread only; set includeRead to true for full history.
mark_notification_readWriteMark one of the calling user’s notifications as read (notificationId), or all of their unread notifications (all: true). Only touches notifications addressed to the caller — tenant-wide notifications (shared by all users) are never modified; already-read notifications are skipped.

Dashboards

Scopes: dashboards.read
ToolAccessDescription
get_external_dashboardReadGet one external dashboard.
list_external_dashboardsReadList external dashboards.
list_internal_dashboardsReadList internal dashboards.

User Directory

Scopes: users.read
ToolAccessDescription
get_userReadGet one tenant user.
list_usersReadList tenant users.

Notes

  • Scopes vs permissions. A scope is what the AI client asks for at connect time; a permission is what your MSPortal role grants. A tool runs only when both allow it. Company (client-portal) users are additionally restricted to their own company’s data and have sensitive fields redacted.
  • Confirmation flow. Tools marked Write (confirm) return a proposal first. Your client surfaces what will change, and the write commits only after you approve.
  • This list reflects the current release and grows over time. The live set your assistant can use is always discoverable from the client itself (for example /mcp in Claude Code).
  • MCP Server — connect a client and manage access.