matrix42-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| M42_HOST | Yes | Base URL of the Matrix42 instance, e.g. https://matrix42.example.com | |
| M42_TOOLS | No | Comma-separated tool ids to expose | all |
| M42_UI_URL | No | Origin of the web interface, for deep links. Discovered from the instance's web shell config when unset. | discovered |
| M42_LANGUAGE | No | Response language, sent as Explicit-Language | en-US |
| M42_PASSWORD | No | Basic-auth alternative to M42_API_TOKEN | |
| M42_USERNAME | No | Basic-auth alternative to M42_API_TOKEN | |
| M42_API_TOKEN | No | API token; exchanged for an access token automatically | |
| M42_AUDIT_NOTE | No | Mark created tickets with an internal note saying they were raised through this server. Set to 0 to disable. | 1 |
| M42_TIMEOUT_MS | No | Per-request timeout | 30000 |
| M42_AGENT_LABEL | No | How the assistant is named in that note | Matrix42 MCP server |
| M42_ALLOW_WRITES | No | Set to 1 to expose tools that modify data. Write tools are not registered at all unless this is set. | 0 |
| M42_ALLOW_INSECURE_TLS | No | Set to 1 to skip TLS verification (self-signed dev instances only) | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| server_infoA | Report which Matrix42 instance this MCP server is connected to (base URL, authentication mode, response language), which account the credentials authenticate as, and whether the connection works. Use the reported user fragment id to answer "my items" questions. Never returns credentials. |
| webservice_discoveryA | Discover the Matrix42 REST API of the connected instance (read-only metadata). action='api_overview' returns general Matrix42 API conventions (token exchange, the Explicit-Language header, Public vs Product API) — useful for reasoning about the API or writing standalone integration code. action='list_operations' returns operations as {id,name,method,path,service,documentation}; pass 'search' to filter by name/documentation/service or 'service_id' to limit to one service. action='list_services' lists every web service with its documentation. action='describe_operation' with 'operation_id' returns that operation's full contract: HTTP method, path, parameters with types, and return type. Typical flow: api_overview (once) → list_operations(search) → describe_operation(id). |
| schema_discoveryA | Explore the Matrix42 data model of the connected instance (read-only metadata). action='schema_overview' explains how the model fits together (data definitions vs configuration items, fragments, cardinality, pickups) — read this first. action='list_data_definitions' and action='list_configuration_items' find schema objects by 'search' term. action='describe_data_definition' returns a definition's attributes (add include='relations' or 'both' for its relations). action='describe_configuration_item' returns the data definitions an object is composed of, with cardinality and multi-fragment flags. action='get_pickup_values' returns the selectable values of a pickup — either pass 'pickup_class', or 'name' plus 'attribute' to resolve it. Typical flow: schema_overview → list_* (search) → describe_* → get_pickup_values before filtering on a pickup. |
| data_queryA | Read records from the connected Matrix42 instance (read-only). action='asql_guide' explains the ASQL expression language used by 'where' and 'columns' — read it before writing a filter. action='validate_asql' checks an expression against a class and reports the exact error; validating is cheaper than a failed query. action='query' returns rows of one data definition, with typed column metadata, an ASQL 'where' filter, 'columns' projection, 'sort', and paging. action='get_fragment' returns one complete fragment by id; action='get_object' returns a whole object by configuration-item name and object id. action='list_views' lists the instance's saved data queries — curated, named views that already carry a predefined filter — and action='run_view' runs one; prefer a matching view over hand-written ASQL. action='list_journal' returns an object's comment timeline and action='list_attachments' its files. NEVER guess attribute names: read them with schema_discovery(describe_data_definition) before writing 'columns' or 'where', and use get_pickup_values for the valid values of any pickup you filter on. |
| service_deskA | Read the service desk and the business objects around it. action='data_model' explains how Matrix42's modules map onto a handful of base classes — read it first if you are unsure where something lives. action='search_tickets' searches ANY ticket kind (incident, problem, change, task, service request, generic ticket, knowledge article) through one uniform contract. Only subject, category_name and states actually filter — Matrix42 accepts the other parameters and ignores them, so they are refused rather than returning every ticket. To filter on a person, ticket number or asset, use data_query with an ASQL where clause. action='get_ticket' returns one ticket's summary (it takes the OBJECT id — a fragment id answers null), action='sla_for_ticket' the service levels that apply to it, and action='sla_times' applies a service-level duration between two points in time. action='browse' lists a curated domain: assets (SPSAssetClassBase), stock_units (SPSStockKeepingUnitClassBase), contracts (SPSContractClassBase), slas (SVCServiceLevelAgreementClassBase), catalog_services (SPSArticleClassBase), bookings (SVCServiceBookingClassBase), kb_articles (SVMKBArticleClassBase), approvals (SVCApprovalTaskClassBase), imports (GDIEImportClassBase), import_runs (GDIEImportLogClassBase), workflow_instances (PLSLProcessInstanceClassBase), workflow_definitions (PLSLComponentClassBase), applications (SPSApplicationClassBase). action='find' searches ALL of those domains at once for a name — reach for it when you do not know where something lives. It does not cover tickets; search those with search_tickets. Columns are resolved against this instance every time, so fields a module does not install are reported as unavailable rather than failing the call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| explore_instance | Survey an unfamiliar instance: what it runs, which modules are installed, and where the data you care about lives. |
| build_query | Turn a question in plain language into a correct ASQL query, checking every attribute name against the live schema before running it. |
| triage_ticket | Work through one ticket: what it is, who it belongs to, what the service level says, and what should happen next. |
| safe_change | Walk a write through the preview-then-confirm protocol, so nothing reaches the instance before you have seen exactly what it will send. |
| find_endpoint | Locate the operation that does what you need and read its real contract — for writing integration code against Matrix42. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| data-model | How the modules map onto a handful of base classes - where tickets, assets, licenses, contracts, SLAs and catalog items actually live, and the rule against guessing attribute names. |
| schema | Data definitions vs configuration items, fragments, cardinality and pickups - read before reasoning about Matrix42 data. |
| asql | The filter and column-list language used by every fragment query. |
| api | Authentication, headers, and the Public vs Product API distinction - read before writing standalone Matrix42 integration code. |