Appearance
Public AI Agents
An MCP address for your visitors' own AI assistants: they search the shop's catalogue and hand the shopper a cart link. Read-only, no sign-in.
kitloom/public-agents · admins: kitloom/public-agents-filament, kitloom/public-agents-nova
Video lessons
Recorded in the Filament admin; the Nova admin works the same way.
An MCP address for your visitors' own AI assistants. A shopper who asks Claude, ChatGPT or another assistant "find me a linen dress under 100 on this site" gets an answer from your catalogue as it is right now — the categories, sizes and colours you sell, prices, stock — and a link that puts the chosen products into a cart on your site. The shopper checks the cart and pays there, as always.
The address is off until you open it. It reads only what any visitor may see, needs no sign-in and no key, and changes nothing on the site: no order, no account, no review is made through it. The admin is kitloom/public-agents-filament or kitloom/public-agents-nova.
This is not kitloom/ai. kitloom/ai is the door for your agents — the owner's and the staff's — with a key, the rights of a user and tools that write. This address is for everyone else, with nothing but the public tools.
Turning it on
Public AI Agents → Settings in the admin:
| Setting | What |
|---|---|
| Open the public address | Off by default. While it is off, the address answers 404 |
| Address | The URL to give out, https://your-site/mcp/public — ready to copy |
| Requests a minute | How many requests one visitor's address (IP) may make a minute, 60 by default; past it the address answers 429 for the rest of the minute |
| What it serves | The tools the installed modules offer here |
The page needs manage_public_agents (administrators have it). An AI agent working through kitloom/ai cannot change these settings: they are locked for agents (kitloom-ai.settings.locked).
How a shopper connects
The assistant needs the address only — no key, no sign-in:
- Claude (claude.ai, the desktop and phone apps): Settings → Connectors → Add custom connector, the URL
https://your-site/mcp/public, Authentication No sign-in. - ChatGPT: Settings → Connectors (developer mode) → Create, the same URL, no authentication.
- Claude Code, Cursor, VS Code and other MCP clients: a remote (HTTP) server at the same URL, e.g.
claude mcp add --transport http my-shop https://your-site/mcp/public.
Put the address where shoppers look for it: the footer, the help page, an "Ask your AI assistant" note on the shop page.
What the shop serves
With kitloom/shop installed (its kitloom-shop.public_ai.register switch, on by default):
| Tool | What the assistant gets |
|---|---|
catalog_vocabulary | The shop's own words: the product categories as a tree with how many products each holds, the attributes (size, colour, material…) with every value, the price range and the currency. The assistant asks it first and turns "something blue for summer" into your categories and values |
search_products | Products by keywords (in the name, the descriptions, the SKU, the categories, tags and attribute values — products with every word first, then those with any) and by the shop's filters: a category with its subcategories, attribute values, a price range, on sale, in stock, a minimal rating, a sort order. Short cards: name, address, price, stock, rating, picture |
product_details | One product: its descriptions as text, categories, tags, attributes, and for a variable product the variations a shopper can pick, with their prices and stock. The rating and the number of reviews, never the reviews' text |
cart_link | A link to your site that puts up to 20 products into the shopper's cart and opens the cart page. It is signed by the site and works for 24 hours; a link changed by hand is refused. What sold out in between is said on the cart page, the rest is added |
The catalogue is read exactly as a visitor reads it: published products only, not hidden from the catalogue, out-of-stock ones as the shop's Hide out of stock items says. Drafts, private products, prices of the admin, orders, customers and coupons never leave through this address.
Safety
- Read-only: every tool is marked so for the assistant (
readOnlyHint), and none writes. The cart link writes only into the cart of the person who opens it, in their own browser. - No personal data: the tools know nothing about who asks.
- A limit per visitor (Requests a minute) and a separate one on cart links (30 a minute).
- The text of products is what you published. An assistant reads it as data; still, nothing in a product's description should be meant for an assistant's eyes only.
For developers
A module offers a tool here with a Kitloom\WpSchema\Contracts\PublicAgentTool tagged PublicAgentTool::TAG: name(), module(), description(), schema() and handle($arguments) answering an array. It has no actor and no permission, as it is for anyone — so it reads what a visitor sees (the visibility scopes do that by themselves outside the admin) and writes nothing. A refusal the assistant should read is an InvalidArgumentException or a ValidationException. The shop's tools are in kitloom/shop, src/PublicAgent.
Kitloom\PublicAgents\PublicAgents says whether the address is open (enabled()), its url() and the tools(). The address is a laravel/mcp web server (Mcp\PublicServer), named after the site (blogname).
Configuration (config/kitloom-public-agents.php) | Default | What |
|---|---|---|
path (KITLOOM_PUBLIC_AGENTS_PATH) | mcp/public | Where the address lives |
routes.register | true | Off: no address at all, whatever the setting says |
filament.register, nova.register | true | The section in the admin |
Tests
From the application that installs the package: php vendor/bin/phpunit --testsuite PublicAgents; the shop's tools are tested in kitloom/shop (tests/PublicAgent).