ScalePad MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ScalePad MCP Serverlist my Core clients and their Backup Radar backup health"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ScalePad MCP Server
An MCP server for the ScalePad APIs. One ScalePad API key gives an AI agent access to five products:
Core (read-only): the unified view of an MSP's clients, contacts, members, sites, opportunities, hardware and SaaS assets, service contracts, tickets and integrations.
Lifecycle Manager: client engagement and roadmaps - initiatives, goals, meetings, action items, assessments, deliverables, budgets, contracts, hardware lifecycle and warranties.
ControlMap: compliance per client - risks, controls, evidence and evidence requests, governance, policies, procedures, frameworks, assessments and action items.
Backup Radar (read-only): backup health and backup devices per client.
Quoter: quotes and quote templates, line items, catalog items, categories, contacts and suppliers.
On explicit request the agent can also create, update, attach, publish and delete records.
Transport: MCP Streamable HTTP at
POST /mcp, health probe atGET /healthStateless and multi-tenant: the API key arrives on every request as an HTTP header and is never stored; all 381 tools are listed from the first
tools/listPython 3.12, uv, FastMCP, httpx
License: Apache-2.0, Copyright 2026 MSPbots.ai
Authentication headers
Header | Required | Type | Default | Allowed values | Description | Example |
| Yes | string | none | - | ScalePad API key |
|
| No | string |
|
| Region the ScalePad account is provisioned in |
|
| No | string | none | - | Accepted for compatibility and ignored (see below) | - |
| No | string | none | - | Accepted for compatibility and ignored (see below) | - |
Where to get them:
Sign in to ScalePad as an active Administrator and open your personal API keys page, choose New API key, give it a name and expiry (default 2 years) and copy the secret key. The key stops working if the user is deactivated or loses the Administrator permission.
Any paid ScalePad subscription unlocks the Core, Quoter and ControlMap APIs; Lifecycle Manager needs a higher subscription. Calls to a product without a subscription return HTTP
The region is the one the account was provisioned in. ControlMap is served in every region; Backup Radar in US and EU; Core, Lifecycle Manager and Quoter only on the US edge, so those tools always call
api.scalepad.com.Quoter is reached through the ScalePad API (
https://api.scalepad.com/quoter/...) with the same API key, so no separate Quoter OAuth client is needed; the two Quoter headers are kept only so existing connections keep working.
How the key is sent to ScalePad: every call carries x-api-key: <key> to
https://{api|eu.api|ca.api|au.api}.scalepad.com/{core|lifecycle-manager|controlmap|backup-radar|quoter}/....
Values that look like unresolved templates (${...}) are treated as missing.
A request to /mcp without the key gets HTTP 401; an unknown region gets HTTP 400.
Related MCP server: SyncroMSP MCP Server
Tools
All tools return a JSON string. Most ids are strings (some ControlMap ids are integers).
List tools are cursor-paginated: page_size (1-200) and the next_cursor from the previous
response as cursor; filter takes {field: value} pairs that are sent as
filter[field]=value, and the accepted fields are listed in each tool's parameter description.
Exports that return files (PDF, XLSX) come back as {content_type, size_bytes, base64} for
small files and as metadata only for larger ones.
scalepad_navigate(domain) lists one product's tools with their purpose, and scalepad_status
checks which products the key can reach. The table lists every tool; read tools change
nothing, write tools change live records, destructive tools delete and cannot be
undone.
Tool | Kind | Purpose | Required |
| read | List one product's tools | domain |
| read | Check which products the key can reach | - |
Core (24 tools)
Tool | Kind | Purpose | Required |
| read | Get a detailed list of clients | - |
| read | Get a single client, identified by its unique ID | id |
| read | Get a detailed list of contacts | - |
| read | Get a single contact, identified by its unique ID | id |
| read | Get a detailed list of members | - |
| read | Get a single member, identified by its unique ID | id |
| read | Get a detailed list of opportunities | - |
| read | Get a single opportunity, identified by its unique ID | id |
| read | Get a list of client sites materialized from PSA location data | - |
| read | Get a single client site identified by its unique ID | id |
| read | Get a detailed list of hardware assets | - |
| read | Get a single hardware asset, identified by its unique ID | id |
| read | Get a detailed list of SaaS assets | - |
| read | Get a single SaaS asset, identified by its unique ID | id |
| read | Get a detailed list of SaaS users | - |
| read | Get a single SaaS user, identified by its unique ID | id |
| read | Get product catalog records exported from PSA integrations | - |
| read | Get a single product catalog record, identified by its unique ID | id |
| read | Return the list of integration configurations associated with the MSP | - |
| read | Get a complete list of integration vendors which can be used to identify third-party services | - |
| read | Get a detailed list of contracts | - |
| read | Get a single contract, identified by its unique ID | id |
| read | Get a detailed list of tickets | - |
| read | Get a single ticket, identified by its unique ID | id |
Lifecycle Manager (193 tools)
Tool | Kind | Purpose | Required |
| read | List Lifecycle Manager contacts for accessible clients | - |
| write | Update whether a Lifecycle Manager contact is hidden | contact_id, is_hidden |
| read | Get a Lifecycle Manager contact by the contact's public ID | contact_id |
| read | Search clients by name, returning a paged list of client id | - |
| read | Find the Lifecycle Manager client groups a client belongs to | client_key |
| read | Search members | client_id |
| read | Get paginated client summary by query parameter | - |
| read | List all client groups for the authenticated partner account | - |
| read | Get the details of a single client group, including its assigned users and clients | client_group_id |
| write | Unassign clients and users from a client group | client_group_id |
| write | Assign clients and users to a client group | client_group_id |
| read | List Lifecycle Manager contacts for accessible clients | client_id |
| read | List the users that belong to the authenticated account, optionally including disabled users | - |
| read | List renewable warranty assets and their available monthly pricing options | - |
| read | Get hardware replacement budget defaults by report asset type | - |
| read | Get account- or client-scoped hardware totals, replacement due and soon counts | - |
| read | Get a hardware asset overview for a hardware asset id or unique key, including summary | hardware_key |
| read | List hardware assets with client ownership and basic device fields | - |
| read | Get a list of active hardware lifecycle records from Lifecycle Manager | - |
| read | Get the initiatives attached to a hardware asset identified by its unique key | hardware_key |
| read | List Hardware Asset Attached Agreements | hardware_key |
| read | Generate a spreadsheet for a roadmap | client_id |
| read | Generate a pdf for a roadmap | client_id |
| read | Generate a csv for a roadmap | client_id |
| write | Change the current status of an initiative to reflect its progress in the business workflow | id, status |
| write | Update the fiscal planning timeline for when resources will be allocated to this initiative | id, fiscal_quarter |
| write | Manage the ongoing financial commitments of an initiative by updating the complete set of | id, recurring_line_items |
| write | Adjust the business priority level of an initiative to reflect its strategic importance | id, priority |
| write | Revise the complete financial plan for an initiative by providing a comprehensive breakdown of | id, budget_line_items |
| write | Update the user assigned to an initiative | initiative_id, assigned_user_id |
| read | Get the current state of the PSA ticket linked to an initiative | initiative_id |
| write | Create a PSA ticket and link it to the initiative | initiative_id, field_values |
| write | Detach (unlink) the PSA ticket associated with an initiative | initiative_id |
| write | Duplicate an initiative template into a new account-scoped copy | initiative_template_id |
| read | Get a specific initiative template by its unique identifier | initiative_template_id |
| write | Update an account-scoped initiative template's name, summary, budget, recurring costs | initiative_template_id, initiative_template |
| destructive | Delete an account-scoped initiative template that is no longer needed | initiative_template_id |
| read | Get all initiative templates available to the account, grouped by platform-provided | - |
| write | Create a new account-scoped initiative template with budget, recurring costs, and action items | initiative_template |
| write | Apply an initiative template to an existing initiative, replacing its budget, recurring costs | initiative_id, initiative_template_id |
| read | List all quotes linked to a specific initiative, along with status metadata | initiative_id |
| read | Download a formatted PDF of an initiative, including its executive summary, budget | initiative_id |
| read | Get the PSA opportunity linked to an initiative | initiative_id |
| write | Create a PSA opportunity for an initiative and link it | initiative_id, field_values |
| destructive | Detach the PSA opportunity associated with an initiative | initiative_id |
| write | Attach an existing PSA opportunity to an initiative so the roadmap item is connected to revenue | initiative_id, opportunity_id |
| read | Get the meetings that are aligned with a specific initiative | initiative_id |
| write | Attach an existing meeting to an initiative to establish alignment between client discussions | initiative_id, meeting_id |
| write | Detach a meeting and an initiative, without deleting either entity | initiative_id, meeting_id |
| read | Get a list of all strategic initiatives with filtering options | - |
| read | Get all goals that are aligned with a specific initiative | initiative_id |
| write | Attach an existing goal to an initiative to establish alignment between strategic objectives | initiative_id, goal_id |
| write | Detach a goal and an initiative, without deleting either entity | initiative_id, goal_id |
| read | Access complete details of a specific initiative including its budget, recurring costs, status | id |
| write | Partially update initiative details including name, description, internal visibility | id |
| destructive | Permanently remove an initiative that is no longer relevant to business operations | id |
| read | Get a comprehensive list of all strategic initiatives with filtering options | - |
| write | Create a new strategic initiative with all necessary details to establish a program, project | client_key, name |
| write | Detach hardware assets from an initiative without deleting either entity | initiative_id, hardware_keys |
| write | Attach one or more hardware assets to an initiative by hardware identifier | initiative_id, hardware_keys |
| read | Get all action items that are aligned with a specific initiative | initiative_id |
| write | Attach an existing action item to an initiative to establish alignment between tasks | initiative_id, action_item_id |
| write | Detach an action item and an initiative, without deleting either entity | initiative_id, action_item_id |
| read | Get full details of a specific goal template | goal_template_id |
| write | Modify an existing account-owned goal template | goal_template_id, goal_template |
| destructive | Delete an account-owned goal template that is no longer needed | goal_template_id |
| read | Get all goal templates visible to the authenticated account with optional title search | - |
| write | Create a new account-owned goal template | goal_template |
| write | Change goal status to reflect its current state in the business workflow | id, status |
| write | Update goal target period to reflect its current state in the business workflow | id, target_period |
| read | Get all meetings that is aligned with this goal | goal_id |
| write | Attach an existing meeting to a goal to establish that this strategic objective will be | goal_id, meeting_id |
| write | Detach a meeting and a goal without deleting the meeting itself | goal_id, meeting_id |
| read | Get all initiatives that are aligned with this goal | goal_id |
| write | Attach an existing initiative to a goal to establish a relationship between the strategic | goal_id, initiative_id |
| write | Detach an initiative and a goal without deleting the initiative itself | goal_id, initiative_id |
| read | Get a goal record in Lifecycle Manager by the goal's id | id |
| write | Partially update goal details including title, rich-text description, status, target period | id |
| destructive | Delete a goal that is no longer relevant to business operations | id |
| write | Create a new goal from an existing goal template | goal_template_id, client_key |
| read | List all goals to help you quickly find relevant objectives with filtering options | - |
| write | Create a new goal with all necessary details to establish a measurable objective | client_key, title |
| read | Get all action items that are linked to this goal | goal_id |
| write | Attach an existing action item to a goal to track tasks that contribute toward the goal's | goal_id, action_item_id |
| write | Detach an action item from a goal without deleting either entity | goal_id, action_item_id |
| write | Update core information about a meeting | id |
| write | Update a Meeting Type's label | meeting_type_id, label |
| destructive | Delete a Meeting Type that is no longer relevant to business operations | meeting_type_id |
| read | List all Meeting Types currently available | - |
| write | Create a new Meeting Type with a label | label |
| read | Get the IDs of initiatives that have been attached to a meeting | meeting_id |
| write | Attach an existing initiative to a meeting to include it as a discussion topic on the meeting | meeting_id, initiative_id |
| write | Detach an initiative and a meeting without deleting the initiative itself | meeting_id, initiative_id |
| read | Get all goals that have been attached to a meeting | meeting_id |
| write | Attach an existing goal to a meeting to include it as a discussion topic on the meeting agenda | meeting_id, goal_id |
| write | Detach a goal and a meeting without deleting the goal itself, removing it from the meeting agenda | meeting_id, goal_id |
| read | Access complete details of a specific meeting | id |
| write | Update core information about a meeting | id |
| destructive | Remove a meeting that is no longer needed | id |
| write | Schedule a new client meeting | client_key, title |
| read | Get a comprehensive list of all client meetings with filtering options | - |
| write | Schedule a new client meeting | client_key, title |
| write | Update the completion status of a meeting | id, is_completed |
| write | Remove user attendees from the meeting | id, user_keys |
| write | Add users as meeting attendees | id, user_keys |
| write | Remove client contact attendees from the meeting | id, contact_keys |
| write | Add one or more client contacts as attendees | id, contact_keys |
| read | Get all action items created during or linked to a specific meeting | meeting_id |
| write | Attach an existing action item to a meeting to include it as a discussion topic or tracked | meeting_id, action_item_id |
| write | Detach an action item and a meeting without deleting the action item itself | meeting_id, action_item_id |
| write | Reposition an action item within the account's manual sort order | id |
| write | Pin or unpin an action item so it appears above other open action items in task lists | id, is_pinned |
| write | Mark an action item as incomplete or completed to reflect the status of an action item | id, is_completed |
| read | Get an action item by the item's id | id |
| write | Update an existing action item with all necessary details for an action | id, update_payload |
| destructive | Delete an action item that is no longer relevant to business operations | id |
| read | Get a list of action items | - |
| write | Create a new action item | client_key, description |
| read | Get comprehensive details of a specific assessment template including all categories, questions | assessment_template_id |
| write | Modify an existing assessment template including its structure, categories, questions | assessment_template_id, assessment_template |
| destructive | Archive an assessment template so it no longer appears in the active list | assessment_template_id |
| read | Get a comprehensive list of all assessment template overviews for the account | - |
| write | Create a new assessment template with custom categories, questions, and criteria | assessment_template |
| write | Update the public comment on an assessment question | assessment_id, question_id |
| write | Update the internal comment on an assessment question | assessment_id, question_id |
| write | Leave an internal comment for an existing assessment | id, internal_comment |
| write | Evaluate an assessment by selecting criteria for multiple questions | id, question_evaluations |
| read | Access complete details of a specific assessment including its evaluation | id |
| write | Update assessment details including title, evaluate user and datetime | id |
| destructive | Permanently remove an assessment that is no longer relevant to business operations | id |
| read | Get a comprehensive list of all assessments overview with filtering options | - |
| write | Create a new assessment based on a assessment template | client_key, title |
| write | Toggle an assessment's complete status | id, is_completed |
| read | Download a PDF for the specified deliverable | deliverable_id |
| read | Get a deliverable by its ID, including all sections and components | deliverable_id |
| write | Update an existing deliverable with the provided fields | deliverable_id |
| destructive | Delete a deliverable by its ID, including all associated sections and components | deliverable_id |
| write | Create a new deliverable by copying an existing template | client_id, template_id |
| read | List all deliverable available for the specified client | client_id |
| write | Create a new deliverable for the specified client | client_id, name |
| read | List all deliverable catalog components available for the specified client | client_id |
| read | List all available deliverable integrations in the catalog | - |
| read | List deliverable integrations that are integrated for a client, including their configuration | client_id |
| read | Get deliverable content and MSP branding for presentation | deliverable_id |
| write | Refresh the data of all the components under a deliverable section | deliverable_id, section_id |
| destructive | Delete a deliverable section by its ID, including all associated components | deliverable_id, section_id |
| write | Refresh the data of a deliverable section component | deliverable_id, section_id, component_id |
| destructive | Delete a deliverable section component by its ID | deliverable_id, section_id, component_id |
| read | Get a deliverable template by its ID, including all sections and components | template_id |
| write | Update an existing deliverable template with the provided fields | template_id |
| destructive | Delete a deliverable template by its ID, including all associated sections and components | template_id |
| write | Create a new deliverable template by copying an existing template | template_id |
| write | Create a new deliverable template by extracting the structure from an existing deliverable | deliverable_id |
| read | List all deliverable templates available, including both ScalePad and custom templates | - |
| write | Create a new deliverable template for the account | name |
| read | List all deliverable catalog components available for use in templates | - |
| destructive | Delete a deliverable template section by its ID, including all associated components | template_id, section_id |
| destructive | Delete a deliverable template section component by its ID | template_id, section_id, component_id |
| destructive | Revoke the general share link for the specified deliverable | deliverable_id |
| destructive | Generate a new general share link for the specified deliverable | deliverable_id |
| read | Get the general share link for a specific deliverable | deliverable_id |
| write | Create a new general share link for the specified deliverable | deliverable_id |
| read | List deliverables across the caller's account with optional client-scoped filtering, sorting | - |
| read | Get aggregate per-type totals for a client's budget forecast across the requested period window | client_id |
| read | List a client's IT Debt assets with per-period forecast amounts, sorted and paginated | client_id |
| read | List a client's initiatives with per-period forecast amounts, sorted and paginated | client_id |
| read | Generate a PDF for a client's budget forecast (overview) | client_id |
| read | Generate a detailed PDF for a client's budget forecast | client_id |
| read | Generate a CSV export for a client's budget forecast | client_id |
| read | List a client's contracts with per-period forecast amounts, sorted and paginated | client_id |
| read | Get the option lists used to construct Budget API queries for a single client | client_id |
| read | Get Contract | id |
| write | Update Contract | id, update_payload |
| destructive | Delete Contract | id |
| read | List Contracts | - |
| write | Create Contract | client_key, create_payload |
| write | Detach Contract Assets | contract_id, hardware_keys |
| write | Attach Contract Assets | contract_id, hardware_keys |
| read | User identity get (not available in the ScalePad API) | - |
| read | Get the available PSA ticket creation fields for the primary PSA, including required | - |
| read | Get PSA opportunity create fields for a client, including integration availability | - |
| read | List PSA opportunities for a client | - |
| read | Get a note's full details | id |
| write | Update title and description of a note | id |
| destructive | Delete a note | id |
| read | Get a comprehensive list of all notes with filtering options | - |
| write | Create a new note for a client | client_key, title |
| write | Mark the notes as archive or bring an archived notes back to active | id, is_archived |
| read | User ui state get (not available in the ScalePad API) | state_key |
| read | Put User UI State (not available in the ScalePad API) | state_key, payload |
| read | Return the insights applicable to the requested client | - |
| write | Create an enrollment token for a client | client_id |
| read | Return SaaS-utilization summary metrics for a client: app counts | client_id |
ControlMap (98 tools)
Tool | Kind | Purpose | Required |
| read | Return compliance health metrics for each client of an MSP | - |
| read | Return detailed compliance health metrics for a single MSP client | client_id |
| read | Get a paginated list of reports for a client, with support for filtering with PII, sorting | client_id |
| read | Return metadata for a specific report document and a secure, time-limited pre-signed URL | client_id, report_id |
| read | Get a paginated list of risks associated with a specific client | client_id |
| read | Return detailed information for a specific risk identified by its ID for the given client | client_id, risk_id |
| write | Create a new risk for the specified client with the provided details | client_id, name |
| write | Update specific fields of a risk | client_id, risk_id |
| destructive | Delete an existing risk identified by its risk ID for the specified client | client_id, risk_id |
| read | Return paginated risk summaries for all partner clients | - |
| write | Map a risk to assets, asset types, threats, vulnerabilities, vendors, objectives, controls | client_id, risk_id |
| write | Remove links between a risk and the given assets, asset types, threats, vulnerabilities | client_id, risk_id |
| read | Return detailed information for a specific risk category identified by its ID | client_id, risk_category_id |
| read | Get all departments available for risk assignment for the specified client | client_id |
| read | Get a paginated list of controls for a specific client | client_id |
| read | Return detailed information for a specific control identified by its ID for the given client | client_id, control_id |
| write | Create a control for for the specified client with the provided details | client_id, name |
| write | Update specific fields of a control | client_id, control_id |
| destructive | Delete an existing Control identified by its control ID for the specified client | client_id, control_id |
| write | Map policies, procedures, governance documents, risks, evidences, action items | client_id, control_id |
| write | Remove links between a client control and policies, procedures, governance documents, risks | client_id, control_id |
| read | Return a paginated list of control sets for the client tenant | client_id |
| read | Return a paginated list of control families for the client tenant | client_id |
| read | Return paginated control summary metrics for all partner clients | - |
| read | Return aggregate control metrics for the requested client | client_id |
| read | Return a paginated list of evidences belonging to the specified client | client_id |
| read | Return paginated evidence summaries for all partner clients | - |
| write | Create a new evidence with all necessary details | client_id, title |
| read | Get detailed information about a specific evidence using its unique identifier | client_id, evidence_id |
| write | Partially update an existing evidence for the specified client | client_id, evidence_id |
| destructive | Delete an evidence that is no longer required for compliance or business purposes | client_id, evidence_id |
| destructive | Delete Evidence Schedule (Deprecated) | client_id, evidence_id |
| read | Get all evidence requests and it's document associated with a specific evidence record | client_id, evidence_id |
| write | Create a new request inside an existing evidence | client_id, evidence_id |
| write | Create an new evidence request and generates pre-signed URL(s) | client_id, evidence_id, file_name, file_size_bytes |
| write | Generate pre-signed URL to upload document(s) for the specified evidence request | client_id, evidence_request_id, file_name, file_size_bytes |
| write | Upload a document up to 10 MB and attaches it to the specified evidence request | client_id, evidence_request_id, file |
| write | Create a new evidence request and uploads a document up to 10 MB | client_id, evidence_id, file |
| write | Create a new hyperlink and associates it with an evidence request | client_id, evidence_request_id, name, hyperlink |
| write | Update specific fields of an evidence request | client_id, evidence_request_id |
| destructive | Delete a specific evidence request associated with an evidence | client_id, evidence_request_id |
| write | Archive an existing evidence request and records audit metadata | client_id, evidence_request_id |
| write | Trigger a refresh of all evidence mappings for the specified client | client_id |
| read | Get a time-limited signed URL for downloading the specified document | client_id, document_id |
| destructive | Delete the specified document for the given client | client_id, document_id |
| write | Map an evidence to objectives and/or controls for a client | client_id, evidence_id |
| write | Remove links between an evidence and the given objectives (requirements) and/or controls | client_id, evidence_id |
| read | Get a paginated list of governance for a specific client | client_id |
| write | Create a new governance for the specified client with the provided details | client_id, title |
| read | Return detailed information for a specific governance identified by its ID for the given client | client_id, governance_id |
| write | Update specific fields of a governance | client_id, governance_id |
| destructive | Delete an existing governance identified by its governance ID for the specified client | client_id, governance_id |
| write | Map a governance to framework requirements (objectives), policies, and/or controls for a client | client_id, governance_id |
| write | Remove links between a client governance and given objectives (requirements), policies | client_id, governance_id |
| read | Return paginated governance summaries for all partner clients | - |
| read | Get a paginated list of policies for a specific client | client_id |
| write | Create a new policy for the specified client with the provided details | client_id, title |
| read | Return detailed information for a specific policy identified by its ID for the given client | client_id, policy_id |
| write | Update specific fields of a policy | client_id, policy_id |
| destructive | Delete an existing policy identified by its policy ID for the specified client | client_id, policy_id |
| write | Create or updates an HTML policy section using title and description (snake_case JSON) | client_id, policy_id, title |
| destructive | Delete an existing policy section identified by its section ID for the specified client policy | client_id, policy_id, section_id |
| write | Map a policy to framework objectives and/or controls for a client | client_id, policy_id |
| write | Remove links between a client policy and the framework objectives and/or controls in the request | client_id, policy_id |
| read | Return paginated Policy summaries for all partner clients | - |
| read | Get a paginated list of procedures for a specific client | client_id |
| write | Create a new procedure for the specified client with the provided details | client_id, title |
| read | Return detailed information for a specific procedure identified by its ID for the given client | client_id, procedure_id |
| write | Update specific fields of a procedure document (procedure rows only, not governance documents) | client_id, procedure_id |
| destructive | Delete an existing procedure identified by its procedure ID for the specified client | client_id, procedure_id |
| write | Map a client procedure to framework requirements (objectives), policies, and/or controls | client_id, procedure_id |
| write | Remove links between a client procedure and framework requirements (objectives), policies | client_id, procedure_id |
| read | Return paginated Procedure summaries for all partner clients | - |
| read | Get a paginated list of objectives associated with a specific client | client_id, framework_id |
| read | Return a single objective for the specified client and framework | client_id, framework_id, objective_id |
| read | Return Objective summary for a single client | client_id |
| read | Return paginated Objective summaries for all partner clients | - |
| read | Return paginated Assessment Overview for all partner clients | - |
| read | Return comprehensive assessment summary for a client | client_id |
| read | Return a paginated list of assessment questions for the specified client | client_id |
| read | Return full assessment question details for the question identified by question code | client_id, question_code |
| write | Submit or updates the selected answer for the assessment question identified by question_code | client_id, question_code, answer |
| destructive | Clear the existing answer for the specified assessment question | client_id, question_code |
| write | Map an assessment question to evidences, action items, policies, or procedures for a client | client_id, question_code |
| write | Unmap Assessment Question from Items (Deprecated) | client_id, question_code |
| write | Create a response for a client's assessment question | client_id, question_code, response |
| write | Partially update a question response | client_id, question_code, id |
| destructive | Delete a assessment question response | client_id, question_code, response_id |
| read | Get a paginated list of action items for a specific client | client_id |
| read | Get a specific action item for a given client | client_id, action_item_id |
| write | Create a new action item for the specified client with the provided details Allowed values | client_id, weakness_name |
| write | Update specific fields of an action item request | client_id, action_item_id |
| destructive | Delete an existing action item identified by its action item ID for the specified client | client_id, action_item_id |
| write | Map an action item to objectives, assessment questions, risks, controls, assets | client_id, action_item_id |
| write | Remove links between an action item and the given objectives (requirements) | client_id, action_item_id |
| write | Upload a document up to 10 MB and associates it with the specified action item | client_id, action_item_id, file |
| write | Generate pre-signed URL(s) to upload document(s) for the specified action item | client_id, action_item_id, file_name, file_size_bytes |
| read | Get a paginated summary of action items grouped by client | - |
Backup Radar (3 tools)
Tool | Kind | Purpose | Required |
| read | Return a cursor-paginated list of clients whose backup health matches the optional filters | - |
| read | Return backup health for one client | id |
| read | Return a cursor-paginated list of backup devices whose names match the optional filters | - |
Quoter (61 tools)
Tool | Kind | Purpose | Required |
| read | Get a paginated list of all Quotes | - |
| read | Get a quote revision with the full display payload - sections, line items, totals, contacts | quote_id |
| write | Create a new draft quote from a template | contact, template_id |
| write | Transition a draft quote into the published state | quote_id |
| write | Add one or more sections to a draft quote | quote_id, name |
| write | Add one or more line items to a section on a draft quote | quote_id, section_id, name |
| write | Patch a line item on a draft quote | quote_id, section_id, line_item_id |
| write | Create Line Item | quote_id, name |
| read | Get a paginated list of all Quote Templates | - |
| read | Get a list of all categories available in the system | - |
| write | Add a new category to organize items | name |
| read | Get detailed information about a specific category | id |
| write | Modify the properties or configuration of an existing category | id |
| destructive | Remove a category from the system | id |
| read | Get a list of all item group assignments available in the system | - |
| write | Assign an item to an item group | item_group_id, item_id |
| read | Get detailed information about a specific item group assignment | id |
| destructive | Remove an item group assignment from the system | id |
| read | Get a list of all item groups available in the system | - |
| write | Add a new item group to organize items | name |
| read | Get detailed information about a specific item group | id |
| write | Modify the properties or configuration of an existing item group | id |
| destructive | Remove an item group from the system | id |
| read | Get a list of all item option values available in the system | - |
| write | Add a new value to an item option | item_option_id, name |
| read | Get detailed information about a specific item option value | id |
| write | Modify the properties or configuration of an existing item option value | id |
| destructive | Remove an item option value from an item option | id |
| read | Get a list of all item options available in the system | - |
| write | Add a new item option to an item | item_id, name |
| read | Get detailed information about a specific item option | id |
| write | Modify the properties or configuration of an existing item option | id |
| destructive | Remove an item option from an item | id |
| read | Get a list of all item tiers available in the system | - |
| write | Add a new pricing tier to an item | item_id |
| read | Get detailed information about a specific item tier | id |
| write | Modify the properties or configuration of an existing item tier | id |
| destructive | Remove an item tier from an item | id |
| read | Get a list of all items available in the system | - |
| write | Add a new item to your product catalog | name, category_id |
| read | Get detailed information about a specific item | id |
| write | Modify the properties or configuration of an existing item | id |
| destructive | Remove an item from your product catalog | id |
| read | Get a list of all manufacturers available in the system | - |
| write | Add a new manufacturer to the system | name |
| read | Get detailed information about a specific manufacturer | id |
| write | Modify the properties or configuration of an existing manufacturer | id |
| destructive | Remove a manufacturer from the system | id |
| read | Get a list of contacts | - |
| write | Create a new contact with billing and optional shipping details | - |
| read | Get a contact by its id | id |
| write | Update a specific contact's information by its id | id |
| read | Get a list of all suppliers available in the system | - |
| write | Add a new supplier to the system | name |
| read | Get detailed information about a specific supplier | id |
| write | Modify the properties or configuration of an existing supplier | id |
| destructive | Remove a supplier from the system | id |
| read | Get supplier item data for specified MPNs from suppliers configured through SupplierSync | - |
| read | Get a list of suppliers configured through SupplierSync | - |
| read | Auth authorize (not available in the ScalePad API) | - |
| read | Auth refresh (not available in the ScalePad API) | refresh_token |
Errors come back as a JSON envelope instead of an exception:
{"error": {"code": "unauthorized", "message": "ScalePad returned HTTP 402 for /lifecycle-manager/v1/contacts: PRODUCT_SUBSCRIPTION_REQUIRED Lifecycle Manager subscription required ...", "retryable": false}}code is one of not_configured, unauthorized, not_found, invalid_argument,
rate_limited, upstream_error; ScalePad's error code, title and detail are included.
Reads are retried with backoff on 429 (honouring Retry-After), 5xx and network errors;
writes are retried only on 429, so a write never runs twice.
Run locally
uv sync
uv run python -m scalepad_mcp # listens on 0.0.0.0:8080or with Docker:
docker build --platform linux/amd64 -t scalepad-mcp:dev .
docker run --rm -p 8080:8080 scalepad-mcp:devConfiguration (environment variables, all optional): MCP_HTTP_HOST (default 0.0.0.0),
MCP_HTTP_PORT (default 8080), LOG_LEVEL (default INFO). The key is never read from the
environment.
Testing example
# list tools
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-ScalePad-Api-Key: your-api-key" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# clients whose name matches
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-ScalePad-Api-Key: your-api-key" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"scalepad_core_clients_list","arguments":{"filter":{"name":"Example"},"page_size":10}}}'Unit tests (no network access needed):
uv run pytestDelivery notes
Tool count (381). Kept as is because the tool names and parameters are an existing contract (
tests/contract.jsonpins every name and its required parameters).Declarative tools. Every tool is one entry in
src/scalepad_mcp/catalog.py(method, path, where each argument goes) built from the ScalePad API reference; one engine turns calls into requests, and a test checks every entry against its path template.Endpoints that did not exist. Older versions called eight Lifecycle Manager routes that are not in the ScalePad API. Five now use the official equivalents: contact lookup (contacts list filtered by client), active users (
/users), initiative and goal updates (PATCH, with plain-text summaries converted to rich text) and client-group lookup (reads the client groups and keeps those listing the client). Three have no public endpoint and return an explanatoryinvalid_argument:scalepad_lm_user_identity_get,scalepad_lm_user_ui_state_getandscalepad_lm_user_ui_state_put. The Quoter OAuth helpers (scalepad_quoter_auth_authorize,scalepad_quoter_auth_refresh) are not needed with the ScalePad key and do the same.Request shapes. Bodies follow the official schemas: section and line-item creation and signed-URL requests send a one-element array, document uploads are multipart (the
fileargument is base64), reference fields such asclient_key,hardware_key,category,manufacturerandsupplierare objects but a bare id string is still accepted and wrapped as{"id": ...}, and ControlMapfieldslists are joined into the comma-separated string the API expects.Safety annotations. Deletes are annotated destructive; attach / detach, map / unmap and other changes are writes; descriptions tell the agent to use them only on explicit request.
No interactive prompts. Older versions asked the user for filters or confirmation mid-call, which a stateless gateway cannot relay; lists page instead, and write tools rely on their descriptions and annotations.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
- ElaichiOAuthai.elaichi
Governed AI agents for the software your company already runs. 400+ connectors, one endpoint.
Pay-per-call MCP catalog of 1,600+ tools for AI agents: one connection, one prepaid balance.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides AI assistants with direct access to Autotask PSA for MSP operations. Enables natural language interaction for ticket management, time logging, company lookups, project tracking, and billing review through 39 comprehensive tools.100131 npmApache 2.0
- AlicenseCqualityBmaintenanceEnables AI assistants to fully access and manage SyncroMSP resources including tickets, customers, assets, invoices, and over 30 resource types through 180+ API endpoints.19029 npm10MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with ConnectWise Manage through 45 tools across Service, Operations, and Finance domains, with tier-based access control for finance tools.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP-capable AI agents to query Auvik network monitoring data through fifteen tools, covering alert triage, inventory, hardware health, config changes, remote-access audit, lifecycle, and performance statistics, with a single guarded write for alert dismissal.2MIT