[xwiki-contrib/ai-llm] 2437cb: LLMAI-151: Add admin UI for MCP server
Branch: refs/heads/main Home: https://github.com/xwiki-contrib/ai-llm Commit: 2437cbd6a343b5d2f3b94312fc7ba021e0c92b7d https://github.com/xwiki-contrib/ai-llm/commit/2437cbd6a343b5d2f3b94312fc7ba... Author: Paul Pantiru <[email protected]> Date: 2026-06-26 (Fri, 26 Jun 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPResource.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPConfigChangeEventListener.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfiguration.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManager.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/script/BulkResult.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptService.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/resources/META-INF/components.txt M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPResourceTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPConfigChangeEventListenerTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfigurationTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManagerTest.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptServiceTest.java M application-ai-llm-mcp/application-ai-llm-mcp-ui/pom.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfig.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigClass.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/WebHome.xml Log Message: ----------- LLMAI-151: Add admin UI for MCP server * Per-wiki enable gate: the MCP endpoint is disabled by default on every wiki and returns 404 until an admin enables it. The gate is read live in DefaultMCPResource before authentication and fails closed when the config cannot be read, so an unreadable configuration never leaves an endpoint serving. * Farm-installed config UI ({root} namespace) so every wiki - current and future - gets its own MCP admin section with an Enabled switch, server name and description, backed by the AI.MCP.Code.MCPServerConfig class. * Per-wiki server instances: XWikiMCPServerManager builds one MCP server per wiki lazily and caches it, each advertising that wiki's own name (defaulting to the wiki pretty name) and description; the config-change listener now invalidates just the saved wiki's server. * Farm dashboard on the main wiki: a state grid listing every wiki with a checkbox reflecting its real enabled state, applied in one action through the new $services.mcp (MCPFarmScriptService). Each cross-wiki write is gated per wiki by ADMIN rights and protected by a CSRF token and POST-only handler. Commit: 30a603a28f148284630410073cede809cff9d42f https://github.com/xwiki-contrib/ai-llm/commit/30a603a28f148284630410073cede... Author: Paul Pantiru <[email protected]> Date: 2026-06-26 (Fri, 26 Jun 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-api/src/main/java/org/xwiki/contrib/llm/mcp/MCPTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfiguration.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManager.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptService.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/script/MCPToolState.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfigurationTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManagerTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptServiceTest.java M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfig.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigClass.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml Log Message: ----------- LLMAI-151: Add per-wiki tool toggles to the MCP admin UI * Each wiki's MCP admin section gains a category-grouped tool tree to choose which tools its endpoint exposes; the selection saves with the section's existing Save (stored as the enabledTools list property on the config object, a multi-select StaticListClass). * Authoring (write) tools are off by default: MCPTool gains isWrite() (default false), overridden by edit_document and write_document; the default policy enables every non-write tool. * The man tool is always enabled (a mandatory floor), so the effective tool set is never empty and an "uncheck everything" never produces a dead endpoint. * XWikiMCPServerManager registers only the tools enabled for the wiki being built; an empty or unset selection resolves to the default policy. * MCPFarmScriptService exposes getToolStates (to render the tree) and an ADMIN-gated setEnabledTools; saving the config rebuilds that wiki's server. Commit: 77cb4702ce8ab941b9e6e95a1e2c30b61d780757 https://github.com/xwiki-contrib/ai-llm/commit/77cb4702ce8ab941b9e6e95a1e2c3... Author: Paul Pantiru <[email protected]> Date: 2026-06-26 (Fri, 26 Jun 2026) Changed paths: A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentAccess.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentSearch.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPSpaceFilter.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPAccessDeniedException.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPDocumentAccess.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPDocumentSearch.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPGetDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPQueryDocumentsTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfiguration.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPSpaceFilter.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/resources/META-INF/components.txt A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentAccessTest.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentSearchTest.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPSpaceFilterTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPGetDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPQueryDocumentsToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfigurationTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfig.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigClass.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml Log Message: ----------- LLMAI-151: Add per-wiki space whitelist/blacklist to the MCP server * Each wiki's MCP endpoint can restrict which spaces and documents its tools reach: a mode (none/whitelist/blacklist) plus a space list and a document list. A listed space covers its whole subtree (Solr space_prefix); a listed document is matched exactly. * Enforced through two shared doors every document tool routes through: MCPDocumentAccess (resolve + rights + space check + wiki confinement) for get_document/edit_document/write_document, and MCPDocumentSearch (a secure Solr query with the wiki scope and the space filter baked in) for query_documents. XWiki authorization is entity-based and cached with no per-request hook, so this single-door design is the enforceable ceiling; the index collection tools remain governed by collection rights only. * Fails closed on a config-read error for both modes; a legitimately empty or "none" configuration imposes no restriction. A reference resolving into another wiki is rejected so each endpoint only ever serves its own wiki. * Adds an Allow Rendered Content toggle (default on): when off, get_document refuses rendered output, which executes the page's macros with the author's rights and can transitively surface non-listed content through includes. An admin notice points at XWiki rights as the real access boundary, with the space filter and tool toggles narrowing on top of them. Commit: afd9a4bee9032c0ab5d7ef5ec9e657f499b9d340 https://github.com/xwiki-contrib/ai-llm/commit/afd9a4bee9032c0ab5d7ef5ec9e65... Author: Paul Pantiru <[email protected]> Date: 2026-07-01 (Wed, 01 Jul 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml A application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPSpacePickerJSX.xml A application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPSpacePickerSSX.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml Log Message: ----------- LLMAI-151: Add a jsTree space/document picker to the MCP admin UI * The whitelist/blacklist space and document lists are now edited through a checkbox document tree instead of free-text inputs, which also avoids the separator footgun (a space in a page name split the stored value). Checking a space adds a single chip covering its whole subtree; checking individual pages adds one chip each; the chips collapse to the top-checked node and expand back when a sub-page is unchecked, mirroring the platform export tree's model. * Chips carry the submitted values as atomic hidden inputs. On load the saved references re-check the tree through its openTo API so the tree state round-trips with the stored configuration. * Tree navigation is suppressed with the documentTree links="false" option so a click toggles the checkbox instead of following the page link. Commit: 570c42a0c3c1bba32cdfc522bfa81cb733d0a839 https://github.com/xwiki-contrib/ai-llm/commit/570c42a0c3c1bba32cdfc522bfa81... Author: Paul Pantiru <[email protected]> Date: 2026-07-01 (Wed, 01 Jul 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPManTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPManToolTest.java Log Message: ----------- LLMAI-151: Filter the man catalog by the wiki's enabled tool set * The man tool listed every globally-enabled tool regardless of the per-wiki tool toggles, so on a wiki with authoring disabled it still advertised (and served manual pages for) edit_document and write_document even though the endpoint never registered them. It now intersects the tool list with MCPServerConfiguration#getEnabledToolIds for the current wiki - the same filter XWikiMCPServerManager applies at registration - so the catalogue matches the tools the endpoint actually exposes, and man <disabled-tool> reports no manual entry. Commit: 4c1b34be338e2ee228a64a80a49ef330e68b678f https://github.com/xwiki-contrib/ai-llm/commit/4c1b34be338e2ee228a64a80a49ef... Author: Paul Pantiru <[email protected]> Date: 2026-07-01 (Wed, 01 Jul 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPGetDocumentTool.java Log Message: ----------- [Misc] Clarify MCP get_document HTML output and edit_document man page - Rewrite the rendered format="html" banner and its description/man-page mentions to state that presentation (CSS classes, inline styles, colors, layout) is stripped and not browser-faithful, so an agent does not use it to verify styling changes; drop the misleading "cleaned" wording. - Remove the empty-old_string "Create:" example and its parenthetical from the edit_document man page; document creation stays via write_document. Commit: bf87bf68ceb2b798745226fdde4f1c80822d103c https://github.com/xwiki-contrib/ai-llm/commit/bf87bf68ceb2b798745226fdde4f1... Author: Paul Pantiru <[email protected]> Date: 2026-07-02 (Thu, 02 Jul 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentAccess.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentSearch.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPSpaceFilter.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPWikiReach.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPConfigChangeEventListener.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPDocumentSearch.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPGetDocumentTool.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPListWikisTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPQueryDocumentsTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfiguration.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPSpaceFilter.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPToolSupport.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPWikiReach.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManager.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptService.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/resources/META-INF/components.txt M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentAccessTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPDocumentSearchTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/DefaultMCPSpaceFilterTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPConfigChangeEventListenerTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPEditDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPGetDocumentToolTest.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPListWikisToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPQueryDocumentsToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPServerConfigurationTest.java A application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPWikiReachTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/MCPWriteDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/XWikiMCPServerManagerTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/script/MCPFarmScriptServiceTest.java M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigClass.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPSpacePickerJSX.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml Log Message: ----------- LLMAI-151: Add admin UI for MCP server * Add cross-wiki reach (source-governs): a reach-enabled endpoint can search, read and write across every wiki of the farm using its own tool set and space filter, bounded only by the acting user's document rights. Add the list_wikis tool and a wiki parameter/prefix, and surface the reach grant as a farm-admin-only column in the dashboard. * Make the cross-wiki tool definitions reach-conditional so a reach-off endpoint does not advertise cross-wiki options. * Improve agent-facing messages: cap query_documents results at 25 with a clamp notice, normalize the author filter so a bare user name matches, echo the active filters on an empty result, and suggest the space home page on a not-found reference. Commit: 2f8b9752520a7ca4d41008e5655fc298876f9855 https://github.com/xwiki-contrib/ai-llm/commit/2f8b9752520a7ca4d41008e5655fc... Author: Paul Pantiru <[email protected]> Date: 2026-07-02 (Thu, 02 Jul 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigClass.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPServerConfigSheet.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/MCPSpacePickerSSX.xml M application-ai-llm-mcp/application-ai-llm-mcp-ui/src/main/resources/AI/MCP/Code/Translations.xml Log Message: ----------- LLMAI-151: Group the space filter under a collapsible "Additional filters" section * Wrap the per-wiki Space access controls in a collapsed-by-default panel (bordered, grey summary bar with a disclosure arrow) so the config form leads with the common settings. * Demote Space access to a subsection under the group. * Clarify the wording: the space filter scopes what the tools return on top of the user's rights; it is not an access-control boundary. Compare: https://github.com/xwiki-contrib/ai-llm/compare/1e3281ab488e...2f8b9752520a To unsubscribe from these emails, change your notification settings at https://github.com/xwiki-contrib/ai-llm/settings/notifications
participants (1)
-
XWiki Notifications