Before
The web as it is
A good site. Real phone number, real reviews, and a contact form that promises a reply “within 1–2 business days”. An agent that lands here can read the page and nothing more — there is no action for it to take.
Open the before pageAfter · one line added
The same site, hireable
Two WebMCP tools appear: one reads the team's live calling hours, one asks Callingly to ring the team and bridge them to you. The contact form is untouched — the human path did not need replacing.
Open the after pageThe entire difference
Not a plugin, not an SDK, not a rewrite. The line a customer pastes:
<script src="https://callingly.com/js/webmcp.js"
data-callingly-key="YOUR_WEBHOOK_KEY" async></script>
The key is the slug from a Callingly webhook integration — public by design, the same way the webhook URL customers already paste into other tools is.
Trying it
- Open the after page in ChatGPT's in-app browser, or Chrome 149+ with
chrome://flags/#enable-webmcp-testing. - Ask your agent: “Can this plumber talk right now?”
- Then: “Ask them to call me on …” — your number, and a card appears on the page asking you to confirm before anything is sent.
Joe's Plumbing is fictional. The calls are not: they route through Callingly's production dialer to a real demo team.
Seeing the tool calls
These pages are deliberately uninstrumented, because that is the point — an ordinary business site, unaware of any of this. To watch the tool calls themselves, with arguments and return values as your agent makes them, use the instrumented console at callingly.com/webmcp.