Skip to content
Agent Storefront

Developers

Every published business is an MCP server

Streamable HTTP with JSON-RPC 2.0. All technical information in one place.

Quick start

Add a business to Claude Code with one command. Replace the slug with the business's address. The example shop is public and read-only.

bash
claude mcp add --transport http zoomag https://storefront.fleetq.net/mcp/zoomag

Endpoints

Endpoint Returns
POST /mcp/{slug}MCP server for one business; tools depend on its type
POST /mcpDirectory with find_business; returns the mcp_url of matching businesses. search_products without business searches every shop
GET /.well-known/mcp/directory.jsonThe directory as JSON
GET /b/{slug}/llms.txtThe profile as text for people and agents

A draft or paused business returns 404.

Connecting

Claude Desktop · mcp-remote
{
    "mcpServers": {
        "zoomag": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-remote",
                "https://storefront.fleetq.net/mcp/zoomag"
            ]
        }
    }
}
TypeScript SDK
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("https://storefront.fleetq.net/mcp/zoomag")));

const res = await client.callTool({
  name: "search_products",
  arguments: { query: "храна за куче", max_price: 35, limit: 5 },
});

Examples for third-party clients are not tested against every version.

Tools by business type

Type Read Requests
All get_info get_policies get_request_status accept_counter_offer reject_counter_offer cancel_request
Shop search_products get_product create_order
Restaurant get_menu book_table create_food_order
Venues and events get_menu book_table create_food_order
Services get_services get_availability get_schedule book_appointment book_class request_rental request_quote
Transport find_station search_trips
Health get_services get_availability book_visit
Lodging get_rooms check_stay request_stay
Real estate and vehicles search_listings get_listing request_viewing
Events list_events get_event
Directory find_business none

An unclaimed business is read-only: request tools return the error unsupported, and the agent sends the customer to source_url.

A shop with a live catalog adds get_categories; there, search_products and get_product read the shop at the time of the call.

Tool descriptions are in English because agents read them. Full reference with all arguments

Confirmed requests

A request is not a booking or order until the owner confirms it. The agent polls its status with get_request_status.

pending_confirmation confirmed / counter_offered / declined / expired / cancelled

request · POST /mcp/dvora-bistro (demo business)
{
    "jsonrpc": "2.0",
    "id": 7,
    "method": "tools/call",
    "params": {
        "name": "book_table",
        "arguments": {
            "date": "2026-10-16",
            "time": "19:30",
            "party_size": 4,
            "name": "Мария"
        }
    }
}
response (shortened)
{
    "request_id": "rq_example",
    "kind": "booking",
    "status": "pending_confirmation",
    "expected_response": "PT15M",
    "next_actions": [
        "get_request_status",
        "cancel_request"
    ]
}

The full list of states and reasons is in the reference.

Data and freshness

  • Every successful answer carries source_url and last_verified.
  • For a shop with a live catalog, get_product reads the shop at the time of the call; if the site does not answer, it returns the last copy with stale: true.
  • For a business with a stored catalog, get_product returns an evidence snippet from the page.
  • Searches may come from a cache of up to 1 hour, and last_verified says when the shop was read.
  • Prices are in euro; stock is the last verified state.
  • All read tools carry readOnlyHint: true.
  • Text written by a model carries generated_by.

Sessions, limits, errors

  • Session

    initialize returns an mcp-session-id header; send it with every following request. Methods: POST, DELETE; GET returns 405.

  • Rate limit

    Headers x-ratelimit-limit and x-ratelimit-remaining.

  • Encoding

    UTF-8. Invalid JSON (for example garbled Cyrillic) returns -32700 Parse error.

Full MCP reference in the documentation

Plans & limits

Paid plans start from €99/mo, metered by calls; a write operation counts as 5 calls. During the beta everything is free and limits are not enforced.

Start today on Sandbox terms: use the endpoint above. No API key is needed.

See pricing

We set up your business profile together.

We only use cookies that the site needs to work: session, form protection and sign-in. There are no analytics and no advertising. Cookie policy