Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
af76c67
Draft Data Intelligence Layer ToC
adriendupuis Jul 8, 2026
c9bb998
composer.json + ibexa/data-intelligence-layer
adriendupuis Jul 10, 2026
1058cd5
introduce DIL MCP server and tools
adriendupuis Jul 10, 2026
87e63d2
data_intelligence_layer.md: TODO: GraphQL
adriendupuis Jul 10, 2026
9b8af07
composer.json + ibexa/data-intelligence-layer repo
adriendupuis Jul 10, 2026
e89e13c
mcp_*.md: About server service ID
adriendupuis Jul 10, 2026
d8cdfdd
mcp_config.md: More about data_intelligence_layer built-in server
adriendupuis Jul 10, 2026
c986a21
dil_config.md: More about data_intelligence_layer built-in MCP server
adriendupuis Jul 10, 2026
1c02a2c
mcp*.sh: enhance reusability
adriendupuis Jul 10, 2026
255ebdc
Continue DIL MCP server config
adriendupuis Jul 15, 2026
3432118
Start DIL MCP server testing
adriendupuis Jul 15, 2026
90753f1
About `discovery_cache: ~`
adriendupuis Jul 16, 2026
389d0c8
mcp.dil.yaml: use `when@`
adriendupuis Jul 16, 2026
166b8dd
About ibexa.cache_pool
adriendupuis Jul 16, 2026
2478b5d
mcp_config.md
adriendupuis Jul 16, 2026
4b088a1
dil_mcp.md: Fix insert_code → include_code
adriendupuis Jul 16, 2026
79dd74f
dil_mcp.md: Draft an intro
adriendupuis Jul 16, 2026
60f97f9
dil_mcp.md: Format
adriendupuis Jul 16, 2026
01db068
Merge branch '6.0' into data-intelligence-layer
adriendupuis Jul 16, 2026
7163b09
mcp.dil.yaml: Rm property equals to default
adriendupuis Jul 16, 2026
e63e84c
install_with_ddev.md: run Ibexa Messenger
adriendupuis Jul 17, 2026
f3877a9
install_with_ddev.md: Cron
adriendupuis Jul 17, 2026
58fd023
oauth_server.md: Simplify table install with doctrine:query:sql
adriendupuis Jul 17, 2026
ec20277
dil_config.md: Manual install
adriendupuis Jul 17, 2026
54d1c01
dil_config.md: Manual install
adriendupuis Jul 17, 2026
e23365e
content_twig_functions.md: Fix language code
adriendupuis Jul 17, 2026
b32ee4e
install_with_ddev.md: Cron (fix)
adriendupuis Jul 17, 2026
6575f5e
content_twig_functions.md: Format
adriendupuis Jul 17, 2026
27851d9
Merge branch '6.0' into data-intelligence-layer
adriendupuis Jul 17, 2026
dc9588f
Merge branch '6.0' into data-intelligence-layer
adriendupuis Aug 4, 2026
9254cc0
composer.json: Fix syntax after merge
adriendupuis Aug 5, 2026
cbceaec
Merge branch '6.0' into data-intelligence-layer
adriendupuis Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions code_samples/mcp/config/packages/mcp.dil.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
when@dev:
ibexa:
repositories:
default:
mcp:
data_intelligence_layer:
allowed_hosts:
- 'my-ddev-project.ddev.site'
- '127.0.0.1'
when@prod:
ibexa:
repositories:
default:
mcp:
data_intelligence_layer:
allowed_hosts:
- 'admin.example.com'
ibexa:
repositories:
default:
mcp:
data_intelligence_layer:
discovery_cache: ibexa.cache_pool
session:
type: psr16
service: ibexa.cache_pool
prefix: dil_mcp_session_
system:
admin_group:
mcp:
servers:
- data_intelligence_layer
26 changes: 26 additions & 0 deletions code_samples/mcp/mcp-data-intelligence-wrapper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
set -e

export NODE_TLS_REJECT_UNAUTHORIZED=0

baseUrl='http://localhost' # Adapt to your test case
mcpServer="$baseUrl/admin/mcp/data-intelligence"

jwtToken=$(curl -s -X 'POST' \
"$baseUrl/api/ibexa/v2/user/token/jwt" \
-H "X-Siteaccess: admin" \
-H 'Content-Type: application/vnd.ibexa.api.JWTInput+json' \
-H 'Accept: application/vnd.ibexa.api.JWT+json' \
-d '{
"JWTInput": {
"_media-type": "application/vnd.ibexa.api.JWTInput+json",
"username": "admin",
"password": "publish"
}
}' | jq -r .JWT.token)

exec npx -y supergateway \
--streamableHttp "$mcpServer" \
--oauth2Bearer "$jwtToken" \
--header 'Accept-Language: en' \
--logLevel none
8 changes: 7 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@
}
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/ibexa/data-intelligence-layer"
},
{
"type": "composer",
"url": "https://updates.ibexa.co"
}

],
"require": {
"php": "^8.3"
Expand Down Expand Up @@ -103,7 +108,8 @@
"ibexa/fastly": "~6.0.x-dev",
"ibexa/connect": "~6.0.x-dev",
"ibexa/connector-qualifio": "~6.0.x-dev",
"ibexa/design-system-twig": "~6.0.x-dev"
"ibexa/design-system-twig": "~6.0.x-dev",
"ibexa/data-intelligence-layer": "~6.0.x-dev"
},
"scripts": {
"fix-cs": [
Expand Down
16 changes: 16 additions & 0 deletions docs/ai/mcp/mcp_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@
php bin/console debug:router --siteaccess=<siteaccess> ibexa.mcp`
```

### Built-in MCP servers

Some MCP servers are already defined on default installation.

- `data_intelligence_layer` (`/mcp/data-intelligence`) - The [Data Intelligence Layer](data_intelligence_layer.md) MCP server is bundled with tool sets from `Ibexa\Bundle\DataIntelligenceLayer\Mcp\` namespace and expose metrics about content to AI agent TODO: like the Orchestration chat one.

Check notice on line 86 in docs/ai/mcp/mcp_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai/mcp/mcp_config.md#L86

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/ai/mcp/mcp_config.md", "range": {"start": {"line": 86, "column": 127}}}, "severity": "INFO"}
It's enabled by default but not assigned to any SiteAccess and not allowing other hosts than local. For more information, see [DIL MCP server configuration](dil_config.md#mcp-server-configuration).

### MCP server options

| Option | Type | Required | Default | Description |
Expand Down Expand Up @@ -137,6 +144,15 @@
- `list_non_translated_content_ids` - lists IDs of content which have missing translations for a given language code.
- `Ibexa\Mcp\Tool\SeoTools`
- `get_non_seo_content_ids` - returns IDs of content items that are missing SEO optimization (no meta title tag). Useful for identifying content that needs SEO attention.
- `Ibexa\Bundle\DataIntelligenceLayer\Mcp\MetricDiscoveryTools`
- `dil_discover_metrics` - TODO
- `Ibexa\Bundle\DataIntelligenceLayer\Mcp\MetricReaderTools`
- `dil_get_metric` - TODO
- `dil_list_entity_metrics` - TODO
- `dil_query_metrics` - TODO
- `dil_count_metrics` - TODO
- `dil_get_translation_backlog` - TODO
- `dil_get_translation_subtree_coverage` - TODO

``` yaml hl_lines="5-7"
[[= include_code('code_samples/mcp/mcp.matrix.yaml', 4, 7) =]]
Expand Down
6 changes: 6 additions & 0 deletions docs/ai/mcp/mcp_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,9 @@

MCP servers are defined specifically for each [repository](repository_configuration.md) and assigned to individual [SiteAccesses](siteaccess.md) scopes.
This way you can build flexible configurations that match different contexts.

## Built-in MCP servers

### DIL MCP server

Check notice on line 46 in docs/ai/mcp/mcp_guide.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/ai/mcp/mcp_guide.md#L46

[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings
Raw output
{"message": "[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings", "location": {"path": "docs/ai/mcp/mcp_guide.md", "range": {"start": {"line": 46, "column": 5}}}, "severity": "INFO"}

The [Data Intelligence Layer](data_intelligence_layer.md) MCP server is an already set up server that expose tools to access metrics about content so an AI agent can work on content quality or translation coverage.
4 changes: 2 additions & 2 deletions docs/ai/mcp/mcp_usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ The server:
Filesystem storage is convenient for the sake of this example and for testing.
For production, it is recommended that you use Redis or Valkey to share cache among the cluster and improve performance.

For development, you can set `discovery_cache: ~` to avoid clearing the cache after each change.
This example uses the filesystem storage to illustrate that you have to clear the cache pool to refresh the available capabilities, exactly as when deploying into production.
For development, you can set `discovery_cache: ~` to avoid clearing the cache after each change.
This example uses the filesystem storage to illustrate that you have to clear the cache pool to refresh the available capabilities, exactly as when deploying into production.

In a new `config/packages/mcp.yaml` file, define a new MCP server for the `default` repository and assign it to all SiteAccesses:

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
description: TODO.
month_change: true
---

# Data Intelligence Layer

Check notice on line 6 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L6

[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings
Raw output
{"message": "[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 6, "column": 3}}}, "severity": "INFO"}

The Data Intelligence Layer (DIL) provides content metrics.

[[= cards([
"content_management/data_intelligence_layer/dil_guide",
"content_management/data_intelligence_layer/dil_config",
]) =]]

TODO:

Check notice on line 16 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L16

[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.
Raw output
{"message": "[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 16, "column": 1}}}, "severity": "INFO"}
- Product guide
- Install & Config
- User doc?

Check notice on line 19 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L19

[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.
Raw output
{"message": "[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 19, "column": 1}}}, "severity": "INFO"}
- API:

Check notice on line 20 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L20

[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.
Raw output
{"message": "[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 20, "column": 1}}}, "severity": "INFO"}
- PHP API

Check notice on line 21 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L21

[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.
Raw output
{"message": "[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 21, "column": 1}}}, "severity": "INFO"}
- REST API
- GraphQL API

Check notice on line 23 in docs/content_management/data_intelligence_layer/data_intelligence_layer.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/data_intelligence_layer.md#L23

[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.
Raw output
{"message": "[Ibexa.Lists] Verify list formatting: Full sentences should start with uppercase and end with a period. Sentence fragments should start with lowercase and have no period.", "location": {"path": "docs/content_management/data_intelligence_layer/data_intelligence_layer.md", "range": {"start": {"line": 23, "column": 1}}}, "severity": "INFO"}
- MCP tools
- Extend
49 changes: 49 additions & 0 deletions docs/content_management/data_intelligence_layer/dil_config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
description: TODO.
month_change: true
---

# Data Intelligence Layer configuration

Check notice on line 6 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L6

[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings
Raw output
{"message": "[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 6, "column": 3}}}, "severity": "INFO"}

## Install

TODO: How is it packaged? Is it installed within regular edition?

```bash
composer require ibexa/data-intelligence-layer
php bin/console doctrine:query:sql "$(php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/data-intelligence-layer/src/bundle/Resources/config/schema.yaml)"
php bin/console doctrine:query:sql "$(php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/data-intelligence-layer/src/bundle/Resources/config/schema.translation.yaml)"
php bin/console ibexa:dil:translation:backfill-baseline
```

## Background tasks

Metric data are computed as a [background task using Ibexa Messenger](background_tasks.md), so, make sure it's running.

Check notice on line 21 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L21

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 21, "column": 13}}}, "severity": "INFO"}

Check notice on line 21 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L21

[Ibexa.ByUsing] Prefer 'by using' or 'with' to plain 'using'.
Raw output
{"message": "[Ibexa.ByUsing] Prefer 'by using' or 'with' to plain 'using'.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 21, "column": 43}}}, "severity": "INFO"}

Check failure on line 21 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L21

[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'
Raw output
{"message": "[Ibexa.VariablesGlobal] Use global variable '[[= product_name_base =]]' instead of 'Ibexa'", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 21, "column": 54}}}, "severity": "ERROR"}

You can set the interval between computations of metrics with the following parameters:

- `ibexa.data_intelligence_layer.freshness.default_interval_days`: Number of days between computation of the metrics - default is 90 days
- `ibexa.data_intelligence_layer.freshness.content_type_intervals`: Custom number of days per content type - default is empty

```yaml
parameters:
ibexa.data_intelligence_layer.freshness.default_interval_days: 30 # Increase frequency to every 30 days for all content types
ibexa.data_intelligence_layer.freshness.content_type_intervals: # Map content type identifier to custom interval in days
article: 15 # Compute metrics for articles every 15 days
```

## MCP server configuration

The MCP server `data_intelligence_layer` is already configured for the path `/mcp/data-intelligence` and is enabled by default.

Check notice on line 37 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L37

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 37, "column": 106}}}, "severity": "INFO"}
It needs

- to be associated to some SiteAccesses

Check notice on line 40 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L40

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 40, "column": 6}}}, "severity": "INFO"}
- to be allowed to be accessed from other hosts than `localhost`, `127.0.0.1`, and `[::1]`

Check notice on line 41 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L41

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 41, "column": 6}}}, "severity": "INFO"}

Check notice on line 41 in docs/content_management/data_intelligence_layer/dil_config.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_config.md#L41

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_config.md", "range": {"start": {"line": 41, "column": 20}}}, "severity": "INFO"}
- to have discovery cache enabled in production (by default, it's disabled for development)
- to have another session storage than the default `public/var/` directory

For example, assign it to the `admin_group`, allow your production admin domain and development domains, use the default cache pool for discovery cache and sessions:

```yaml
[[= include_code('code_samples/mcp/config/packages/mcp.dil.yaml') =]]
```
11 changes: 11 additions & 0 deletions docs/content_management/data_intelligence_layer/dil_guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
description: TODO.
month_change: true
---

# Data Intelligence Layer product guide

Check notice on line 6 in docs/content_management/data_intelligence_layer/dil_guide.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_guide.md#L6

[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings
Raw output
{"message": "[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings", "location": {"path": "docs/content_management/data_intelligence_layer/dil_guide.md", "range": {"start": {"line": 6, "column": 3}}}, "severity": "INFO"}

The Data Intelligence Layer (DIL) systematically collects, aggregates, and exposes editorial and content-centric metrics.

Check warning on line 8 in docs/content_management/data_intelligence_layer/dil_guide.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_guide.md#L8

[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.
Raw output
{"message": "[Ibexa.OxfordComma] Use a comma before the last 'and' or 'or' in a list of four or more items.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_guide.md", "range": {"start": {"line": 8, "column": 34}}}, "severity": "WARNING"}
Editors and AI agents can use those metrics to identify possible content improvements.

TODO: List available metrics and their purpose.
40 changes: 40 additions & 0 deletions docs/content_management/data_intelligence_layer/dil_mcp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
description: TODO.
month_change: true
---

# DIL MCP server

Check notice on line 6 in docs/content_management/data_intelligence_layer/dil_mcp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_mcp.md#L6

[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings
Raw output
{"message": "[Ibexa.SentenceCapitalizationInHeadings] Use sentence-style capitalization in headings", "location": {"path": "docs/content_management/data_intelligence_layer/dil_mcp.md", "range": {"start": {"line": 6, "column": 3}}}, "severity": "INFO"}

The Data Intelligence Layer come with a built-in MCP server helpin AI agents to fetch metrics and use them to provide content improvement suggestions or take actions.

Check failure on line 8 in docs/content_management/data_intelligence_layer/dil_mcp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_mcp.md#L8

[Ibexa.Spellcheck] Did you really mean 'helpin'?
Raw output
{"message": "[Ibexa.Spellcheck] Did you really mean 'helpin'?", "location": {"path": "docs/content_management/data_intelligence_layer/dil_mcp.md", "range": {"start": {"line": 8, "column": 61}}}, "severity": "ERROR"}

## MCP server configuration

You can check the service existence with the following command:

```bash
php bin/console debug:container ibexa.mcp.server.default.data_intelligence_layer
```

You can check the route existence with the following command:

```bash
php bin/console debug:router ibexa.mcp.data_intelligence_layer
```

This MCP server need to be associated to some SiteAccesses and allowed to be accessed from some hosts.

Check notice on line 24 in docs/content_management/data_intelligence_layer/dil_mcp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_mcp.md#L24

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_mcp.md", "range": {"start": {"line": 24, "column": 25}}}, "severity": "INFO"}

Check notice on line 24 in docs/content_management/data_intelligence_layer/dil_mcp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_mcp.md#L24

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_mcp.md", "range": {"start": {"line": 24, "column": 75}}}, "severity": "INFO"}
For details, see [Data Intelligence Layer configuration](dil_config.md#mcp-server-configuration).

## MCP server test

You can use the MCP server from an agent CLI command.
Like in the [Work with MCP servers example](mcp_usage.md#fully-scripted-variant), you can use a wrapper script to ease JWT token acquisition.

```bash hl_lines="7 11 25"
[[= include_code('code_samples/mcp/mcp-data-intelligence-wrapper.sh') =]]
```

Notice:

- the `admin` in MCP server URL as default [`URIElement: 1` SiteAccess matching](siteaccess_matching.md#urielement) is used in this local test example

Check notice on line 38 in docs/content_management/data_intelligence_layer/dil_mcp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/content_management/data_intelligence_layer/dil_mcp.md#L38

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/content_management/data_intelligence_layer/dil_mcp.md", "range": {"start": {"line": 38, "column": 117}}}, "severity": "INFO"}
- the `X-Siteaccess: admin` header when requiring the JWT token TODO: mention this need in mcp_usage.md example instead.
- the `Accept-Language: en` header when establishing the gateway TODO: Why is it suddenly needed? Because it's the admin SiteAccess?
1 change: 1 addition & 0 deletions docs/product_guides/product_guides.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Discover the primary ones with the help of product guides. Condensed content all
"content_management/pages/page_builder_guide",
"content_management/forms/form_builder_guide",
"content_management/collaborative_editing/collaborative_editing_guide",
"content_management/data_intelligence_layer/dil_guide",
"customer_management/customer_portal",
"product_catalog/product_catalog_guide",
"product_catalog/quable/quable_guide",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@
``` html+twig
{{ ibexa_content_name(product) }}

{{ ibexa_content_name(product, 'fr-FR') }}
{{ ibexa_content_name(product, 'fre-FR') }}
```

### `ibexa_seo_is_empty()`

`ibexa_seo_is_empty()` returns a Boolean value which indicates whether [SEO]([[= user_doc =]]/search_engine_optimization/seo/) data is available for the content item that is passed as an argument.
`ibexa_seo_is_empty()` returns a Boolean value which indicates whether [SEO]([[= user_doc =]]/search_engine_optimization/seo/) data is available for the content item that is passed as an argument.

Check notice on line 89 in docs/templating/twig_function_reference/content_twig_functions.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/templating/twig_function_reference/content_twig_functions.md#L89

[Ibexa.Passive] Try to avoid passive tense, when possible.
Raw output
{"message": "[Ibexa.Passive] Try to avoid passive tense, when possible.", "location": {"path": "docs/templating/twig_function_reference/content_twig_functions.md", "range": {"start": {"line": 89, "column": 172}}}, "severity": "INFO"}

| Argument | Type | Description |
|---------------|------|-------------|
Expand All @@ -102,7 +102,7 @@

### `ibexa_seo()`

`ibexa_seo()` attaches [SEO]([[= user_doc =]]/search_engine_optimization/seo/) data to the content item's HTML code.
`ibexa_seo()` attaches [SEO]([[= user_doc =]]/search_engine_optimization/seo/) data to the content item's HTML code.

| Argument | Type | Description |
|---------------|------|-------------|
Expand Down
14 changes: 3 additions & 11 deletions docs/users/oauth_server.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,9 @@ composer require ibexa/oauth2-server --with-all-dependencies

Add the tables needed by the bundle:

=== "MySQL"

```bash
php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/oauth2-server/src/bundle/Resources/config/schema.yaml | mysql -u <username> -p <password> <database_name>
```

=== "PostgreSQL"

```bash
php bin/console ibexa:doctrine:schema:dump-sql --force-platform=postgres vendor/ibexa/oauth2-server/src/bundle/Resources/config/schema.yaml | psql <database_name>
```
```bash
php bin/console doctrine:query:sql "$(php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/oauth2-server/src/bundle/Resources/config/schema.yaml)"
```

Then, in `config/bundles.php`, at the end of an array with a list of bundles, add the following two lines :

Expand Down
5 changes: 5 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,11 @@ nav:
- Time field type: content_management/field_types/field_type_reference/timefield.md
- URL field type: content_management/field_types/field_type_reference/urlfield.md
- User field type: content_management/field_types/field_type_reference/userfield.md
- Data Intelligence Layer:
- Data Intelligence Layer: content_management/data_intelligence_layer/data_intelligence_layer.md
- DIL product guide: content_management/data_intelligence_layer/dil_guide.md
- DIL configuration: content_management/data_intelligence_layer/dil_config.md
- DIL MCP server: content_management/data_intelligence_layer/dil_mcp.md
- Collaborative editing:
- Collaborative editing: content_management/collaborative_editing/collaborative_editing.md
- Collaborative editing product guide: content_management/collaborative_editing/collaborative_editing_guide.md
Expand Down
Loading