Guide
Writing representativeQueries
The only field in an ARD manifest that says what a resource is for, and the one most manifests get wrong.
representativeQueries is a list of natural-language requests an ARD resource is a good answer to. Registries match an agent's request against them, so they decide whether a valid manifest is ever returned. Write full sentences with a verb, describing jobs rather than categories, covering different situations rather than rephrasings of one, and only claim what the resource genuinely answers well. Three to eight per resource.
What the field is
An ARD manifest describes each resource with an identifier, a display name, a type and a location. Those say what a thing is. One field says what it is for:
Entries SHOULD include representativeQueries: example natural-language requests that the resource is well suited to answer.
ARD specification v0.91, the entry schema agenticresourcediscovery.org
That is the whole of the normative guidance. Three lines for the field that decides whether a conformant manifest is ever returned to anybody.
It matters because of what happens on the other side. An agent does not search for
type=mcp-server. It has a task in words, and it hands those words to a registry. The
registry has to decide which of many entries is the best answer to a sentence it has never seen.
Your representativeQueries are the only sentences you have contributed to that
comparison.
Why this field is unlike the others. This is the one field where the publisher and the reader are the same kind of writer. Everywhere else in a manifest you are writing metadata for a machine. Here you are guessing at a sentence a stranger will type, which is a different skill and is why so many manifests get it wrong.
The four failure modes, with fixes
1. The category label
By far the most common. The field gets filled with the noun phrase from the marketing page.
| Written | Problem | Better |
|---|---|---|
document processing | No verb, no object, no situation. Matches every document tool ever published. | extract line items from a scanned invoice |
AI-powered OCR solution | Describes the vendor, not the task. Nobody types this. | read the text out of a photo of a receipt |
payments infrastructure | A market category. An agent has a job, not a category. | charge a saved card and email the receipt |
The test that catches all three: does it contain a verb, and could you say it out loud to a colleague without them asking what you mean? A category label fails both.
2. The query you wish you ranked for
The second most common, and the more expensive. A query is written because it is valuable, not
because the resource answers it. A note-taking tool claims manage my entire
business.
This is worse than useless. A registry may well return you, and then the agent connects, reads your tool list, finds nothing that does the thing, and leaves. You have spent the one impression you were given proving you were the wrong answer. Retrieval systems that observe outcomes will learn that faster than you can edit the file.
Write fitness, not demand. The query should describe something the resource is genuinely one of the better answers to. If that is a small, dull, specific thing, say the small, dull, specific thing.
3. Eight near-identical rephrasings
send an sms, send SMS, send a text message, sms
sending api. This is keyword stuffing wearing a new hat, and it does not work the way its
author hopes: the entries collapse to nearly the same match, so eight slots have bought roughly one
query's worth of coverage.
Spend the slots on different situations instead: send an sms, send a
one-time passcode to a phone number, notify a customer their delivery is
late, send a text to a list of numbers from a spreadsheet. Same capability,
four genuinely different requests, four chances to be the answer.
4. The internal name
use the configuration webhooks endpoint is a real example of the shape, and it is
what happens when the field is generated from API reference headings. It is precise, correct, and
matches nothing, because the only people who phrase it that way already know your product and do
not need to discover it.
How to write them, in four steps
- List the jobs, not the features. For each resource, write down what somebody had actually been trying to do in the five minutes before they needed you. Not "invoice API" but "chase an unpaid invoice".
- Say each one out loud as a request. Start it with a verb. If it sounds like a heading rather than a sentence, it is still a category label.
- Cut anything you are not genuinely good at. The cost of a wrong query is paid at the moment an agent arrives and leaves.
- Split the resource if the list will not converge. If you need fifteen unrelated queries, you have several resources sharing one entry. Entries are free. Fifteen queries across three focused entries outperforms fifteen on one vague one.
What this looks like in a manifest
{
"identifier": "urn:air:example.com:mcp:invoicing",
"displayName": "Example Invoicing",
"type": "application/mcp-server-card+json",
"url": "https://api.example.com/mcp",
"representativeQueries": [
"issue an invoice and record the payment",
"chase an invoice that is thirty days overdue",
"turn a signed quote into an invoice",
"find every unpaid invoice for one customer"
]
}
Four sentences, four different situations, each one something the resource genuinely answers. That is the whole technique.
How to check your own
Two things worth doing, in this order.
Read them cold. Take your list to somebody who does not know the product and ask what they think it does. If the answer is vague, the queries are labels.
Then run them. Send each of your own queries to a registry that indexes you and see whether you come back, and who comes back above you. The result is the only feedback that is not a guess. Every public ARD registry accepts a search over HTTP:
curl -X POST https://neuronto.com/search \
-H "Content-Type: application/json" \
-d '{"query": {"text": "chase an invoice that is thirty days overdue"}}'
If you are not in the results for a query you wrote about yourself, that is not a registry bug. It is the field telling you the sentence does not describe you as clearly as you thought.
The bar is lower than it looks. Worth knowing before you spend a day on this: of 375,998 domains crawled, 207 serve an ARD manifest at all. Most entries in every public index were found by crawling rather than published deliberately, which means most of them carry no representativeQueries at any quality. Four good sentences put you ahead of almost everybody.
Questions
What are representativeQueries in ARD?
A list of natural-language requests that a resource is a good answer to. It is the only field in an ARD manifest that describes what a resource is for rather than what it is, and it is what registries match an agent's request against. The specification marks it SHOULD, not MUST, so a manifest without it is valid and much harder to find.
How many representativeQueries should I write?
Three to eight per resource covers most cases. One is a keyword in disguise. Twenty usually means the resource does too many things and should be split into several entries, which is free and improves every one of them.
Should representativeQueries contain keywords?
No. They are sentences, not keywords. A registry matching an agent's request works on whole phrasings, so a bare noun phrase competes against every other resource that shares the noun. Write the request a person would type, including the verb.
Do representativeQueries affect ranking?
They are the main thing a lexical retrieval leg has to work with, so in practice yes. They are not a ranking dial you can turn up: repeating a phrase does not raise you, and a query that does not describe the resource costs you the position when the agent tries it and leaves.
What happens if I omit representativeQueries?
Your entry is still valid and still indexed. It is then matched only on its name, description and, for MCP servers, on whatever tool descriptions a registry could read by connecting. That is a much thinner target, and it is written for a different audience.
Get indexed
Publishing the file is half of it. A registry can only index a domain it has encountered, so tell the ones you care about.
curl -X POST https://neuronto.com/submit \
-H "Content-Type: application/json" \
-d '{"url": "https://yourdomain.com"}'
This one resolves a bare domain to your manifest, indexes entries of every
type rather than MCP servers only, and answers with what it found or exactly what it tried. Add
"dry_run": true to see the outcome without being written anywhere.
The other public registries take submissions through their own doors, and submitting to several costs nothing: WellKnown, ARD Registry Hub, Desvela. What actually reaches all of them over time is the manifest on your own domain, which is the part nobody can take away from you. How each one behaves, probed.
Last reviewed 2026-09-05. Checked against ARD v0.91 (Proposal, 2026-08-26).