Replies: 1 comment 1 reply
-
|
Thanks for drafting this proposal @yannj-fr :)!
Appart from the proposed format and location of meta, something remains unclear for me after reading your proposal: which agents are you targeting with this proposal? If it's browsing agents (Firecrawl, Browser Use, Atlas...), which by definition are goods at using a browser, I'd argue WebMCP should be the discovery mechanism. I believe there already was a suggestion made by @tonxxd in WebMCP discussion group on exposing existing MCP server (and by extension, why not MCP app) as a meta tag on website. <meta name="mcp-endpoint" content="https://my-mcp-server.com/mcp">I had also the crazy idea of replacing web app with MCP app in case a browsing agent ends up on your website and decides to use one of the view-backed tool of your MCP proxied using If it's conversational agents (ChatGPT, Claude.ai, Le Chat...), they'll probably rely on their respective registries/stores to find an existing MCP app before firing a web fetch. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Pre-submission Checklist
Your Idea
Related:
.well-known.well-known/mcpdirectoryDisclaimer
This discussion could also be brought more generically to broadcast any MCP server from a website (without colliding with WebMCP).
Problem Statement
MCP Apps (
ext-apps) bring interactive UIs to AI conversations -a streaming service can surface a video player, an e-commerce site can render a checkout form, a data platform can display a live dashboard. The extension is now supported by Claude, ChatGPT, VS Code Copilot, Goose, Postman, and others.But discovery is still a blind spot. When an MCP-capable platform crawls or cites a website, it has no way to know that the site publishes an MCP App. The platform would need to speculatively probe
/.well-known/mcp.jsonon every visited domain, which is impractical. And even if it found the server, it wouldn't know the server exposes interactiveui://resources -that information is only available after connecting and inspecting tool metadata.Concrete example: M6+ (m6plus.fr), a French streaming platform, publishes an MCP App that lets users search the catalog, view program details, and get personalized recommendations -all rendered as rich UI inside the conversation. M6+ also lists this app on specific platforms:
https://chatgpt.com/apps/m6plus/asdk_app_69b7c7a99cd88191b6f7e938c1ab78dchttps://claude.ai/connectors/m6plus(hypothetical)Today, none of these facts are machine-discoverable from
m6plus.fritself. A user browsing the M6+ website through an MCP-capable agent gets no signal that a richer, interactive integration exists.Proposed Solution
A JSON-LD vocabulary that website owners embed in their HTML
<head>to declare:This leverages a format that every major crawler already parses (92% of AI and commercial crawlers attempt JSON-LD first, per the W3C Crawler Transparency Report). No new protocol to support -just structured metadata in a place crawlers already look.
How it fits the ecosystem
.well-known/mcp.json(SEP-1649)ext-appsspec (ui://scheme)JSON-LD Schema
Context
Minimal Example
The absolute minimum -"this site has an MCP App":
Three lines of meaningful data. An MCP client parsing this page now knows exactly where to connect.
Extended Example
Rich metadata for display, pre-filtering, and platform deep-linking:
Multiple Apps
A site exposing several MCP Apps (e.g., a public catalog browser and a subscriber-only player):
Schema Definition
mcp:MCPAppmcp:endpointUrlURLmcp:namestringmcp:descriptionstringmcp:extensionIdstringio.modelcontextprotocol/uifor appsmcp:protocolVersionstring2025-11-25)mcp:serverCardUrlURL.well-known/mcp.jsonfor full server detailsmcp:platformLinksmcp:PlatformLink[]mcp:iconUrlURLmcp:documentationUrlURLmcp:statusstringactive,beta,deprecatedmcp:datePublishedDatemcp:PlatformLinkLinks to the app's listing on specific AI platforms. This is purely informational -it tells crawlers and users where this app is already available, enabling deep-linking into platform-specific install flows.
mcp:platformstringmcp:urlURLmcp:labelstringPlatform identifiers (non-exhaustive, extensible):
mcp:platformchatgpthttps://chatgpt.com/apps/{name}/{id}claudehttps://claude.ai/connectors/{name}copilothttps://copilot.microsoft.com/apps/{id}geminihttps://gemini.google.com/extensions/{id}goosevscodevscode:extension/{publisher}.{name}New platforms self-register by choosing an identifier and documenting their URL pattern. No central gatekeeper.
Container Properties (on
schema:WebSite)mcp:appmcp:MCPAppmcp:appsmcp:MCPApp[]Why
mcp:platformLinks?MCP is platform-agnostic by design -the same server works with ChatGPT, Claude, Copilot, and any MCP-compatible host. But in practice, each platform has its own app catalog with its own install flow and listing URL.
mcp:platformLinksbridges this gap:For crawlers: When ChatGPT crawls
m6plus.frand finds amcp:PlatformLinkwith"mcp:platform": "chatgpt", it can directly link the user to the install page instead of asking them to configure a raw MCP endpoint. Same logic for Claude, Copilot, etc.For users: A human reading the JSON-LD (or a directory built from it) immediately sees where the app is available and can click through to their preferred platform.
For app developers: A single JSON-LD block replaces the need to maintain separate discovery mechanisms for each platform. Update the markup once, all crawlers pick it up.
The field is optional -a site can declare
mcp:endpointUrlonly, and any MCP client can connect directly. Platform links are a convenience layer, not a requirement.Use Cases
1. Opportunistic Discovery During Browsing
An MCP client (Claude, ChatGPT with browse, a browser extension) visits
m6plus.fr/shows/top-chef. It parses the JSON-LD, discovers the MCP App, and surfaces a contextual prompt: "M6+ has an interactive app -search the catalog and get recommendations directly here?" If the user accepts, the client connects tomcp:endpointUrland theui://resources render inline.2. Platform-Aware Deep Linking
ChatGPT crawls
m6plus.frand finds its own platform link inmcp:platformLinks. When citing M6+ content, it can say: "M6+ is also available as a ChatGPT app -open it here". The user gets a one-click install path instead of a raw endpoint URL.3. Cross-Platform App Directory
A third-party service crawls the web for
mcp:MCPAppJSON-LD entries and builds a universal MCP App directory -showing, for each app, which platforms it's listed on (viamcp:platformLinks) and the raw MCP endpoint for direct connection. This is the missing "Yellow Pages" for MCP Apps.4. Registry Enrichment
The MCP Registry crawls JSON-LD as a complementary discovery signal. When a new
mcp:MCPAppentry is found on a domain not yet in the registry, it's flagged for automatic indexing. Platform links provide additional metadata the registry can surface (e.g., "also available on ChatGPT").5. SEO for AI
Just as schema.org markup helps websites appear in rich search results,
mcp:MCPAppmarkup helps apps appear in AI agent recommendations. A site that declares its MCP App in JSON-LD is more likely to be recommended for interactive use by agents that parse structured data during retrieval.Security Considerations
Domain alignment.
mcp:endpointUrlmust share the same registrable domain as the page serving the JSON-LD (or be explicitly authorized via CORS/DNS). A page onexample.comcannot advertise an MCP App atevil.com.Platform link validation. Crawlers should verify that
mcp:PlatformLinkURLs actually resolve and point to a legitimate app listing. A link tochatgpt.com/apps/...that 404s or redirects to a phishing page should be ignored.Public metadata only. No secrets in markup -ever. Auth details are limited to the type of scheme and the public authorization URL. Credentials flow through the MCP protocol's own auth mechanisms.
Spoofing. A malicious site could embed JSON-LD with
"mcp:name": "Netflix"on an unrelated domain. Clients must display the actual domain of the endpoint, not the self-declared name, when prompting users to connect. Themcp:platformLinksoffer some defense here: a legitimate app will have valid platform listings, a spoofed one won't.Implementation Path
Publish the JSON-LD context at
modelcontextprotocol.io/schemas/app-discovery/v1with the vocabulary and a validating JSON Schema.Document it alongside ext-apps. Add a "Web Discovery" section to the MCP Apps documentation, with copy-paste JSON-LD snippets and integration guidance.
Add
uito the capabilities vocabulary. The current MCP spec definestools,resources, andprompts. Apps needuias a first-class capability signal so crawlers can distinguish apps from headless servers without connecting.Pilot with early adopters. Work with sites already deploying MCP Apps (M6+, etc.) to add JSON-LD and measure discovery rates.
Add JSON-LD parsing to MCP client SDKs. The TypeScript and Python ext-apps SDKs could include a utility to extract
mcp:MCPAppentries from HTML -making opportunistic discovery trivial for client authors.Platform link registry. Maintain a lightweight list of known
mcp:platformidentifiers and their URL patterns, either in the spec or as a community-maintained file in the ext-apps repo.Open Questions
Should
mcp:platformLinksuse a closed or open platform registry? The current proposal uses an open set of string identifiers. An alternative: require platforms to register their identifier and URL pattern in a YAML/JSON file in the ext-apps repo, similar to IANA media type registration.Page-level vs. site-level placement. Should JSON-LD appear only on the homepage, or can it be page-specific? A product page could declare an app scoped to that product category, but this adds complexity.
<link>tag shorthand. For the minimal case (one app, one endpoint), a<link rel="mcp-app" href="https://mcp.m6plus.fr/v1">is simpler than a full JSON-LD block. Define both?Multi-tenant platforms. Shopify, Wix, etc. host millions of sites. Should tenants embed per-store JSON-LD pointing to a shared multi-tenant MCP App, or should the platform declare a single app with a tenant routing mechanism?
Relationship to OpenAI Apps SDK. OpenAI's Apps SDK now supports MCP as a first-class integration path. Should
mcp:platformLinksforchatgptpoint to the Apps SDK listing, the ChatGPT app store URL, or both?Summary
MCP Apps are the interactive frontier of MCP -but they're invisible to the web. This proposal adds a single JSON-LD block to fix that:
mcp:MCPAppdeclares the app exists and where to connect.mcp:platformLinks(optional) tells crawlers where the app is already listed, per platform.The format is JSON-LD because crawlers already parse it. The vocabulary is MCP-namespaced because it's MCP-specific. The platform links are optional because MCP is platform-agnostic -but pragmatically, users want one-click install, not raw endpoint URLs.
We're looking for feedback on the schema, the platform link model, and the right level of detail for the JSON-LD payload.
Scope
Beta Was this translation helpful? Give feedback.
All reactions