Using Physical Validation from an agent
Connect by URL, or let the browser's own agent drive the page. Reads need no token. An agent can search and read. It cannot send a request or contact a supplier.
Connect over MCP
The server is Streamable HTTP. Add it in the client by URL. No account is needed. A stray Authorization header is ignored.
https://physicalvalidation.com/mcpIn Claude Code:
claude mcp add --transport http physical-validation https://physicalvalidation.com/mcpChatGPT, Claude, Cursor, and Grok each take the same URL as a custom MCP server. Setup for each one is on the MCP page. The same five tools are an HTTP API: API reference, API index, OpenAPI, llms.txt.
The tools are search_companies, search_facilities, get_company, get_facility, and prepare_request. Search takes the need in the person's words. prepare_request returns a link on this site. The person checks it, adds contact details, agrees, and sends it. The tool stores nothing and contacts no one.
WebMCP in the browser
On a browser that supports WebMCP, every page registers tools for the visitor's own agent. They do what a person could do here, and the reading ones move the page, so the person sees what their agent does. None of them submits a form.
| Tool | What it does |
|---|---|
search_directory | Search the directory and show the results on this page. |
list_categories | List categories and filter values, with how many companies have each. |
get_current_page | Describe the search, the companies listed, or the company or site on screen. |
open_company | Open a company and return what it offers and its sites. |
open_site | Open one site and return its services, standards, equipment, and sources. |
ask_physical_validation | Ask the on-page assistant. The answer streams into the panel, where the person can continue it. |
start_quote_request | Open the request form. The person reviews and sends it. The tool never submits it. |
What an agent can do
- Search companies and sites by what they do, where they are, and by name.
- Read one company or one site, including published claims and the sources behind them.
- Prepare a request draft and hand the person a link to review and send.
- In the browser: search, open a company or a site, ask the assistant, and open the request form.
What an agent cannot do
- Send a request, or contact a supplier. The request API accepts only the site's form, after the person consents.
- Submit the request form.
start_quote_requestandprepare_requeststop at the person. - Read captured third-party page text, or call admin tools. Those stay behind access control and are not in the public tool list.
- Scrape, mirror, or redistribute the catalogue. That is prohibited by the terms of use.
Limits
| Limit | What the server enforces |
|---|---|
| Anonymous API | 60 a minute per client. |
| MCP | 600 a minute per IP, and 6000 a minute across all clients. A 429 includes Retry-After. |
| Authenticated catalogue search | 120 a minute. The public API does not use this window. |
| Assistant | 5 questions a minute and 30 an hour per client. |
| Quote requests | 5 sent from the form, a minute per client. Preparing a draft does not send one. |
| Search text | q is at most 500 characters. |
| Page size | Public API and MCP: limit from 1 to 50, default 10. Catalogue search: up to 100. |
| Request body | Public API JSON: 65536 bytes. MCP message: 100000 bytes. The shared JSON reader, used by site search POST: 16384 bytes. |
Past a limit the response is HTTP 429 and includes Retry-After, in seconds. Wait that long, then retry. For the API, MCP, catalogue search, and quote requests the value is 60. For the assistant it is 60 on the per-minute cap and 3600 on the hourly cap.
Examples
Search from a shell:
curl --fail-with-body 'https://physicalvalidation.com/api/v1/companies?q=peptides®ion=europe&limit=5'Prepare a draft. The result's review.url is the link the person opens:
curl --fail-with-body 'https://physicalvalidation.com/api/v1/request-drafts' \
-H 'Content-Type: application/json' \
-d '{"title":"GMP peptide, 50 g","services":["peptide synthesis"],"quality":["GMP"]}'In the browser, a WebMCP call that searches and moves the page:
search_directory({ "query": "GMP peptide", "region": ["europe"] })