Repository navigation
Conversation
ArtifactsProduced during runtime |
Restructure of system/api.rst to mirror the tabbed settings page of 7.3 (api restructure is part of the same feature branch): H2 Token access with H3 Token Access, H3 Password Access and H3 MCP Server, H2 OAuth. The old H2 Authentication Methods is folded into the intro as a general overview that names the three methods without claiming to mirror the page structure. Claims and their anchors, all from the feature branch origin/private/dk/issue/6519/mcp-server-agents-work-on-zammad-tickets-from-their-own-ai-client of zammad/zammad (7.3): - Setting api_mcp_access, area API::Base, default off: db/seeds/settings.rb (title 'MCP server'), db/migrate/20261103120000_add_mcp_server.rb - Request refused while off, whatever the token: mcp_controller.rb (authenticate_with_personal_access_token!, switched-off message before the token check) - Personal access tokens are the only authentication, Token Access dependency: mcp_controller.rb delegates to application_controller/authenticates.rb#authentication_check_api_token, which refuses when api_token_access is off - The client does what the token and its owner may: Service::AI::Tool::Runtime :Router.offered? narrows by token (lib/user_info.rb#with_token) and all 26 MCP tools carry permission 'ticket.agent' - The page shows <fqdn>/mcp and the Claude Code example: app/views/api /access.jst.eco (new file on the feature branch) - FQDN, alternative FQDN and loopback hosts, browser origins from other origins refused: app/services/service/mcp_server/addresses.rb - Approval with text and recipients shown, form elicitation of MCP revision 2026-07-28, nothing sent without or with an unshown form: app/services/service/mcp_server/confirmation.rb (NOT_CONFIRMED, form capability check), call_tool.rb (elicitation/create, spec suggestion for every result of 2026-07-28), create_article/preparation.rb (confirmation preview and required: outbound || !internal) Heading name "MCP Server" and no "Tab" in headings per review in zammad-admin-documentation#1372. make gettext ran with the conda env, the committed locale/admin-docs.pot is its output. The tool table lists what the client gets, with the anchors of every row: - The 26 rows are the 26 tool classes in app/services/service/ai/tool/*.rb, each declaring offered_in :mcp and permission 'ticket.agent'; the Router discovers them without a registry (runtime/router.rb) and sorts by tool_name, which is the alphabetical order of the table - read/write per row is the tool's effect line in its own class (9 write: add _internal_note, create_article, create_ticket, link_knowledge_base_answer, link_tickets, save_shared_draft, send_shared_draft, set_ticket_tags, update_ticket; 17 read) - Each row's description is a summary of that class's own description string (written for the model), reduced to what an admin deciding on the toggle and the token needs - The three knowledge base tools appear only with an active knowledge base: get_knowledge_base_answer.rb:32, link_knowledge_base_answer.rb:43 and search_knowledge_base.rb:126 return ::KnowledgeBase.active.exists? (app/models/knowledge_base.rb:90) Table shape follows manage/roles/permissions.rst (list-table, header row, widths). Cell prose is a paragraph, not a "|" line block, so each description is one msgid instead of one per wrapped line.
…on develop The page was written against private/dk/issue/6519/... (2026-11-04), the feature landed on develop as e261524200 with follow-up changes. Claims and their anchors, all from origin/develop: - A client that cannot show the confirmation form is not refused: the confirmation returns without asking when the client has no form capability, and the tool descriptions tell the client to use its own tool approval. app/services/service/mcp_server/confirmation.rb (execute, form?), app/services/service/ai/tool/create_article.rb (description) - Zammad asks in the conversation for two changes instead: replacing a shared draft that is already there and closing a ticket with an open checklist. ai/tool/save_shared_draft.rb:36 (replace_shared_draft_id), ai/tool/update_ticket.rb:75 (close_with_open_checklist) - A declined form still sends nothing and lets the client offer the shared draft. ai/tool/create_article/writing.rb:66-71 - The page shows the address of the server and the example with the HTTP type and the FQDN of the Base settings. app/assets/javascripts/app/views/api/access.jst.eco - A loopback address includes ::1. mcp_server/addresses.rb:6 - The second address is labelled Alternative fully qualified domain name. db/seeds/settings.rb:339 - get_ticket_articles reads chosen messages with their text. ai/tool/get_ticket_articles.rb (description) The tool table itself is unchanged: all 26 tools are offered over MCP, with the same effect and the ticket.agent permission.
ralf401
force-pushed
the
rsc/fixes/1372
branch
from
November 10, 2026 13:57
90593c9 to
99939fb
Compare
The page repeated the example of the settings screen, which spells out one vendor's CLI. The server is plain MCP Streamable HTTP at /mcp with a personal access token, so the docs state what a client needs and leave the client open; the settings section now only says that the screen shows the address and an example. config/routes/mcp.rb (POST /mcp), app/controllers/mcp_controller.rb (bearer token), app/assets/javascripts/app/views/api/access.jst.eco (the example on the page).
Member
|
Reviewed at
The client setup example, compatibility wording and channel-specific HTML limits belong in the linked user guide; I am recording those on zammad/zammad-user-documentation#671 and the website MR so the three versions stay consistent. The documentation build passes. This was a source/content review; rendered layout and a real client connection were not tested. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Restructure of system/api.rst to mirror the tabbed settings page of 7.3 (api restructure is part of the same feature branch): H2 Token access with H3 Token Access, H3 Password Access and H3 MCP Server, H2 OAuth. The old H2 Authentication Methods is folded into the intro as a general overview that names the three methods without claiming to mirror the page structure. Claims and their anchors, all from the feature branch
origin/private/dk/issue/6519/mcp-server-agents-work-on-zammad-tickets-from-their-own-ai-client of zammad/zammad (7.3):
Heading name "MCP Server" and no "Tab" in headings per review in zammad-admin-documentation#1372. make gettext ran with the conda env, the committed locale/admin-docs.pot is its output.
The tool table lists what the client gets, with the anchors of every row:
Table shape follows manage/roles/permissions.rst (list-table, header row, widths). Cell prose is a paragraph, not a "|" line block, so each description is one msgid instead of one per wrapped line.