Mina is moving from marketing into automation. She knows spreadsheets, can study on weekday evenings, and wants to build an automated reporting workflow within six weeks. Her question to a course website is conversational and compound: which class fits, why, and which August evening session still has room?
A search box or SQL lookup can return a row; it cannot interpret that goal, compare curricula and prerequisites, and defend a recommendation at the same quality. AI has a real job here. Live availability is only the final check. That distinction determines the entry point: read public course evidence, query a bounded schedule source, and withhold act because Mina did not ask the site to enroll or charge her.
The protocol cannot choose the responsibility
The Model Context Protocol describes a standard connection between AI applications and external data, tools, and workflows. That makes MCP useful when a real connection is needed; it does not make a server mandatory for every public website.
Cloudflare’s MCP guidance is unusually practical here. It advises against wrapping an entire API schema and recommends tools designed for specific goals, with narrowly scoped permissions that are easier to manage and audit. In other words, “Can we expose this?” is not the design question. “What is the smallest outcome this visitor needs?” is.
Mina’s single request crosses two responsibility boundaries without reaching the third. The adviser needs public descriptions to reason about fit and a live result to verify that its choice is actionable. Enrollment would be a different assignment, not a convenient extension.
Put one request across three responsibility boundaries
Write the input, a verifiable finish condition, the data owner, and the consequence of a bad answer. Then choose a branch:
- What must AI finish on this website?
- Read public contentMake the current page, metadata, canonical URL, links, feed, sitemap, and page status agree
- Query changing dataExpose only a bounded read-only result with fields, freshness, unknown states, and explicit errors
- Act for a personDefine identity, exact authority, per-action approval, logs, limits, saved state, and repair first
These are not bronze, silver, and gold versions of one feature. Remove the live tool and Mina can still receive a reasoned course match, but not a reliable August option. Replace the adviser with a plain lookup and she gets availability without interpretation, comparison, or rationale. Remove enrollment authority and her original request is still fully answered. Each counterfactual marks a different boundary.
A readable site is already a machine entry point
The adviser’s first evidence should be the same course material a prospective student can inspect: curriculum, prerequisites, expected outcome, duration, and schedule notes. Test representative pages before drafting an integration roadmap. Do their titles, descriptions, dates, languages, canonical URLs, internal links, RSS items, and sitemap records identify the same current resources? Does removed content return 404 or 410 instead of a blank success page?
Google Search Central says sitemaps can describe important pages, update times, and alternate-language versions, while a well-linked small site may not need one. That is a useful constraint: fix a demonstrated discovery gap rather than installing a checklist. Google likewise describes rel="canonical" as a preference signal for duplicate or very similar pages. It cannot reconcile a page whose title, date, language, and body disagree.
If those pages disagree, fix them first. MCP would only give the adviser a faster route to conflicting evidence. Reliable public content is enough for Mina’s fit assessment and recommendation rationale; it is not proof that a particular August session remains available now.
A query should reveal less than the screen behind it
Changing facts—stock, prices, shipment status, class seats—are poor candidates for repeated HTML interpretation. Once the recurring need is proven, a stable read-only endpoint, restricted export, or narrow tool can be simpler than teaching an agent where a value happens to sit on today’s layout.
After the adviser has chosen a course, let a narrow tool confirm only course code, August session, meeting time, seats remaining, update time, and explicit absent, stale, full, or unavailable states. The tool validates whether the recommendation can be acted on now; it does not choose the course. It needs no student names, payment history, staff notes, enrollment form, or capacity control.
Test both halves separately. Without the tool, a good adviser should preserve its comparison while admitting that availability is unknown. With the tool, an unknown course, delayed sync, full session, timeout, and out-of-scope request must stay distinguishable. Never turn yesterday’s number into today’s certainty just to keep the answer polished.
An action includes the pause and the way back
Submitting a form, booking a seat, changing a setting, sending a message, or making a promise uses someone’s authority. The interface must preserve the account, target, parameters, irreversible effects, notification, request identity, and audit record. High-risk calls should begin as a reviewable preview and require a fresh decision when any material value changes.
The OpenAI Agents SDK human-in-the-loop guide shows a concrete control: an approval-required tool call pauses before execution, surfaces the tool and arguments, stores an approve-or-reject decision for that particular call, and resumes from serialized run state. It also applies the pattern to MCP tools. This is stronger than a generic “human supervised” badge because a later operator can tell exactly what was authorized and where work resumes.
The same boundary appears in Before Letting an AI Agent Write Code, Put Checkpoints into the Task. A workflow that can stop halfway also needs a readback of effects already produced and a named compensating step before retry; When an Automation Fails Halfway, Who Cleans It Up? is the companion worksheet for that part.
Write the condition that would change your choice
A useful decision ends with both a next step and a reconsideration trigger. Mina’s job is done when she receives one well-supported match plus an available August evening session. Only a new instruction—“Enroll me in that session”—would reopen the action question, and only after identity, exact confirmation, personal-data handling, payment behavior, duplicate prevention, and failure repair have owners.
For another site, today’s answer may be to repair one canonical URL, test one restricted dataset, design a non-executing preview, or defer. Naming the trigger prevents a small information problem from silently becoming a permanent integration platform.
AI handoff card
Work only from the course website repository, public course pages, schedule schema, and operating records I authorize you to read. Do not edit content, submit enrollment, call a write endpoint, or connect a new service. Audit this adviser task: “I work in marketing, know spreadsheets, can study on weekday evenings, and want to build automated reports within six weeks. Recommend the best course and identify an August session with space.” Extract the background, skill, time, and outcome constraints; cite public evidence for at least two candidate courses; compare curriculum, prerequisites, and achievable outcomes; then give a recommendation with reasons. Separate conclusions available from public content from facts that require a bounded read-only tool: course code, August session, meeting time, seats remaining, update time, and explicit error state. Run three counterfactuals. If a plain SQL/API lookup can produce an equally good recommendation and rationale, mark AI NOT NEEDED and stop. If removing the live tool prevents course matching rather than only current-session confirmation, mark the read/query split INVALID. If removing enrollment authority prevents the original answer, mark the boundary OVER-SCOPED. Finish with the least-powerful interface that passes all three tests. Keep identity, personal data, enrollment, payment, capacity changes, and external messages unauthorized; list per-action approval, duplicate prevention, logs, recovery, compensation, and a human owner only as prerequisites if the request later becomes “enroll me.”
Mina gets the recommendation without handing over enrollment

- Mina brings one compound question to the adviser, with her marketing résumé, spreadsheet experience, evening calendar, six-week horizon, and reporting goal all visible.
- On the same laptop, the adviser weighs several courses against those constraints and selects one through a visible many-to-one comparison—not a database lookup.
- It then follows a one-way read-only connection to check an August evening session. Enrollment paperwork, personal data, and the card reader remain beyond the red line.
- Mina receives the matched course, a visible rationale, and a viable session, then makes her choice. A person still handles enrollment and payment.
A conventional lookup could reproduce panel three, but it would lose the interpretation and comparative judgment in panels one and two. Conversely, panel four is complete without granting an action tool. That is the design test: preserve the part that needs AI, add only the changing data it lacks, and reopen authority only when the requested outcome truly changes.
References
- Model Context Protocol: What is the Model Context Protocol (MCP)? — https://modelcontextprotocol.io/docs/getting-started/intro
- Cloudflare Docs: Model Context Protocol (MCP) — https://developers.cloudflare.com/agents/model-context-protocol/
- Google Search Central: Learn about sitemaps — https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview
- Google Search Central: How to specify a canonical URL with rel=“canonical” and other methods — https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- OpenAI Agents SDK: Human-in-the-loop — https://openai.github.io/openai-agents-python/human_in_the_loop/



