This project is not covered by Drupal’s security advisory policy.
Agentic Resource Discovery (ARD) lets AI agents find out what your Drupal site offers them. It publishes an ARD manifest at /.well-known/ard.json. The manifest is a machine-readable catalog of the APIs, MCP servers, A2A agents and skills that the site exposes.
ARD is the discovery layer of the agentic web. It does not run tools. It tells agents and ARD registries which capabilities exist on a domain and where to find them. The agents then use those capabilities through OpenAPI or MCP. This module follows the same idea, so it does not reinvent Tool API or MCP Server. It sits on top of what Drupal already exposes:
Drupal capabilities → Tool API / MCP Server / OpenAPI → ARD module → /.well-known/ard.json → ARD registries → AI agents
Features
- Well-known endpoints:
/.well-known/ard.json, plus the predecessor path/.well-known/ai-catalog.json, which you can turn off. Both are served as JSON with open CORS. - Resources managed in the UI: add OpenAPI documents, MCP server cards, A2A agent cards, skills or nested catalogs, either by URL or as inline JSON. Each resource has a description, representative queries, capabilities, tags and a version. Resources are config entities, so you can deploy them with config sync.
- Automatic discovery through providers: an
ArdProviderplugin type (PHP attributes) contributes entries. The module ships with three providers:- manual resources;
- an MCP server provider that publishes the MCP endpoint and lists Tool API tools as capabilities;
- an OpenAPI document provider.
- Spec-compliant identifiers: the module generates
urn:air:<publisher>:[<namespace>:]<name>identifiers from a configurable publisher domain. - Validation: checks required terms, the identifier format and the publisher domain match, that each entry has exactly one of
urlordata, known media types, 2–5representativeQueriesand duplicate identifiers. Invalid entries are left out of the manifest and logged. - Caching: the manifest is a cacheable response with cache tags and a configurable max-age, and works with page cache, reverse proxies and CDNs.
- Advertising the manifest: adds
<link rel="ard">to HTML pages and aLinkHTTP header, and suggests anAgentmap:line for robots.txt. - Decoupled-friendly: a public base URL setting makes relative URLs absolute against the public frontend domain instead of the CMS host. You can also fetch the manifest at build time and serve it as a static file.
- Tooling:
drush ard:showprints the manifest.drush ard:validatelists errors and warnings and exits with 1 on errors, which suits CI. A status report entry shows the state of the manifest. - Extensible:
hook_ard_catalog_alter(),CatalogAlterEventandhook_ard_provider_info_alter().
Example output
{
"specVersion": "1.0",
"host": { "displayName": "Example" },
"entries": [
{
"identifier": "urn:air:www.example.com:api:search",
"displayName": "Site search",
"type": "application/openapi+json",
"url": "https://www.example.com/openapi.json",
"description": "Full-text search across the site content.",
"representativeQueries": [
"Find articles about energy",
"Search the magazine"
]
}
]
}Post-installation
- Go to Configuration › Web services › Agentic Resource Discovery (
/admin/config/services/ard). - Set the publisher domain, a fully qualified domain such as
www.example.com. If your public site is served by a decoupled frontend or a CDN, also set the public base URL. - Turn on the providers you need. Under Resources, add the APIs, MCP servers, agents or skills you want to publish.
- Check the validation report on the settings page, or run
drush ard:validate. - Optionally add
Agentmap: https://www.example.com/.well-known/ard.jsonto your robots.txt.
The Administer Agentic Resource Discovery permission controls who can manage the manifest. The manifest itself is public by design.
Requirements
Drupal 10.3 or later, or Drupal 11. PHP 8.1 or later. No other modules are required.
Recommended modules
- Tool API: defines reusable tools. When it is enabled, its tools are listed as capabilities of the MCP server entry.
- MCP Server: exposes Drupal tools to agents over the Model Context Protocol. This module advertises its endpoint.
- OpenAPI: generates OpenAPI documents for your REST and JSON:API resources, which you can then publish in the manifest.
Roadmap
After the first stable release:
- automatic discovery of more sources;
- permissions and visibility per resource;
- trust metadata (
trustManifest); - cryptographic verification, using a detached JWS over the JCS-canonicalised manifest (RFC 8785);
- nested catalogs;
- integration with ARD registries.
The ARD specification is still a proposal (v0.91). The module follows it closely and will track later versions.
Similar projects
- lakedrops/ai-catalog: a Composer plugin that builds an ARD manifest from a curated list of agent skills and agents. This module is a Drupal module instead. It is managed from the UI and config, generates entries from Tool API, MCP Server and OpenAPI, and validates and caches the manifest at runtime.
Supporting this module
Bug reports, feature requests and patches are welcome in the issue queue. Feedback is especially useful from sites that publish MCP servers or decoupled frontends, and from anyone working on how the ARD specification applies to Drupal.
Project information
- Project categories: Artificial Intelligence (AI)
- Created by rafuel92 on , updated
This project is not covered by the security advisory policy.
Use at your own risk! It may have publicly disclosed vulnerabilities.

