Aller au contenu principal
Jahia Store
FR

Jahia MCP Community Server

community
Télécharger 1.0.4

Informations

Identifiant du module
jahia-mcp-community-server
Identifiant de groupe
org.jahia.community
Statut
community
Catégorie
Content Features
Auteur
Florent BOURASSE
Site web du développeur
http://www.jahia.com
Nécessite Jahia
8.2.2.1
Mis à jour
2026-09-07
Source
scm:git:git@github.com:Jahia/jahia-mcp-community-server.git
Étiquettes
  • ai
  • mcp

An OSGi bundle that exposes Jahia's GraphQL API as an [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server, enabling AI assistants such as Claude to query and mutate/query Jahia content directly.

Dépendances

Modules dépendants

Aucun module n'en dépend.

Versions

🔒 Security release

Fixes a whitelist bypass in the MCP GraphQL gate — GHSA-9vrc-45qw-x759 (CVSS 6.5, CWE-863 / CWE-1286).

Upgrade if you have configured a whitelist. Deployments running the shipped default (whitelist= empty, documented as allow-all) are not affected — there was no restriction to bypass.

What was wrong

McpServlet.checkAccess treated a document its extractor could not walk as permitted. extractFieldPaths returned an empty Set for anything the hand-written scanner failed on, and checkAccess read empty as "this document requests nothing I need to police" → allow.

A single leading comma — an ignored token in the GraphQL grammar — was enough:

query,{ jcr { nodeByPath(path:"/") { name } } }

 

With whitelist = ["currentUser"], the same operation without the comma is refused; with it, the operation executed and returned data.

The fix

The hand-written scanner is replaced by graphql.parser.Parser and an AST walk:

  • Parse failures now deny. InvalidSyntaxException, or any ParserOptions guard trip (max tokens / characters / rule depth), fails closed — consistent with the named-fragment branch that already did.
  • Every operation is inspected, not just the first. A multi-operation document no longer depends on operationName not being forwarded for its safety.
  • Parse errors are not echoed back to the caller; the parser message stays in the audit log.

Whitelist matching, the depth cap and the __-introspection filter are unchanged — the bug was never there. 15 now-dead lexer helpers were removed (McpServlet.java: 1113 → 990 lines).

No configuration change is required. Behaviour for valid documents is unchanged, including commas as ordinary separators, # inside string arguments, aliases, inline fragments and introspection-only queries.

Verification

  • 78 unit tests — the 11 new arms fail against the pre-fix code and pass after; three false-positive guards pass against both, confirming the gate did not simply start refusing everything
  • 49 Cypress e2e tests against a live Jahia, including 11 in 06-mcpWhitelistEnforcement covering every input above
  • SonarQube quality gate green, zero open issues

Compatibility

No new dependency. graphql-java was already provided, and the bundle already wired graphql.annotations.annotationTypes; bnd adds graphql.parser and graphql.language at [21.5,22).

Full changelog: 1_0_3...1_0_4

Nécessite Jahia 8.2.2.1Mis à jour 2026-09-07

Tag: https://github.com/Jahia/tomcat-log-provider/releases/1_0_3

Full changelog: https://github.com/Jahia/tomcat-log-provider/compare/1_0_2...1_0_3

What's changed

Standardised module identity — all identifiers now consistently use the community-mcp prefix, matching the module's artifact ID and making it unambiguous alongside other Jahia community modules.

⚠️ Breaking changes

Endpoint moved

/modules/mcp → /modules/community-mcp

Update the url in your MCP client config (~/.claude/settings.json or equivalent):

{
  "mcpServers": {
    "jahia-mcp": {
      "type": "http",
      "url": "http://localhost:8080/modules/community-mcp",
      "headers": {
        "authorization": "APIToken <your-token>"
      }
    }
  }
}

API token scope renamed

mcp → community-mcp

Existing tokens will stop working. Regenerate them with scopes graphql and community-mcp:

mutation {
    admin {
        personalApiTokens {
            createToken(name: "my-mcp-token", scopes: ["graphql", "community-mcp"])
        }
    }
}

Permission renamed

The OSGi API permission is now community-mcp (was mcp). Custom role grants referencing the old permission name must be updated.

Configuration files renamed

No action needed for fresh installs. If you have customised these files, rename them manually:

Old name New name
org.jahia.bundles.api.authorization-mcp.yml org.jahia.bundles.api.authorization-community-mcp.yml
org.jahia.modules.PersonalApiToken-mcp.cfg org.jahia.modules.PersonalApiToken-community-mcp.cfg
Nécessite Jahia 8.2.2.1Mis à jour 2026-04-28
Nécessite Jahia 8.2.2.1Mis à jour 2026-04-06