This site is operable, not just readable.
Almost every marketing site in this category is a wall an agent has to screenshot and guess at. This one hands over a typed tool list instead, through WebMCP in the browser, and over JSON-RPC everywhere else. It is the product's own argument, performed by the marketing site.
Your browser has not shipped navigator.modelContext yet. Most have not, as of 2026. The same tools are available over JSON-RPC at /api/mcp, which needs no browser support at all.
list_bag_modulesread-onlyList every capability module AgentBag ships, each with a published status (live, beta, or bench) and the caveat that goes with it. Optionally filter by status. Use this first to understand what the product actually does.
example: {"status":"bench"}
get_bag_moduleread-onlyFetch the full published entry for one module: what it does, why it matters, how it works, its status caveat, and its FAQs. Use after list_bag_modules when you need depth on a specific capability.
example: {"slug":"trustgraph"}
search_bagread-onlyAnswer a natural-language question strictly from the published capability ledger, returning citations to the modules the answer came from. Declines rather than speculating when the ledger does not cover the question.
example: {"question":"What stops one agent reading another agent data?"}
check_workspace_addressread-onlyTurn a proposed team name into the tenant subdomain it would become, and report whether that label is usable. Does not reveal whether an address is already taken; that is deliberate.
example: {"name":"Acme Robotics"}
answer_faqread-onlyAnswer a common question about AgentBag in machine form: a terse declarative answer plus a flat object of primitive-valued facts you can assert against without parsing prose. Prefer this over search_bag for questions about pricing, limits, privacy, tenancy or how to evaluate the product. Call with no arguments to list every question.
example: {"question":"what is not built yet"}
get_pricing_statusread-onlyReport the current pricing position honestly, including the fact that billing is deliberately disarmed and no numbers are published yet.
example: {}
- not runnable here
join_waitlistside-effectingSubmit an email address to the AgentBag waitlist, optionally reserving a workspace address. This sends data on the user behalf; confirm with them before calling it.
example: {"email":"you@example.com","workspace":"acme"}
Everything a machine needs.
/api/mcpMCP JSON-RPC 2.0. POST tools/list, then tools/call./.well-known/mcp.jsonMCP discovery: find the endpoint from the origin./.well-known/agent-actions.jsonAction registry with schemas and examples./api/modulesThe capability ledger as JSON./llms.txtThe whole site as facts, for answer engines.
try it from a terminal
curl -s https://agentbag.ai/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -s https://agentbag.ai/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"list_bag_modules","arguments":{"status":"bench"}}}'One script tag. Your site has an agent.
Drop a single line of JavaScript on any page. A branded launcher appears in the corner, your visitors click it, and they are talking to your published agent inside a sandboxed panel. No iframes to manage, no auth to wire, no build step. The agent reads your page, answers in context, and can even interact with your UI if you opt in.
paste into your site
<script src="https://agentbag.ai/embed.js" data-agent="<your-agent-folder-id>" data-accent="#5f6f3c" data-launcher="Chat with us" data-voice="on" data-page-context="on" ></script>
Shadow DOM isolated
The widget renders inside a Shadow DOM root. Your CSS cannot break it, and it cannot break yours. Zero style collisions on any site.
Sandboxed iframe
The chat panel loads in a strict sandbox. No top navigation, no credential leaks. Guest tokens stay inside the frame. Your host page is never exposed.
Lazy loaded
The iframe is not created until the user clicks the launcher. Zero impact on your page load. No hidden network requests until someone actually wants to talk.
Configuration
- Your published agent folder ID. Required.
data-agent"<folder-id>" - Brand color for the launcher button and accents.
data-accent"#5f6f3c" - Custom text on the launcher pill. Up to 40 characters.
data-launcher"Chat with us" - Enable voice input. Users can speak instead of type.
data-voice"on" - Which corner the launcher appears in. Default: right.
data-position"left" | "right" - Color scheme for the chat panel.
data-theme"light" | "dark" | "auto" - Let the agent read visible page content to give contextual answers.
data-page-context"on" - Let the agent interact with the page: click, scroll, highlight elements.
data-page-actions"on" - CSS selector scoping which content the agent can read. Default: main or article.
data-context-selector"main"
How it works under the hood
- 1. Loader runs in your page. It creates a Shadow DOM host and paints the launcher button. No iframe yet, no network cost.
- 2. User clicks the launcher. The iframe is created with
sandboxrestrictions and loaded from our origin. The guest session starts. - 3. Page context flows in (opt-in). If
data-page-context="on", the loader extracts visible text from your page and sends it to the agent for contextual answers. - 4. Page actions drive your UI (opt-in). If
data-page-actions="on", the agent can highlight, scroll to, and click elements on your page to guide users.