---
title: "Connect Zammad to Claude: Manage Tickets, SLAs, and Workflows"
slug: connect-zammad-to-claude-manage-tickets-slas-and-workflows
date: 2026-08-10
author: Nidhi KN
categories: ["AI & Agents"]
excerpt: "Learn how to connect Zammad to Claude using a managed MCP server. This guide covers Zammad-specific API architecture, tool generation, and automated workflows."
tldr: "Connect Zammad to Claude using a managed Model Context Protocol (MCP) server. Automate ticket triage, SLA monitoring, and user management with auto-generated tools and strict security controls."
canonical: https://truto.one/blog/connect-zammad-to-claude-manage-tickets-slas-and-workflows/
---

# Connect Zammad to Claude: Manage Tickets, SLAs, and Workflows


If you need to connect Zammad to Claude to automate IT helpdesk operations, customer support triage, or SLA monitoring, you need a [Model Context Protocol (MCP) server](https://truto.one/what-is-mcp-and-mcp-servers-and-how-do-they-work/) (MCP) server. This server acts as the translation layer between Claude's function calls and Zammad's REST APIs. You can either build and maintain this infrastructure yourself, or use a [managed integration platform like Truto](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/) to dynamically generate a secure, authenticated MCP server URL. If your team uses ChatGPT, check out our guide on [connecting Zammad to ChatGPT](https://truto.one/connect-zammad-to-chatgpt-automate-support-and-knowledge-bases/) or explore our broader architectural overview on [connecting Zammad to AI Agents](https://truto.one/connect-zammad-to-ai-agents-orchestrate-users-orgs-and-tickets/).

Giving a Large Language Model (LLM) read and write access to a structured ticketing system like Zammad is a complex engineering task. You must handle authentication lifecycles, map Zammad's specific data schemas to MCP tool definitions, and deal with strict referential integrity rules. Every time Zammad updates an endpoint, you must update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Zammad, connect it natively to Claude, and execute complex workflows using natural language.

> Want to give your AI agents secure, authenticated access to Zammad and 100+ other SaaS APIs? Let's talk about [managed MCP architecture](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/).
>
> [Talk to us](https://cal.com/truto/partner-with-truto)

## The Engineering Reality of the Zammad API

A [custom MCP server](https://truto.one/what-is-mcp-and-mcp-servers-and-how-do-they-work/) is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Zammad's API exposes several domain-specific hurdles. If you decide to build a custom MCP server for Zammad, you own the entire API lifecycle. Here are the specific challenges you will face:

**Opaque State Type Dependencies**
Zammad's data model enforces strict requirements for core entities. For example, creating a new ticket state requires a `state_type_id`. However, no standard API endpoint lists state types - they are instance-specific and typically require access to the underlying Rails console to obtain. If you expose raw Zammad endpoints to an LLM, the model will hallucinate these internal IDs and fail continuously. A managed MCP layer maps known operational workflows to the API rather than dumping raw endpoints into the context window.

**Referential Integrity and Hard Deletes**
Zammad APIs enforce strict referential integrity. You cannot delete a user or organization if they have existing references in activity streams, tickets, or notes. When Claude attempts to execute a cleanup workflow (like offboarding a user), the API will frequently return constraint errors. The LLM needs precise schema definitions to understand that it must reassign or close tickets before attempting entity deletion.

**Complex Relational Expansion**
Zammad heavily utilizes relation IDs (`group_id`, `owner_id`, `customer_id`) in its ticket responses. Out of the box, reading a ticket provides these integers rather than human-readable names. Your MCP server must either handle the `expand` query parameter logic globally or instruct the LLM on how to make secondary requests to the users and groups endpoints to resolve these references. 

**Handling API Rate Limits**
Zammad instances, particularly self-hosted ones, often enforce strict rate limits. It is critical to understand that Truto does not retry, throttle, or apply backoff on rate limit errors. When an upstream API returns an HTTP 429, Truto passes that error directly to the caller. However, Truto normalizes the upstream rate limit information into standardized headers (`ratelimit-limit`, `ratelimit-remaining`, `ratelimit-reset`) per the IETF specification. The caller (or the agent framework driving Claude) is entirely responsible for observing these headers and implementing appropriate retry or backoff logic.

## How to Generate a Managed Zammad MCP Server

Instead of building a JSON-RPC 2.0 server from scratch, you can use Truto to dynamically generate an MCP server for Zammad. Truto derives tools dynamically from the integration's documented API resources - no documentation means no tool. This acts as a quality gate, ensuring Claude only sees well-described endpoints.

Each MCP server is scoped to a single authenticated Zammad account and secured by a cryptographically hashed token. 

### Method 1: Via the Truto UI

For administrators who want to quickly spin up a server for Claude Desktop:

1. Navigate to the **Integrated Accounts** page in your Truto dashboard and select your connected Zammad account.
2. Click the **MCP Servers** tab.
3. Click **Create MCP Server**.
4. Select your desired configuration (e.g., restrict to read-only methods, or filter by specific tags like "support").
5. Copy the generated MCP server URL (e.g., `https://api.truto.one/mcp/a1b2c3d4...`).

### Method 2: Via the Truto API

For developers programmatically provisioning AI workspaces, you can generate MCP servers via a REST API call. The API validates that tools exist, generates a secure token stored in edge KV storage, and returns the endpoint.

```typescript
// POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp
// Headers: Authorization: Bearer {truto_api_token}

{
  "name": "Zammad Support Agent Workspace",
  "config": {
    "methods": ["read", "write", "custom"],
    "tags": ["tickets", "users", "organizations"]
  },
  "expires_at": "2026-12-31T23:59:59Z"
}
```

The response returns the ready-to-use URL:

```json
{
  "id": "mcp-7a8b9c",
  "name": "Zammad Support Agent Workspace",
  "config": {
    "methods": ["read", "write", "custom"],
    "tags": ["tickets", "users", "organizations"]
  },
  "expires_at": "2026-12-31T23:59:59.000Z",
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}
```

## Connecting the MCP Server to Claude

Once you have the URL, you connect it to Claude. The server URL contains the cryptographic token that encodes the account and tool filters, so no additional headers are required unless you explicitly enforce secondary authentication.

### Method A: Via the Claude UI

If you are using Claude's web interface for Enterprise or Team plans (or custom connector settings):

1. Open Claude and go to **Settings → Integrations** (or **Connectors** depending on your plan tier).
2. Click **Add MCP Server** or **Add custom connector**.
3. Give the connection a name (e.g., "Zammad Helpdesk").
4. Paste the Truto MCP URL into the Server URL field and click **Add**.

Claude will immediately execute an MCP `initialize` handshake, request `tools/list`, and dynamically load the Zammad tools into the context window.

### Method B: Via Manual Config File (Claude Desktop)

If you are running Claude Desktop locally and want to connect via Server-Sent Events (SSE), you edit your `claude_desktop_config.json` file. 

Add the Truto URL using the `@modelcontextprotocol/server-sse` transport:

```json
{
  "mcpServers": {
    "zammad_helpdesk": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/a1b2c3d4e5f67890"
      ]
    }
  }
}
```

Restart Claude Desktop. The Zammad tools will now appear in the interface when you click the attachment/tool icon.

## Core Zammad MCP Tools for Claude

Truto exposes Zammad resources as standard MCP tools with injected schemas. Query parameters and body parameters share a flat input namespace, and Truto automatically routes them to the correct upstream format. Here are the hero tools available for Zammad.

### Search Zammad Tickets
**Tool Name:** `zammad_tickets_search`
Searches Zammad tickets using Zammad's query string syntax. Returns a list of ticket objects including state, priority, and group assignments.
*Usage Note:* Instruct Claude to use the `expand` parameter if it needs to resolve relation IDs (like `owner_id`) to actual user records in a single call.

> "Claude, search Zammad for all open tickets assigned to the 'Database Ops' group that contain the keyword 'deadlock' in the title."

### Create a Zammad Ticket
**Tool Name:** `create_a_zammad_ticket`
Creates a new ticket in Zammad. You must supply at least a title, group, and customer.
*Usage Note:* The tool allows passing an optional initial article (the first comment or email body). Claude can use this to generate a complete ticket including the user's initial description in one pass.

> "Create a new high-priority Zammad ticket for customer.support@example.com in the 'Network Operations' group. Set the title to 'VPN Gateway Failure' and include an initial article detailing the error logs."

### Update a Zammad Ticket by ID
**Tool Name:** `update_a_zammad_ticket_by_id`
Modifies an existing ticket. This is used to change states (e.g., open to closed), adjust priority, or append new articles to the thread.
*Usage Note:* When updating states, Claude must know the valid state IDs for your Zammad instance.

> "Update ticket #59302. Change its state to 'closed' and add an internal note saying 'Resolved via database index rebuild.'"

### Get a Single Zammad Ticket Article
**Tool Name:** `get_single_zammad_ticket_article_by_id`
Retrieves the detailed content of a specific article (message) within a ticket, including sender information, internal visibility flags, and attachment metadata.
*Usage Note:* Critical for allowing Claude to read long conversation threads and summarize support history.

> "Fetch article ID 84920 from ticket #59302 and summarize the customer's reproduction steps for the bug."

### Search Zammad Users
**Tool Name:** `zammad_users_search`
Searches the Zammad user directory by query string. Returns user IDs, roles, organizations, and contact details.
*Usage Note:* Claude should run this before creating a ticket if it only has a user's name, as ticket creation requires a valid `customer_id`.

> "Find the Zammad user ID for 'Sarah Connor' so we can assign her as the customer on this new hardware request."

### List All Zammad SLAs
**Tool Name:** `list_all_zammad_slas`
Retrieves all Service Level Agreement configurations, including first response times, solution times, and associated calendar IDs.
*Usage Note:* Useful for auditing workflows where Claude checks if current ticket queues are at risk of breaching compliance times.

> "List all active SLAs in Zammad and tell me the required first response time for the 'Enterprise Critical' condition."

*Note: This is a curated selection of tools. For the complete list of available operations and their exact schemas, see the [Zammad integration page](https://truto.one/integrations/detail/zammad).* 

## Workflows in Action

When Claude is equipped with these tools, it transforms from a text generator into a capable IT automation agent. Here are real-world sequences.

### Workflow 1: Ticket Triage and Escalation
**Persona:** IT Support Lead

> "Review all 'new' tickets from the last 4 hours. If any mention 'server down' or '502 bad gateway', escalate their priority, reassign them to the DevOps group, and leave an internal note."

1.  **`zammad_tickets_search`:** Claude queries for tickets with state 'new' within the time window.
2.  **`get_single_zammad_ticket_article_by_id`:** Claude reads the initial articles of the matched tickets to inspect the content.
3.  **`zammad_groups_search`:** Claude looks up the exact ID for the "DevOps" group.
4.  **`update_a_zammad_ticket_by_id`:** Claude loops through the identified high-risk tickets, updating the `group_id`, elevating the `priority_id`, and attaching a new article marked `internal: true`.

```mermaid
sequenceDiagram
    participant User
    participant Claude as Claude Desktop
    participant TrutoMCP as Truto MCP Server
    participant Zammad as Zammad API

    User->>Claude: "Triage new tickets..."
    Claude->>TrutoMCP: Call zammad_tickets_search(query="state:new")
    TrutoMCP->>Zammad: GET /api/v1/tickets/search
    Zammad-->>TrutoMCP: Return tickets
    TrutoMCP-->>Claude: JSON ticket list
    
    loop For each ticket
        Claude->>TrutoMCP: Call get_single_zammad_ticket_article_by_id(id)
        TrutoMCP->>Zammad: GET /api/v1/ticket_articles/{id}
        Zammad-->>TrutoMCP: Return article body
        TrutoMCP-->>Claude: Article text
        
        opt Contains "502"
            Claude->>TrutoMCP: Call update_a_zammad_ticket_by_id(priority, group, note)
            TrutoMCP->>Zammad: PUT /api/v1/tickets/{id}
            Zammad-->>TrutoMCP: 200 OK
            TrutoMCP-->>Claude: Success confirmation
        end
    end
    Claude-->>User: "Triage complete. Escalated 3 tickets to DevOps."
```

### Workflow 2: SLA Violation Auditing
**Persona:** Service Delivery Manager

> "Audit our ticket queue. Compare open tickets against our SLA policies. Identify any tickets that have breached their first response time and generate a summary report grouped by the assigned agent."

1.  **`list_all_zammad_slas`:** Claude pulls down the configured SLA rules (e.g., 2 hours for standard, 30 minutes for urgent).
2.  **`zammad_tickets_search`:** Claude queries for all tickets where `state` is not closed or merged.
3.  Claude internally calculates the time elapsed since `created_at` versus the `first_response_at` timestamp in the ticket payload, comparing it against the SLA rules.
4.  **`list_all_zammad_users`:** Claude fetches the user directory to map `owner_id` values to actual agent names.
5.  Claude formats and outputs the markdown report to the user.

## Security and Access Control

Exposing an enterprise ticketing system to an LLM requires strict governance. Truto MCP servers enforce boundaries at the infrastructure layer, ensuring Claude cannot perform unauthorized actions even if prompted to do so.

*   **Method Filtering:** When creating the MCP server, you can restrict it entirely to `read` operations. If a user attempts to trick Claude into deleting a user via prompt injection, the `delete` tool simply will not exist in the server's capabilities.
*   **Tag Filtering:** You can group Zammad resources by functional area using `config.tool_tags`. For example, generating a server with `tags: ["support"]` ensures Claude only sees ticket tools and cannot access organization or role administration endpoints.
*   **Require API Token Auth:** By enabling `require_api_token_auth: true`, possession of the MCP URL is no longer sufficient. The MCP client must also pass a valid Truto API token in the `Authorization` header, enforcing identity-based access control.
*   **Time-to-Live (TTL):** Setting `expires_at` during server creation guarantees that the AI agent's access is revoked automatically. Truto handles the cleanup of the database records and KV edge tokens via scheduled durable alarms.

## Moving Past Manual Support Workflows

Building AI agents that interact with Zammad shouldn't mean wrestling with the nuances of its REST API, hunting down `state_type_ids`, or building custom JSON-RPC routers. By using a managed MCP server, you decouple the complexity of integration from the intelligence of your AI.

With Truto, Claude dynamically understands your Zammad environment based on real-time documentation schemas. When Zammad updates its endpoints, Truto handles the schema translation - meaning your AI workflows keep running without code changes. Focus on designing intelligent support automations, and let the MCP layer handle the plumbing.
