Skip to content

Tools reference

swsd-mcp registers 35 tools across 10 categories. Each tool’s input schema, full description, and output shape is auto-discovered by your MCP client at runtime — ask your agent “what swsd tools are available?” for the live list.

This page is the at-a-glance summary: what each tool does and which profile includes it.

Seven read tools ship interactive UI bundles using the MCP Apps capability (SEP-1865). Hosts that support MCP Apps render a rich UI alongside the structured response — single-record detail views, filterable/sortable tables, comment threads, audit timelines, searchable explorers, and submit-ready forms — instead of (or in addition to) plain text. Hosts without MCP Apps support are unaffected: the same tools continue to return their normal text + structured output, and the _meta.ui.resourceUri advertisement is silently ignored.

ToolWidgetUI
swsd_get_incidentincident-detailSingle-record detail view (description, due date, SLA, resolution, custom fields)
swsd_get_solutionsolution-detailSingle-record detail view with sanitized HTML body
swsd_list_incidents, swsd_list_my_incidentsincident-listFilterable, sortable table with overflow scroll
swsd_list_incident_commentscomment-threadVertical conversation with author chips, timestamps, public/private badges, sanitized HTML bodies
swsd_get_record_auditsaudit-timelineVertical timeline grouped by day with action chips and field-level diffs
swsd_get_catalog_itemcatalog-item-formRenders catalog variables as a form; submits via swsd_create_service_request (calls back into the server through app.callServerTool)
swsd_describe_custom_fieldscustom-fieldsSearchable explorer with scope/module filters

HTML content (solution bodies, incident descriptions, comment bodies, catalog helptext) is sanitized client-side via DOMPurify before insertion — no external network access, no third-party scripts. Tools with a UI bundle are marked UI in the Type column below.

Every id-keyed tool now accepts either the internal id (≥7 digits, the SWSD primary key) or the human-facing number visible in the SWSD UI (≤6 digits for incidents, ≤4 digits for solutions). The disambiguator looks at digit count first; ambiguous inputs trigger a single targeted list lookup. Affected tools:

  • swsd_get_incident, swsd_update_incident, swsd_assign_incident, swsd_update_incident_state, swsd_link_solution_to_incident
  • swsd_list_incident_comments, swsd_add_incident_comment, swsd_update_comment
  • swsd_get_solution, swsd_update_solution
  • swsd_get_record_audits (when object_type is incidents or solutions; other types remain id-only)

This eliminates the 4-round-trip “find then fetch” pattern that v2.0.2 user smoke testing surfaced — agents can paste the number from a SWSD email or browser tab directly.

SymbolMeaning
Tool is registered in this profile
WWrite tool — modifies SWSD state. Does not retry on transient failure (avoids duplicate writes).
RRead tool — safe to retry; auto-retries up to SWSD_RETRY_MAX_ATTEMPTS on 5xx/network errors.
UIShips an MCP Apps UI bundle (SEP-1865). Capable hosts render a rich interactive view; text-only clients are unaffected.

ToolTypetriageagentknowledgefull
swsd_get_server_infoR
swsd_health_checkR
swsd_get_meR

swsd_get_server_info returns version, profile, transport, base URL, and the list of enabled tools — useful for verifying server configuration from inside the MCP client. Also includes documented SWSD upstream rate limits (upstream_rate_limit: 1000 calls/min on Advanced, 1500 on Premier; signal: 429 + Retry-After only — SWSD does not return X-RateLimit-* headers) so the model can reference these without guessing.

swsd_health_check performs a live API call to SWSD (lightweight read against /users/me.json) and returns connectivity + auth status. Use this as the first call to confirm your token works.

swsd_get_me returns the SWSD user record for the token’s owner — id, email, name, title, role, department, site, group_ids, and assignment status. Combines three identity paths: JWT payload decode (zero-cost, always works), GET /users/{user_ic}.json (documented endpoint), and GET /profile.json (optional fallback that adds last_login). Call this first when the request mentions “me”, “my”, or “I” (e.g. “my tickets”, “tickets in my group”, “tickets assigned to me”), then pass the returned id/email to assignee_email or requester_email filters on swsd_list_incidents.


ToolTypetriageagentknowledgefull
swsd_list_incidentsR, UI
swsd_list_my_incidentsR, UI
swsd_get_incidentR, UI
swsd_create_incidentW
swsd_update_incidentW
swsd_assign_incidentW
swsd_update_incident_stateW
swsd_link_solution_to_incidentW
  • swsd_list_incidents — paginated list with structured filters using SWSD repeated-key array semantics (multiple values within a filter are OR-ed). Filters: states, priorities, categories, assignee_email, requester_email, sites, departments, assigned_to_group (group ID, not user ID), created_from/created_to, updated_from/updated_to, updated_within (date-natural-language alias — "24h", "7d", "1w", "30d", etc.), state_is_not (negative state filter — e.g. ["Resolved", "Closed"] to see only open work), sort_by (created_at, updated_at, priority, name, due_at), sort_order (ASC/DESC), query (free-text across title and description). Returns compact summaries (id, name, state, priority, assignee_email, requester_email, category, updated_at) — call swsd_get_incident for full detail of any one row.
  • swsd_list_my_incidents — thin wrapper over swsd_list_incidents that auto-resolves the authenticated user’s email (via JWT decode + /users/{user_ic}.json) and applies it as assignee_email. One round-trip instead of two for first-person queries (“my tickets”, “tickets assigned to me”). Same input shape as swsd_list_incidents minus assignee_email. Renders the same incident-list widget as swsd_list_incidents in MCP Apps-capable hosts. For tenant-wide queries use swsd_list_incidents with explicit filters.
  • swsd_get_incident — full incident detail as returned by SWSD (passthrough), including custom-field values. Accepts the incident’s id or human-facing number. Pass detail_level: "long" to include comments, attachments, audits, SLA data, tags, statistics, satisfaction, and resolution detail in one call. Default "short" is faster and cheaper; recommend "long" when the user asks “show me everything about ticket X” or wants comments/attachments/audits. Renders the incident-detail widget in MCP Apps-capable hosts (description, due date with Overdue badge, SLA violations, resolution body, custom fields).
  • swsd_create_incident — minimum required: name. Strongly recommended: description, requester, category, site. Returns the created incident’s full payload. To set tenant-specific custom field values, pass custom_fields: [{name, value}] — call swsd_describe_custom_fields first to discover field names and (for Dropdowns) allowed values. Validated for Text, Dropdown, Number, Checkbox, and Date types.
  • swsd_update_incident — partial-update semantics: pass only the fields you want to change. Accepts the incident’s id or human-facing number. To clear a field, pass null. To set tenant-specific custom field values, pass custom_fields: [{name, value}] — call swsd_describe_custom_fields first to discover field names and (for Dropdowns) allowed values. Validated for Text, Dropdown, Number, Checkbox, and Date types.
  • swsd_assign_incident — convenience wrapper for changing the assignee (user or group). Accepts the incident’s id or human-facing number. Validates that the assignee exists.
  • swsd_update_incident_state — state transition with optional resolution comment. Accepts the incident’s id or human-facing number. Validates against your tenant’s allowed states.
  • swsd_link_solution_to_incident — append-only solution linking. Accepts both ids/numbers (incident and solution) in either form. Fetches existing links, adds the new one, PUTs the merged set so existing links aren’t dropped.

ToolTypetriageagentknowledgefull
swsd_list_catalog_itemsR
swsd_get_catalog_itemR, UI
swsd_create_service_requestW

Use the catalog flow when the user asks to request something — new hardware, software access, an account, a file restore — instead of swsd_create_incident. SWSD’s catalog items carry pre-defined approval routing, request variables (form fields), category/subcategory defaults, and SLA targets that a free-form incident misses. The server instructions advertise this preference order so capable agents pick the catalog flow automatically.

  • swsd_list_catalog_items — paginated list of catalog items with state, department, site, and free-text query filters. Returns compact summaries (id, name, state, category/subcategory, request_count, updated_at, variable_count). Carries the same applied_filters echo + pagination.total_scope discriminator as swsd_list_incidents. Call this first when you need to find the right catalog item.
  • swsd_get_catalog_item — single-item lookup that exposes the full variables array (the request form schema). Each variable carries id (consume as custom_field_id when submitting), name, kind (free_text / drop_down_menu / multi_select / date / user), field_type (numeric SAManage code), options (newline-separated allowed values for dropdowns), required, and helptext. Inspect the variables before filling them — for dropdowns, the value you submit must match one of the options verbatim. Renders the catalog-item-form widget in MCP Apps-capable hosts: variables become a form whose Submit button calls swsd_create_service_request directly via app.callServerTool, collapsing the 4-round-trip request workflow to 2.
  • swsd_create_service_request — submits a request via POST /catalog_items/{id}/service_requests.json. The endpoint auto-sets is_service_request: true and inherits the catalog item’s category/subcategory. Each request_variables entry maps a catalog variable’s id (as custom_field_id) to a string value. Requester defaults to the JWT-authenticated user; pass requester_id to file the request on behalf of someone else. Optionally accepts description (initial comment) and custom_fields_values (SWSD-level custom fields, separate from the catalog’s request_variables).

ToolTypetriageagentknowledgefull
swsd_list_incident_commentsR, UI
swsd_add_incident_commentW
swsd_update_commentW
  • swsd_list_incident_comments — paginated comment thread for an incident, including private/internal comments if your token has permission. Accepts the incident’s id or human-facing number. Renders the comment-thread widget in MCP Apps-capable hosts (vertical conversation with author chips, timestamps, public/private badges, sanitized HTML bodies).
  • swsd_add_incident_comment — post a new comment. Set is_private: true for internal-only comments (default false = visible to the requester). Accepts the incident’s id or human-facing number. To edit later, use swsd_update_comment.
  • swsd_update_comment — edit an existing comment’s body or visibility. Accepts the parent incident’s id or human-facing number.

ToolTypetriageagentknowledgefull
swsd_list_incident_tasksR
swsd_create_incident_taskW
swsd_update_task_stateW

SWSD incident sub-tasks are inline-only — they exist as ordered children of a parent incident, not as first-class records, so every tool here takes an incident_id_or_number.

  • swsd_list_incident_tasks — paginated task list for one incident. Returns id, title, completion status, assignee, position (display order), and timestamps. Use this to see open work without opening the parent incident.
  • swsd_create_incident_task — create a sub-task on the parent incident. Required: title. Optional: assignee_id, position, description. Posted via POST /incidents/{id}/tasks.json.
  • swsd_update_task_state — toggle a task’s completion. complete: true marks done (sets completion_date); complete: false reopens. PUTs to /incidents/{incident_id}/tasks/{task_id}.json.

ToolTypetriageagentknowledgefull
swsd_list_problemsR
swsd_get_problemR
swsd_create_problemW

ITIL problem records — separate from incidents, scoped to root-cause investigation across recurring incidents. Read-only visibility ships in the triage profile so first-line support can see open root-cause work without granting promote/create rights.

  • swsd_list_problems — paginated browse with state, priority, assignee_email, category, created_from/created_to, free-text query, and standard sort/page filters. Returns compact summaries (id, name, state, priority, assignee, updated_at).
  • swsd_get_problem — full problem detail as returned by SWSD (passthrough), including custom-field values and any linked incidents.
  • swsd_create_problem — create a new problem record. Required: name. Strongly recommended: description, requester, category. Use this when an agent recognizes that several incidents share a common root cause.

ToolTypetriageagentknowledgefull
swsd_search_solutionsR
swsd_get_solutionR, UI
swsd_create_solutionW
swsd_update_solutionW
  • swsd_search_solutions — full-text search across titles and descriptions. Pass category to filter to a specific KB section.
  • swsd_get_solution — full solution as returned by SWSD (passthrough), including both description (HTML) and description_no_html (plain text), custom-field values, comments count, and attachment metadata. Accepts the solution’s id or human-facing number. Pass detail_level: "long" to include attachments, audits, tags, and full statistics in one call. Default "short" is faster. Renders the solution-detail widget in MCP Apps-capable hosts (full sanitized HTML body, not just an excerpt — the whole point of opening a KB article).
  • swsd_create_solution — required: title. Strongly recommended: description (HTML supported), state, category. To set tenant-specific custom field values, pass custom_fields: [{name, value}] — call swsd_describe_custom_fields first to discover field names and (for Dropdowns) allowed values. Solutions require name keying (custom_field_id alone is rejected with HTTP 400). Validated for Text, Dropdown, Number, Checkbox, and Date types.
  • swsd_update_solution — partial update. Accepts the solution’s id or human-facing number. To replace the description entirely, pass the full new body. To set tenant-specific custom field values, pass custom_fields: [{name, value}] — call swsd_describe_custom_fields first to discover field names and (for Dropdowns) allowed values. Solutions require name keying (custom_field_id alone is rejected with HTTP 400). Validated for Text, Dropdown, Number, Checkbox, and Date types.

All lookup tools are read-only. They exist to validate IDs/names before passing to write tools (e.g., look up a site name before creating an incident with site_name).

ToolTypetriageagentknowledgefull
swsd_list_categoriesR
swsd_list_sitesR
swsd_list_departmentsR
swsd_list_usersR
swsd_list_groupsR
swsd_list_rolesR

Each returns id, name, plus type-specific fields (e.g., time_zone for sites, disabled for groups).


ToolTypetriageagentknowledgefull
swsd_describe_custom_fieldsR, UI
  • swsd_describe_custom_fields — schema introspection for custom fields defined in your tenant. Returns each field’s name, type, category, allowed values (for picklists), and which entity types it applies to.

ToolTypetriageagentknowledgefull
swsd_get_record_auditsR, UI
  • swsd_get_record_audits — list the audit log for a SWSD record. Wraps GET /{type}/{id}/audits.json. Each audit entry captures one change: action ("Update"/"Create"/"Delete"), message (e.g. "State changed from New to Assigned"), the user who performed it, and the timestamp. Use this to answer “who changed this ticket?” or “what happened since I last looked?”. Cheaper than swsd_get_incident with detail_level=long when you only need the audit history. object_type accepts incidents, problems, changes, releases, solutions, hardwares, other_assets. When object_type is incidents or solutions, id accepts either the internal id or the human-facing number; other types remain id-only. Renders the audit-timeline widget in MCP Apps-capable hosts (vertical timeline grouped by day with action chips and field-level diffs).

Use SWSD_ENABLE_EXTRAS to add specific tools on top of the chosen profile. See Configuration → Profiles.

Example: triage profile + KB read access:

Terminal window
SWSD_PROFILE=triage
SWSD_ENABLE_EXTRAS=swsd_search_solutions,swsd_get_solution