Skip to main content

ard-publish

Make your API, MCP server or AI agent discoverable by AI agents.

PyPI Python Licence

Build, validate and verify an Agentic Resource Discovery (ARD) manifest — the /.well-known/ard.json file that lets AI agents find what you offer at runtime, without anyone installing your tool in advance.

pip install ard-publish

How do I make my API discoverable by AI agents?

Serve an ARD manifest on your own domain describing what you offer, with 2 to 5 representative queries per entry. Registries crawl it. There is no submission form, no marketplace to apply to and no allowlist.

from ard_publish import Manifest, Entry

m = Manifest(host="example.com", display_name="Example Inc")
m.add(Entry.mcp_server(
    name="weather",
    display_name="Weather API",
    host="example.com",
    url="https://example.com/.well-known/mcp/server-card.json",
    description="Current conditions and forecasts for any location.",
    queries=["what is the weather in Berlin",
             "will it rain in London tomorrow"],
))
m.save(".well-known/ard.json")     # raises if it would not be findable

What is ARD?

ARD stands for Agentic Resource Discovery: an open specification for how AI agents find the tools, skills, agents and APIs they need, published in June 2026 by a working group including Google, Microsoft, Hugging Face, AWS, Cisco, GitHub, Nvidia, Salesforce and Snowflake.

It answers one question — "what is available for this task?" — then gets out of the way. It is a discovery layer, not a runtime, and it does not replace MCP or A2A.

Why this package exists

Publishing a manifest is a small job that is easy to get subtly wrong, and the failures are silent. A malformed URN, or entries with no representative queries, validates as JSON, serves a 200, and is never returned by any search. There is no error to notice.

save() refuses to write a manifest that would not be findable.

Command line

ard-publish init example.com > .well-known/ard.json   # scaffold a valid manifest
ard-publish validate .well-known/ard.json             # check it locally
ard-publish check example.com                         # check it for real

check is the one that matters. It fetches your live manifest, validates it, and asks every public ARD registry whether they return your domain for your own representative queries — because publishing and being indexed are different things.

example.com  grade B  82/100

   15/15   Serves a manifest                found
   10/10   Advertised on all four paths     4 of 4
   25/25   Conformance                      0 errors, 0 warnings
   20/20   Entries are searchable           3 of 3 carry representativeQueries
   12/30   Returned by registries           2 of 5 return this domain

  registries returning you:
    yes  Neuronto
     no  GitHub Agent Finder
    yes  WellKnown

How do I publish my MCP server so agents can find it?

Three steps, about ten minutes.

1. Write the manifestard-publish init yourdomain.com

2. Advertise it on all four discovery paths. Serving only one makes you invisible to any client that checks another:

/.well-known/ard.json          the path a consumer MUST fetch
Agentmap: <url>                in robots.txt, the agent-facing Sitemap:
<link rel="ard" href="...">    in your page head
DNS service records            optional

Manifest.robots_line() and .link_tags() generate two of those for you.

3. Verifyard-publish check yourdomain.com

The mistake that costs you everything

Leaving out representativeQueries. It is the field registries build their semantic index from, so an entry without it is a valid catalogue entry that no search will ever return.

Write 2 to 5 per entry, phrased as the request someone would actually make:

Written for a brochure Written for retrieval
enterprise document intelligence read this PDF and pull out the invoice total
scalable web extraction platform scrape a website that blocks bots
unified communications API send a text message to a phone number

Media types

Three spellings for MCP servers are in circulation, and because filters match exactly, the wrong one gets you silently dropped by registries that do not normalise. Entry.mcp_server() uses application/mcp-server-card+json, the spelling the official conformance tool accepts.

Helpers are provided for each resource kind:

Helper Media type
Entry.mcp_server() application/mcp-server-card+json
Entry.agent() application/a2a-agent-card+json
Entry.skill() application/agent-skills+gzip

API

Manifest(host, display_name, documentation_url, did) the catalogue
.add(entry) attach an entry, inheriting host and identity
.validate() list of problems, as plain instructions
.save(path, strict=True) write, refusing an unfindable manifest
.robots_line() / .link_tags() the advertisement snippets
validate(dict) validate a manifest you built elsewhere

Links

Licence

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ard_publish-1.0.1.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ard_publish-1.0.1-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file ard_publish-1.0.1.tar.gz.

File metadata

  • Download URL: ard_publish-1.0.1.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for ard_publish-1.0.1.tar.gz
Algorithm Hash digest
SHA256 a6fc6d6010d43e6681e473e0829b87b9e7f2056d0320a224e5941c543774c565
MD5 3a92cc1880077187779864b1a16fd006
BLAKE2b-256 172a5a4a44bda6402244b0a7a64ea06fc20c245a48f41d40fb096da353a91681

See more details on using hashes here.

File details

Details for the file ard_publish-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: ard_publish-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for ard_publish-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e259deae337c3e1319e2cca362d39a0d9807a5c70e470a664a48c052bf6fb1b
MD5 21ca640186cb05f3a2a2c982391a8d80
BLAKE2b-256 1dfbb49e6bbee00d66db6639d8022f3c996c2bab03e41e8e5f76cdba0381831b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page