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 ArdProvider plugin 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 url or data, known media types, 2–5 representativeQueries and 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 a Link HTTP header, and suggests an Agentmap: 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:show prints the manifest. drush ard:validate lists 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(), CatalogAlterEvent and hook_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

  1. Go to Configuration › Web services › Agentic Resource Discovery (/admin/config/services/ard).
  2. 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.
  3. Turn on the providers you need. Under Resources, add the APIs, MCP servers, agents or skills you want to publish.
  4. Check the validation report on the settings page, or run drush ard:validate.
  5. Optionally add Agentmap: https://www.example.com/.well-known/ard.json to 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.

Supporting organizations: 

Project information

Releases