I build websites that AI assistants can read, so mine had better work. In late September I put a small MCP server on this site, at redmanstudio.co.uk/mcp, so an assistant can look up my published prices without guessing. I tested it, it passed, and I shipped it. Then I connected it to Claude and asked what a Launch build costs.
Claude gave me a link to my pricing page.
Why that was wrong
The server had answered correctly. I had checked: call the tool, and the reply came back with the full price list, tier by tier, in plain text. The data was there. The assistant never saw it.
An MCP tool can return its answer in two places. One is content, a block of text meant to be read. The other is structuredContent, the same answer as machine-readable data. My first version put the real answer in content and a short pointer in structuredContent: a title and a URL, because it seemed tidy to keep the structured part small.
Claude hands the model the structured part when there is one, and not the text. So the model received "see this page" and nothing else, and did the sensible thing with it. It pointed me at the page.
Why my tests missed it
I had tested with curl, which prints both halves and lets me read whichever I like. Every check I ran passed because I was the one deciding what to look at. A person reading the raw reply sees the text and thinks it works. The assistant sees something different, and the only way to find out what is to ask the assistant.
I would call this the general shape of the bug rather than a quirk of MCP. Anything that is built for a machine to read has a second reader whose view of the output you are not looking at. It is the same reason a site that looks fine in your browser can be empty to a crawler. I wrote about that version of it a few weeks ago.
What I changed
Every tool now carries its full answer in both places. get_prices returns all five price areas with their tiers, inclusions, timelines, how pricing works and what moves the price, as data. get_studio_profile, list_work and the enquiry confirmation do the same. The text is still there for clients that show it. The fix is the commit labelled "return the full answer in structuredContent", and it was about sixty lines.
Then I did the check I should have done first: connected it to Claude and asked the question again. It quoted £3,500, one week, and listed what is included.
A check you can run
If you have, or are paying for, anything an AI assistant is meant to call, do this before you believe it works.
- Look at the raw reply. This is the part everyone does. Send a
tools/callrequest forget_pricestoredmanstudio.co.uk/mcpwith any HTTP tool, such ascurlwith a JSON body, and read what comes back. My server answers without a login.
- Find every place the answer can live, and confirm each one carries the whole answer, not a pointer.
- Connect it to a real assistant and ask the real question. Do not ask "what tools do you have". Ask what a customer would ask, and compare the reply with the truth.
Step three is the one I skipped, and it is the only one that tests what a customer's assistant will actually do.
What this does not tell you
It is one client's behaviour on one date. Other assistants may read the text and ignore the structure, and Claude may change. That is the argument for putting the full answer in both places rather than choosing one.
Also, as I said in what the assistant says about you, nobody browses for MCP servers yet, so this is more proof of discipline than a lead channel today. I would still rather the thing be right when someone does connect it.
If you want an assistant-readable site that has been tested the way an assistant reads it
Send me a URL. I will run the checks, including asking real assistants real questions about your business, and send you what they say. No charge, no obligation.
Paul Redman runs Redman Studio, an independent web design and engineering studio in Watford, Hertfordshire. The published price list and the proof page are on this site.