Liferay Legacy MCP docs

Home/Marketplace Apps/Liferay Legacy MCP/Installing

Checking the Installation

Three checks tell you the server works. If one fails, the fixes below cover the usual causes.

  1. Check 1: The Server Connects
  2. Check 2: A Read
  3. Check 3: A Write (If Turned On)
  4. If Something’s Wrong
    1. Every Call Fails With 403
    2. The Server Reports invalid_client
    3. The Write Tools Show as Unavailable
    4. The Release Shows as Unknown
  5. Related Information

Check 1: The Server Connects

Ask the AI assistant “What Liferay server are you connected to?” get_server_info answers with:

  • the Liferay release, for example Liferay Digital Experience Platform 2025.Q1.29;
  • the connection, OAuth 2 client credentials when the routes are used;
  • the write mode;
  • each tool, and whether this Liferay supports it.

Check 2: A Read

Ask “List the sites you can see”, then “Find the five most recently modified articles in my-site.” The assistant calls list_sites and search_content, and the results match what the service user can see in Liferay.

Check 3: A Write (If Turned On)

Ask “Create a draft article in my-site titled MCP test.” The assistant shows a preview and asks you to confirm. Once confirmed, the draft appears in Content & Data → Web Content, created by the service user. Delete it afterwards.

If Something’s Wrong

Every Call Fails With 403

  • The service user still has to verify its email or change its password. See Steps 1 and 2 of Creating the Service User.
  • The service user doesn’t have the MCP OAuth Client role, so Liferay won’t issue it a token.

The Server Reports invalid_client

The routes folder holds old credentials, for example after the client extension was deployed again. Copy the liferay-mcp-oauth folder again, and restart the server.

The Write Tools Show as Unavailable

The OAuth application’s scopes are read-only, or the routes folder has no scopes file. Check the scopes, then restart the server.

The Release Shows as Unknown

The server reads the release from Liferay’s Liferay-Portal response header, which names it only with the portal property http.header.version.verbosity=full. Nothing else depends on it. On Liferay SaaS, where portal properties can’t be set, it stays unknown.