IBX-11536: MCP Servers#3106
Conversation
mcp_guide.md heading `# Model Context Protocol and [[= product_name_base =]] MCP Servers` was used as-is, without the variable replaced.
Apply SonarCloud Code Analysis warning's suggestion
# Conflicts: # docs/product_guides/product_guides.md # mkdocs.yml
|
code_samples/ change report
|
| <base href="../"> | ||
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> |
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> | ||
| <script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script> |
| <base href="../"> | ||
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> |
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> | ||
| <script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script> |
| <base href="../"> | ||
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> |
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> | ||
| <script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script> |
| <base href="../"> | ||
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> |
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> | ||
| <script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script> |
| <base href="../"> | ||
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> |
| <link rel="icon" href="images/favicon.png"/> | ||
| <link rel="stylesheet" href="css/base.css"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"> | ||
| <script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script> |
|
There was a problem hiding this comment.
Just a partial review for now, starting with https://ez-systems-developer-documentation--3106.com.readthedocs.build/en/3106/ai/mcp/mcp_config/#example I've just read quickly till the end to get the general idea.
The most important comment is this one:
https://github.com/ibexa/documentation-developer/pull/3106/changes#r3219594627
I like the content, though at the end I felt it was more of a draft, not always following how we write.
Two additional comments:
- let's choose AI agents or AI applications and use them consistency
- Let's use JWT authentication, not just "JWT"
| @@ -0,0 +1,26 @@ | |||
| <?php declare(strict_types=1); | |||
|
|
|||
| namespace App\mcp\src\Command; | |||
| #!/bin/bash | ||
| set -e | ||
|
|
||
| baseUrl='http://localhost' # Adapt to your test case |
There was a problem hiding this comment.
Just reading the example for now, is this SiteAccess-aware? How do I pass it - in the URL or with some header, like in REST?
| - AI Actions guide: ai_actions/ai_actions_guide.md | ||
| - Configure AI Actions: ai_actions/configure_ai_actions.md | ||
| - Extend AI Actions: ai_actions/extend_ai_actions.md | ||
| - AI: |
There was a problem hiding this comment.
Suggestion: in my mind, MCP servers is a kind of API (for AI, but an API nonetheless). What you think about adding a MCP entry to the cards in https://doc.ibexa.co/en/5.0/api/api/ ? Just for discoverability.
| - MCP Servers: | ||
| - MCP Servers: ai/mcp/mcp.md | ||
| - MCP Servers guide: ai/mcp/mcp_guide.md | ||
| - MCP Servers config: ai/mcp/mcp_config.md |
| As site administrator, be aware of this when giving editors access to the Page Builder features, and limit that access only to trusted editors. | ||
| You can [limit access to specific blocks per content type]([[= user_doc =]]/content_management/configure_ct_field_settings/#default-configuration-of-pages) by defining which page blocks are available to editors. | ||
|
|
||
| ### Activate JWT for MCP, Rest, or GraphQL |
There was a problem hiding this comment.
| ### Activate JWT for MCP, Rest, or GraphQL | |
| ### Activate JWT for MCP, REST, or GraphQL |
| - `meta` (optional): a rarely used free-form array for any additional metadata - for more information, see [`_meta` specification](https://modelcontextprotocol.io/specification/latest/basic/index#_meta) | ||
|
|
||
| An `arguments` array is automatically built from the function arguments and their types. | ||
| Those prompt arguments must be strings (to respect the [`GetPromptRequestParams` schema](https://modelcontextprotocol.io/specification/latest/schema#getpromptrequestparams)). |
There was a problem hiding this comment.
| Those prompt arguments must be strings (to respect the [`GetPromptRequestParams` schema](https://modelcontextprotocol.io/specification/latest/schema#getpromptrequestparams)). | |
| The prompt arguments must be strings (to respect the [`GetPromptRequestParams` schema](https://modelcontextprotocol.io/specification/latest/schema#getpromptrequestparams)). |
| - `meta` (optional): a rarely used free-form array for any additional metadata - for more information, see [`_meta` specification](https://modelcontextprotocol.io/specification/latest/basic/index#_meta) | ||
|
|
||
| An `arguments` array is automatically built from the function arguments and their types. | ||
| Those prompt arguments must be strings (to respect the [`GetPromptRequestParams` schema](https://modelcontextprotocol.io/specification/latest/schema#getpromptrequestparams)). |
There was a problem hiding this comment.
Not sure if I understand it correctly - a function defined as a Prompt might only have string arguments?
| It uses files for both discovery cache and session storage. | ||
| (Redis/Valkey would probably be better for session storage in production, but file storage is easier for this example and testing.) | ||
|
|
||
| In a new `config/packages/mcp.yaml` file, the configuration of the MCP server: |
There was a problem hiding this comment.
| In a new `config/packages/mcp.yaml` file, the configuration of the MCP server: | |
| In a new `config/packages/mcp.yaml` file, define a new MCP server for the `default` repository and assign it to all SiteAccesses: |
| #[McpPrompt( | ||
| servers: ['example'], | ||
| name: 'greet', | ||
| description: 'Prompt to be greeted by the `greet` tool', |
There was a problem hiding this comment.
| description: 'Prompt to be greeted by the `greet` tool', | |
| description: 'Prompt to invoke the `greet` tool', |
| It's even possible to use it as a DDEV add-on with [`craftpulse/ddev-mcp-inspector`](https://github.com/craftpulse/ddev-mcp-inspector). | ||
| You still need to ask for a JWT token through REST or GraphQL, and use it in the MCP Inspector configuration to connect to your server. | ||
|
|
||
| #### JWT token obtained through REST documentation |
There was a problem hiding this comment.
I feel this part could be extracted to https://doc.ibexa.co/en/5.0/api/rest_api/rest_api_authentication/#usage-example and https://doc.ibexa.co/en/5.0/api/graphql/graphql/#jwt-authentication ?
I mean, let's expand the current sections and link to them, instead of duplicating it





Document built-in MCP Servers and how to create custom ones.
Also enhance the JWT documentation.
Related PRs:
vale: ibexa/vale-styles#40Checklist