For fifteen years the reason to put JSON-LD on a page was Google. You marked up your products and your reviews, Google drew stars in the search results, and that was the whole transaction. Plenty of sites never bothered, because the payoff was one company's whim.
The audience changed. An AI agent landing on your page has the same problem a search crawler had in 2011, except worse: it has one pass, a limited context window, and a person waiting on the other end. Prose makes it work for every fact. A JSON-LD block hands it the facts directly. Name, price, availability, opening hours, in a vocabulary every major model has seen millions of times in training.
This is the unglamorous middle layer of agent readiness. UCP is for stores and needs real implementation work. WebMCP is new and needs JavaScript. JSON-LD is neither: it is fifteen year old technology, it takes minutes per page type, and it works for any site that has facts worth stating. A restaurant, a clinic, a consultancy, a blog.
The mistake we see is marking up what you think Google wants rather than what an agent needs. An agent asked "is this place open now and how do I book" needs OpeningHoursSpecification and a reservation URL, not just your logo and your social profiles. Mark up the answers to the questions people actually send agents to ask.
There is a free generator that builds the common types, and the glossary covers JSON-LD and structured data if the terms are new. It is the least exciting thing on your readiness list, which is exactly why your competitors have not done it either.