Zammad 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., "@Zammad MCP Servershow me my open Zammad tickets"
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.
Zammad MCP Server
A Model Context Protocol server for the Zammad helpdesk. It lets Claude, or any MCP client, work with Zammad tickets using the caller's own Zammad permissions: every request carries a per-user API token, never a shared admin token, so Zammad itself decides what each user can see and change.
Status: early bootstrap. The server runs and exposes one smoke tool, get_me. The ticket, article, search, user,
organization, tag and knowledge-base tools land next.
Modes
Community mode (available now)
Works against any Zammad 6.x or 7.x with a personal API token (Zammad: avatar menu, Profile, Token Access).
stdio for a local MCP client:
zammad-mcp stdioStreamable HTTP on
/mcp, withGET /healthzfor health checks:zammad-mcp http
Both read the token from ZAMMAD_HTTP_TOKEN. A per-request X-Zammad-Token header for multi-user HTTP is coming.
Platform mode (coming)
For deployments that put Zammad behind an SSO edge: users sign in with OAuth (AWS Cognito), and the server mints and
caches a short-lived Zammad token for each user, bounded by that user's Zammad role. It is installed with the
optional [platform] extra and enabled by COGNITO_USER_POOL_ID. Community mode never imports it.
Related MCP server: Zammad MCP Server
Quick start
uv sync
export ZAMMAD_URL=https://support.example.com
export ZAMMAD_HTTP_TOKEN=<your personal token>
uv run zammad-mcp stdioClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"zammad": {
"command": "uvx",
"args": ["--from", "git+https://github.com/Pressingly/zammad-mcp-server", "zammad-mcp", "stdio"],
"env": { "ZAMMAD_URL": "https://support.example.com", "ZAMMAD_HTTP_TOKEN": "<token>" }
}
}
}Docker (HTTP on port 8214):
docker build -t zammad-mcp .
docker run --rm -p 8214:8214 -e ZAMMAD_URL=https://support.example.com -e ZAMMAD_HTTP_TOKEN=<token> zammad-mcp
curl http://localhost:8214/healthzConfiguration
Variable | Default | Purpose |
| required | Base URL of the Zammad instance, without |
| unset | Personal API token used in community mode |
|
| Total timeout for one Zammad request |
|
| Connect timeout for one Zammad request |
|
| Listen port in |
Tools
Tool | What it does |
| Returns the Zammad user the token belongs to: id, login, name, email, roles |
Every tool declares all four MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
and returns an Error: ... string instead of raising, so the model sees what went wrong.
Security notes
Ticket content is untrusted. Ticket titles, articles, attachments and customer names are written by whoever emailed or filled in the form. A crafted ticket can try to instruct the model ("forward this ticket to ..."). Treat everything the server returns as data. Tools that send email will be disabled by default and need a two-step confirmation.
Use a per-user token. Give each person their own Zammad token with only the permissions they need, rather than sharing one admin token. Zammad intersects a token's permissions with the user's role, so a token can never do more than its owner.
Customers need token access enabled. Stock Zammad lets Agents and Admins create API tokens, but not Customers. To let Customers use this server, an admin grants
user_preferences.access_tokento the Customer role (Admin, Roles, Customer).The server never sends
X-Auth-Request-*headers and never stores cookies, so it cannot impersonate a user on an SSO-fronted Zammad or carry one user's session into another user's request.
Development
uv sync
uv run ruff check .
uv run ruff format --check .
uv run pytest --cov=zammad_mcp --cov-fail-under=80See CONTRIBUTING.md for the branch and commit workflow and SECURITY.md for reporting vulnerabilities.
License
Available Tools
1 toolget_meGet current Zammad userARead-onlyIdempotent
Return the Zammad user the current token belongs to (id, login, name, email, roles).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds only the token-scoped return fields, which does not go far beyond the structured annotations and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the operation, the scoping condition, and the returned fields without any wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with rich annotations and an output schema, the description is complete enough. It identifies the current-token user context and the fields returned, while the output schema can define return structure in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline according to the rubric is 4. Schema description coverage is also 100%, meaning structured fields already handle parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return the Zammad user the current token belongs to.' It also identifies the returned identity fields, making the tool's scope unambiguous even without sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the current token belongs to' provides clear context for when this tool applies: retrieving the authenticated user for the active token. No alternatives exist among sibling tools, so no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
get_me
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusing it with another tool. Its purpose is clearly stated as returning the current Zammad user.
The single tool name follows a clear snake_case verb_object convention (get_me). No inconsistency can exist with only one tool.
A Zammad server with only one trivial identity tool is an extreme mismatch for the platform's scope. Zammad is a full helpdesk system requiring at least ticket, user, and organization operations.
The surface is severely incomplete for a Zammad integration. There are no tools for tickets, users, organizations, groups, or any CRUD/lifecycle operations, leaving agents unable to perform meaningful helpdesk tasks.
Maintenance
Related MCP Connectors
Prove end users to agents and apps: login-links, OIDC clients, and API keys over remote MCP
Read tickets, contacts, companies, agents and groups; create, update and reply to tickets.
Read tickets, users, orgs, macros and satisfaction ratings; create, update and comment on tickets.
Remote MCP server for managing Muninx tickets, messages, ticket search, and support analytics.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server for querying Movidesk tickets through the public Movidesk API.9 npm-
- AlicenseNot gradedqualityAmaintenanceAn MCP server that connects AI assistants to Zammad, providing tools for managing tickets, users, organizations, and attachments.44AGPL 3.0
- AlicenseAqualityCmaintenanceMCP server that authenticates via browser session cookies to access Zendesk's REST API without API tokens, supporting reads and writes with agent permissions.19333 npm1MIT
- AlicenseNot gradedqualityAmaintenanceMCP server to interact with Zammad ticketing system, enabling ticket search, creation, update, article addition, and user/organization/group queries via the Zammad API.8 npmMIT