Skip to content

docs: update MCP server docs for 6.7.17 - #2646

Draft
Björn Meyer (BrocksiNet) wants to merge 15 commits into
mainfrom
docs/mcp-iteration-4
Draft

Björn Meyer (BrocksiNet) wants to merge 15 commits into
mainfrom
docs/mcp-iteration-4

Conversation

@BrocksiNet

@BrocksiNet Björn Meyer (BrocksiNet) commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Documents the developer- and operator-facing changes of MCP Iteration 4 (epic shopware/shopware#20866) for 6.7.17.0:

  • MCP clients can log in to /api/_mcp with OAuth: discovery through RFC 9728 and RFC 8414 metadata at path-suffixed well-known URIs, tokens bound to the MCP resource (RFC 8707) that work only on /api/_mcp, iss in the authorization response (RFC 9207).
    Operators register clients in shopware.api.oauth_clients; there is no dynamic client registration.
    The pages cover redirect rules, the Claude Code setup with --callback-port, subdirectory rewrites, what an OAuth login may call (the approving user's allowlist, administrators unrestricted), and troubleshooting, including the misleading invalid_target from an Administration built before the change.
  • Sessions on /api/_mcp are bound to the principal that opened them; another principal gets 404.
  • The mcp_admin_api rate limit counts per user or integration instead of per access token.
  • Tool results take their format from the negotiated protocol revision, no longer from the v6.8.0.0 feature flag.
    Since 2025-06-18 the text is the plain data and structuredContent carries the metadata for the model under _meta; before 2025-06-18 the deprecated {"success": …} envelope stays.
    A table lists which part of the result Claude Code, Codex, VS Code, Cursor, Gemini CLI and ChatGPT pass to the model.
  • Large results of every tool, including app tools, are stored and linked; resources/read returns the format of the call that stored them.
  • The PHPStan privilege rule requires exactly one of #[McpToolRequires] and the new #[McpToolRequiresNoPrivilege]; the Store API rule follows inherited methods.
  • Strict Choice fields accept values from enum providers, which is how extensions keep their own category types now that category.type is strict.

Merge order: this branch builds on #2571 (6.7.16 MCP update), because both rewrite the same large-result paragraphs, so basing it on main would conflict.
Until #2571 is merged, this PR also shows its commits; only the last two commits belong here.
Merge it after #2571 and after the code PRs below.

Related links

Checklist

  • I reviewed affected links, code samples, and cross-references, including PageRef references where relevant.
  • I added or updated redirects in .gitbook.yaml if pages were moved, renamed, or deleted.
  • I updated .wordlist.txt (and sorted it) if spellcheck flags new legitimate terms.
  • Any required dependent changes in downstream modules have already been merged and published.
  • This pull request is ready for review.

Notes

The code PRs are drafts, so this describes them as they are now.
Open points that may change the text:

Cover symfony/mcp-bundle 0.13, connect-time toolset selection, 401 on
OAuth errors, the fail-closed MCP allowlist, and entity tool parameter
contracts.
Checked against a trunk lane on mcp-bundle 0.13 / mcp/sdk 0.8.1: the
per-server `cache` recipe puts both stores on Psr16SessionStore with
separate prefixes, sessions survive losing the local cache dir, and a
removed Redis key is refused with "Session not found or has expired."

A recipe that is not picked up leaves the file store running silently,
so add the debug:container check that tells the two apart.

The active session registry that app-driven tools/list_changed
broadcasts fan out to lives in cache.system, which is per server.
Document pointing both registries at the shared pool, and the lock
store they depend on.
The registry is written without a TTL and falls back to the pool's
default_lifetime. It is rewritten on every MCP request, so it outlives
its sessions unless default_lifetime is shorter than session.ttl.
The 6.7.16.0 changes (unset allowlist grants nothing, entity tool
parameter descriptions and criteria errors) move to their own PR,
because 6.7.16.0 is not released yet.
An unset MCP allowlist grants nothing for integrations and non-admin
users (shopware/shopware#20600), and the entity tools describe their
parameters in inputSchema and name rejected criteria elements
(shopware/shopware#20013).
Both endpoints lose their sessions on the update, the Store API services
have direct replacements, the Store API session text no longer claims a
shared store, the tool example documents its parameters, and a missing
bearer token is told apart from an expired one.
# Conflicts:
#	products/tools/mcp-server/troubleshooting.md
# Conflicts:
#	guides/plugins/plugins/mcp-server.md
#	products/tools/mcp-server/configuration.md
#	products/tools/mcp-server/index.md
#	products/tools/mcp-server/intro.md
#	products/tools/mcp-server/tools-reference.md
#	products/tools/mcp-server/troubleshooting.md
Cover the MCP Iteration 3 changes merged into shopware/shopware trunk:
structuredContent, isError and error codes in tool results, signed
resource_link pointers and the tool result cache TTL, the reserved
discovery group, list change notifications without a session registry,
sliding window rate limits, symfony/mcp-bundle 0.14.1, and deleting
many-to-many links through the mapping entity.

Correct the allowlist upgrade steps, parameter descriptions with
#[Schema], the histogram aggregation type, and the MCP rate limiter
rows in the hosting guide.
Large tool results are stored by the result renderer for every tool,
resources/read returns plain data since protocol 2025-06-18, two PHPStan
rules check MCP tool privileges, and strict Choice fields accept enum
provider values, which makes category.type strict.
@shopware-dev-docs-connector

shopware-dev-docs-connector Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Developer Docs healthcheck

Status: Completed with success.
Repository: shopware/docs
Commit: 20778fa
Preview: https://developer-documentation-aezzt2wai-shopware-frontends.vercel.app
Workflow run: #5804

MCP clients can log in to /api/_mcp with OAuth: discovery documents,
tokens bound to the MCP resource, client registration, redirect rules,
and troubleshooting for the setup. Sessions on /api/_mcp are bound to
their principal, and the Admin API rate limit counts per user or
integration.

Tool results follow the negotiated protocol revision instead of the
v6.8.0.0 feature flag, and the PHPStan privilege rule accepts the new
McpToolRequiresNoPrivilege opt-out.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant