adaptive-interfaces.ahenselin.chatgpt.site
Explore three WebMCP demos that adapt familiar interfaces to user intent, context, and conversation.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 4 · Act 16 · Transact 0 · Score: Not yet scored
Tool inspector
recommend_storefront
Retrieve public Steam catalog candidates without applying them to the visible result set. Set workingHeadline to a concise present-tense message in the browser's voice. Use queryScope creator only for developer, publisher, or studio requests; otherwise keep catalog scope so developer-name-only matches cannot masquerade as title, franchise, genre, or tag matches. Treat named games as examples of the experience the user wants. If a literal search has no qualified candidates, workflowStatus is recovery_required and stale results are replaced by a recovery state: do not finish. Call recommend_storefront again with the returned retry_as_similarity action, compare intent fit, tag coverage, review quality, and review confidence, then call curate_and_apply_storefront_results before responding. A targeted candidate with zero intentFit and zero tagCoverage is not qualified. If similarity recovery also fails, the tool applies an explicit no-results state. This is a retrieval step, not the preferred final presentation: for discovery, comparison, ranking, or recommendation requests, follow a successful retrieval with curate_and_apply_storefront_results by default. Stop at an uncurated search list only when the user explicitly asks for raw or conventional search results. Consent protocol before recommending: when recipientContext is self and describe_storefront reports personalizationAvailable true, ask once whether the user wants library-based personalization. If they agree—or explicitly say “Use my library”—call get_taste_profile first, then use personalization local_library. If they decline, if they request an immediate answer, or if personalization is unavailable, continue immediately with personalization none. Never offer library personalization for someone_else or shared_group; use public data with personalization none. Use reference, includeTags, preferredTags, and excludeTags to express intent, and intentFit or tagCoverage as ranking factors. Owned-game exclusion happens…
Page: /store
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
query |
string | yes | Concise catalog search terms. |
queryScope |
string | no | Use creator for requests about games made or published by a named studio. Keep catalog for title, franchise, genre, tag, or experience requests so developer-name-only matches do not masquerade as game matches. |
workingHeadline |
string | yes | Browser-authored present-tense headline shown immediately while the visible storefront is being curated, for example “Finding a cozy game for your weekend.” |
reference |
string | no | A known game or franchise that anchors similarity intent without being treated as a literal catalog search. |
includeTags |
array | no | Relevant tags that candidates should cover. At least one must match when provided. |
preferredTags |
array | no | Soft preference tags that improve intentFit and tagCoverage. |
excludeTags |
array | no | Tags that disqualify candidates. |
genre |
string | no | — |
tag |
string | no | — |
priceBand |
string | no | — |
minPositiveRatio |
number | no | — |
minReviewCount |
integer | no | — |
sort |
string | no | — |
direction |
string | no | — |
personalization |
string | no | For self-directed requests, offer library personalization once when describe_storefront reports personalizationAvailable true, unless the user declines or requests an immediate answer. Use local_library only after explicit opt-in and a successful get_taste_profile call. Always use none when personalization is unavailable or the recipient is someone_else, shared_group, or unspecified. |
recipientContext |
string | no | Use self only when the user is choosing or buying the game for themselves. Never offer library personalization for someone_else or shared_group. For gifts, another person, a household or group, or an unclear recipient, use the matching non-self value and keep personalization set to none. |
excludeOwnedLocally |
boolean | no | Filter owned app IDs entirely inside the page. No owned IDs or titles are returned. |
presentation |
object | no | — |
ranking |
object | no | — |
Raw JSON schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"description": "Concise catalog search terms."
},
"queryScope": {
"type": "string",
"enum": [
"catalog",
"creator"
],
"default": "catalog",
"description": "Use creator for requests about games made or published by a named studio. Keep catalog for title, franchise, genre, tag, or experience requests so developer-name-only matches do not masquerade as game matches."
},
"workingHeadline": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Browser-authored present-tense headline shown immediately while the visible storefront is being curated, for example “Finding a cozy game for your weekend.”"
},
"reference": {
"type": "string",
"maxLength": 120,
"description": "A known game or franchise that anchors similarity intent without being treated as a literal catalog search."
},
"includeTags": {
"type": "array",
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": "Relevant tags that candidates should cover. At least one must match when provided."
},
"preferredTags": {
"type": "array",
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": "Soft preference tags that improve intentFit and tagCoverage."
},
"excludeTags": {
"type": "array",
"maxItems": 12,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": "Tags that disqualify candidates."
},
"genre": {
"type": "string",
"maxLength": 80
},
"tag": {
"type": "string",
"maxLength": 80
},
"priceBand": {
"type": "string",
"enum": [
"All prices",
"Free",
"Under $10",
"$10–$29.99",
"$30–$59.99",
"$60+"
]
},
"minPositiveRatio": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"minReviewCount": {
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"sort": {
"type": "string",
"enum": [
"ownersMax",
"title",
"priceCents",
"positiveRatio",
"reviewCount",
"ccu",
"releaseYear"
]
},
"direction": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"personalization": {
"type": "string",
"enum": [
"none",
"local_library"
],
"default": "none",
"description": "For self-directed requests, offer library personalization once when describe_storefront reports personalizationAvailable true, unless the user declines or requests an immediate answer. Use local_library only after explicit opt-in and a successful get_taste_profile call. Always use none when personalization is unavailable or the recipient is someone_else, shared_group, or unspecified."
},
"recipientContext": {
"type": "string",
"enum": [
"self",
"someone_else",
"shared_group",
"unspecified"
],
"default": "unspecified",
"description": "Use self only when the user is choosing or buying the game for themselves. Never offer library personalization for someone_else or shared_group. For gifts, another person, a household or group, or an unclear recipient, use the matching non-self value and keep personalization set to none."
},
"excludeOwnedLocally": {
"type": "boolean",
"default": true,
"description": "Filter owned app IDs entirely inside the page. No owned IDs or titles are returned."
},
"presentation": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": [
"grid",
"list",
"table",
"ranking"
]
},
"highlightFields": {
"type": "array",
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"intentFit",
"tagCoverage",
"positiveRatio",
"reviewCount",
"ownersMax",
"ccu",
"releaseYear",
"averageForever",
"publisher"
]
}
}
},
"required": [
"mode"
]
},
"ranking": {
"type": "object",
"additionalProperties": false,
"properties": {
"factors": {
"type": "array",
"minItems": 1,
"maxItems": 5,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"field": {
"type": "string",
"enum": [
"intentFit",
"tagCoverage",
"positiveRatio",
"reviewCount",
"priceCents",
"ownersMax",
"ccu",
"averageForever",
"releaseYear"
]
},
"weight": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1
},
"direction": {
"type": "string",
"enum": [
"higher",
"lower"
]
},
"label": {
"type": "string",
"maxLength": 40
}
},
"required": [
"field",
"weight",
"direction"
]
}
}
},
"required": [
"factors"
]
}
},
"required": [
"query",
"workingHeadline"
]
}
Similar websites
cleardose-webmcp-demo.netlify.app
See the ClearDose WebMCP use case, shared Vue and Pinia architecture, demo workflow, source repository, and submission readiness.
4over4.com
4OVER4.COM prints 1,000+ custom products on 60+ paper stocks in Queens, with same-day shipping on most orders and 150,000+ businesses served since 1999.
camdentools.com
Construction tools and equipment
autolab.run
Super intelligence for car lovers. A WebMCP vehicle configurator, an agentic owner's guide with a live digital twin, and the 3D creation engine that measures th…