WebMCP · Developer reference · Updated September 9, 2026

WebMCP documentation

Everything an agent builder or a curious maker needs: how to turn WebMCP on, how to check the tools are there, what each tool takes and returns, and what goes wrong. Generated from the same registry the browser uses.

When you are signed in on a plan that includes WebMCP, every page on launchto.win registers 3 tools with document.modelContext. An AI agent running in your browser can discover and call them. The calls run in the page with your own session, so the agent can only do what you could do, and only here.

What is WebMCP?

WebMCP is a proposed web standard, developed in the W3C Web Machine Learning community group, that lets a web page register tools for AI agents. A tool is a named JavaScript function with a description and a JSON schema for its input. The page registers it with document.modelContext; an agent running in the browser lists the tools, reads the schemas, and calls the ones it needs. It is the web-page side of the Model Context Protocol: the same tool shape MCP uses between a model and a server, but living in the page and running with the signed-in user's own session.

That last part is the point. An agent using WebMCP does not need an API key, a separate server or a scraped DOM. It uses the site the way you would, with your permissions, and the site decides exactly what it exposes. On launchto.win the tools expose your launch packages, so an agent can read a product's name, descriptions at every length, logo, screenshots and pricing, and fill a directory's submission form from them.

Enable it

WebMCP is a W3C community group proposal and support is early. launchto.win has joined the Chrome and Edge origin trial, so a current Chrome or Edge exposes the API on this site without any flags. For a local build, or a browser outside the trial, enable the testing flag.

BrowserStatusNotes
Chrome 149+ Origin trial Origin trial on launchto.win. For local builds, enable the testing flag and restart.
Edge 150+ Origin trial Same engine and same origin trial as Chrome.
Brave Experimental Experimental support inside Leo, Brave's built-in assistant.
ChatGPT desktop Experimental Reported as supporting WebMCP tools when browsing a page.
Firefox Under review Standards position under review, no implementation.
Safari Under review Standards position under review, no implementation.

To enable the testing flag in Chrome or Edge, open chrome://flags/#enable-webmcp-testing, set it to Enabled and restart the browser. Then sign in here on Maker or Shipaholic. The tools register on the next page load.

Verify it

This browser, right now

Checking for WebMCP…

Sign in on Maker or Shipaholic to see the tools register on this page.

To check from the console on any launchto.win page, list the registered tools. You should see list-packages, get-package, create-package.

(await (document.modelContext ?? navigator.modelContext).getTools()).map(t => t.name)

Older previews without getTools still register through provideContext; in that case window.__l2wWebmcp.tools lists what launchto.win registered.

Tool reference

Each tool is a named function with a description and a JSON Schema for its input, the same shape as a tool in the Model Context Protocol. The result is an MCP tool result: one text content item holding the JSON body, with isError set when the request did not succeed.

list-packages

GET /webmcp/packages

List the signed-in user's launch packages on Launch to Win, with slug, tagline, completeness percentage, and whether another package can be created on the current plan.

Input

No input. Pass an empty object.

Example call

{}

Returns

A JSON object with the packages (name, slug, url, tagline, completeness, created_at), the count, the plan's package limit and a can_create_package flag.

{
  "packages": [
    {
      "name": "Acme Analytics",
      "slug": "acme-analytics",
      "url": "https://acme.example",
      "tagline": "Product analytics for indie SaaS",
      "completeness": 92,
      "created_at": "2026-08-14T09:12:00Z"
    },
    {
      "name": "Draftly",
      "slug": "draftly",
      "url": "https://draftly.example",
      "tagline": "Write release notes from your commits",
      "completeness": 64,
      "created_at": "2026-09-01T16:40:00Z"
    }
  ],
  "count": 2,
  "package_limit": 5,
  "can_create_package": true
}

get-package

GET /webmcp/packages/{slug}

Fetch the full launch package document for one of the user's packages: name, descriptions in three lengths, pricing, categories, keywords, platforms, maker info, social links, logo and screenshot URLs.

Input

FieldTypeDescription
slug required string The package slug, as returned by list-packages.

Example call

{
  "slug": "acme-analytics"
}

Returns

The package document (schema_version 1.0), the same JSON the Chrome extension consumes. See the package document section for every field.

See the package document below for the full shape.

create-package

POST /webmcp/packages

Create a new launch package for the signed-in user. Only name is required — when a url is given, Launch to Win enriches the package (metadata, logo, socials) in the background. Returns the created package document.

Input

FieldTypeDescription
name required string Product name (2–100 characters).
url string Product website URL; triggers background enrichment.
tagline string One-line pitch.
description string Long description (up to 1000 characters).
description_short string Short pitch (up to 200 characters).
description_medium string Medium pitch (up to 600 characters).
keywords string Comma-separated keywords.
contact_email string Contact email shown to directories that ask for one.
alternative_to string Established product this is an alternative to.
maker_name string Name of the maker or team.
maker_bio string One or two sentences about the maker.
launch_date string ISO 8601 date (YYYY-MM-DD).
pricing_model string (free, freemium, subscription, one_time, lifetime, paid, contact) Pricing model.
price_amount number Price in the given currency, e.g. 19.
price_currency string Currency code, e.g. USD.
price_period string Billing period, e.g. month or year.
platforms array of string (web, ios, android, mac, windows, linux, cli, api, chrome, browser-extension) Platform slugs: web, ios, android, mac, windows, linux, cli, api, chrome, browser-extension.
twitter_url string X / Twitter profile URL.
github_url string GitHub repository or organisation URL.
linkedin_url string LinkedIn page URL.
facebook_url string Facebook page URL.
instagram_url string Instagram profile URL.
youtube_url string YouTube channel URL.

Example call

{
  "name": "Acme Analytics",
  "url": "https://acme.example",
  "tagline": "Product analytics for indie SaaS",
  "pricing_model": "freemium",
  "platforms": [
    "web",
    "api"
  ]
}

Returns

The created package document with HTTP 201. Enrichment from the URL runs in the background, so descriptions, logo and screenshots fill in over the following minute.

See the package document below for the full shape.

Package document

get-package and create-package return the package document, schema version 1.0. It is the same JSON the Chrome extension consumes, so an agent and the extension always see identical data. The example below is generated through the real serializer.

{
  "schema_version": "1.0",
  "name": "Acme Analytics",
  "slug": "acme-analytics",
  "url": "https://acme.example",
  "tagline": "Product analytics for indie SaaS",
  "descriptions": {
    "short": "Privacy-friendly product analytics you can set up in an afternoon.",
    "medium": "Acme Analytics shows indie SaaS teams which features get used and where people drop off, without cookies or a data team. One script tag, dashboards on day one.",
    "long": "Acme Analytics is product analytics for small SaaS teams. Add one script tag and you get funnels, retention and feature usage for every plan, with no cookie banner because no personal data is stored. It replaces a spreadsheet of Mixpanel exports for teams of one to ten."
  },
  "screenshots": [
    "https://launchto.win/rails/active_storage/blobs/proxy/…/dashboard.png"
  ],
  "categories": [
    "Analytics",
    "Developer tools"
  ],
  "keywords": [
    "analytics",
    "product analytics",
    "privacy",
    "saas"
  ],
  "pricing": {
    "model": "freemium",
    "amount": 19.0,
    "currency": "USD",
    "period": "month",
    "display": "Freemium — from $19 / month"
  },
  "platforms": [
    "web",
    "api"
  ],
  "launch_date": "2026-09-15",
  "maker": {
    "name": "Jamie Doe",
    "bio": "Solo developer shipping small SaaS tools since 2019."
  },
  "alternative_to": "Mixpanel",
  "links": {
    "twitter": "https://x.com/acmeanalytics",
    "github": "https://github.com/acme/analytics"
  },
  "generated_at": "2026-09-04T10:00:00Z",
  "logo": "https://launchto.win/rails/active_storage/blobs/proxy/…/logo.png"
}
FieldMeaning
schema_versionDocument version, currently 1.0. Bumped only for breaking changes.
name, slug, urlProduct name, the slug used by get-package, and the product URL.
taglineOne line, the shortest pitch.
descriptions.short / medium / longCopy at three lengths (about 200, 600 and 1000 characters). Each falls back to the next available length, so none is ever empty when the package has any description.
logo, screenshotsAbsolute URLs served by launchto.win. Fetch them with the user's session to attach to file inputs.
categories, keywordsCategory names and a list of keywords.
pricingmodel (one of the pricing_model values), amount, currency, period and a ready-made display string.
platformsPlatform slugs from the same list create-package accepts.
launch_dateISO 8601 date or absent.
makername and bio; name falls back to the account's display name.
alternative_toThe established product this competes with.
linksOnly the social links that are set: twitter, github, linkedin, facebook, instagram, youtube.
generated_atWhen the document was built.

Errors and limits

Errors are JSON with an error string an agent can show the user. Validation errors add details; an invalid pricing model adds the accepted values. The MCP result carries the same body with isError: true.

StatusToolsWhenBody
401 list-packages
get-package
create-package
The session expired since the tools were registered. { "error": "Not signed in. Sign in to launchto.win in this browser and try again." }
403 list-packages
get-package
create-package
Signed in on a plan without WebMCP. { "error": "WebMCP access requires the Maker or Shipaholic plan. See https://launchto.win/pricing." }
403 create-package The plan's package limit is reached. { "error": "You've reached the package limit on the Maker plan. Upgrade at https://launchto.win/pricing to create more packages." }
404 get-package No package with that slug belongs to the signed-in user. { "error": "Package not found" }
422 create-package A field fails validation. { "error": "Package could not be created", "details": ["Name is too short (minimum is 2 characters)"] }
422 create-package pricing_model is not one of the allowed values. { "error": "'donationware' is not a valid pricing_model", "valid_pricing_models": ["free", "freemium", "subscription", "one_time", "lifetime", "paid", "contact"] }

Limits are the plan's: Maker allows 5 packages, Shipaholic has no cap. list-packages reports the limit and whether another package can be created, so an agent can check before calling create-package. There is no separate rate limit beyond the site's normal request throttling.

Prompts that work

Agents differ, but these produce good results with a capable in-browser agent. Keep the launchto.win tab open in the same browser, signed in.

Submit one product to one directory

“Open https://www.saashub.com/submit and fill the form using my Acme Analytics package from Launch to Win. Use the short description where the form wants one sentence and the long description elsewhere. Do not press submit; tell me when it is ready to review.”

Every package, one directory

“For each of my packages on Launch to Win, open https://www.saashub.com/submit, fill the form from that package, then stop and let me review before moving to the next one.”

Check what is missing before launch day

“List my Launch to Win packages and tell me which ones are under 80% complete. For each, read the package and list the empty fields a directory would ask for.”

Create a package from a URL

“Create a Launch to Win package for https://draftly.example called Draftly, pricing model freemium, platforms web and api. Then read it back and show me what was filled in.”

Two habits help. Ask the agent to stop before submit; nearly every directory wants a human on that button. And go directory by directory rather than product by product, so the agent stays on one form layout. The agent guide walks through the full workflow.

Security model

  • Registered only while signed in on an eligible plan. Signed-out visitors and Free plan accounts have no tools registered, so there is nothing for an agent to call.
  • Session and CSRF, no API tokens. The tools call session-authenticated JSON endpoints under /webmcp with the page's CSRF token. There is no long-lived credential to leak.
  • Same origin only. Tools are registered without the spec's exposedTo option, so they are visible only to agents on launchto.win pages, never to another site or an embedded frame.
  • Scoped to the account. Every endpoint reads and writes the signed-in user's own packages. A slug belonging to someone else returns 404.
  • Read and create, not delete. There is no tool to edit or delete a package. Anything an agent creates is visible in your dashboard and can be edited or removed there.
  • The agent is yours. WebMCP does not send data to Launch to Win's servers beyond the requests above. Which agent runs in your browser, and what it does with the results, is between you and that agent.

Changelog

WebMCP moves quickly. Every change to the tools, the endpoints or how they are registered is recorded here.

2026-09-09
Documentation gained a plain-language "What is WebMCP?" section and a FAQ; no tool changes.
2026-09-04
Tools are now registered on document.modelContext, following the spec's move away from navigator.modelContext; the old name is still tried as a fallback. Chrome origin trial token added. Tool definitions moved to one shared registry and this documentation published.
2026-09-03
WebMCP shipped: list-packages, get-package and create-package on Maker and Shipaholic plans.

Specification: https://webmachinelearning.github.io/webmcp/. Questions or an agent that does not work as documented: contact us.

FAQ

WebMCP questions

What is WebMCP?
WebMCP is a proposed web standard from the W3C Web Machine Learning community group that lets a web page register tools with document.modelContext: named functions with a JSON input schema and a description. An AI agent running in the browser can discover those tools and call them, in the page, with the user's own session and permissions. It is the web-page side of the Model Context Protocol.
Is WebMCP the same as MCP?
No. MCP (the Model Context Protocol) connects an AI model to a server-side tool over a transport the model host controls. WebMCP puts the tools in the web page itself, so a browser agent can use a site the way a person does, without an API key or a separate server. The tool shape is the same idea; where it runs is different.
Which browsers support WebMCP?
Chrome 149+ and Edge 150+ through an origin trial that launchto.win has joined, so no flags are needed here. Local builds and other Chromium browsers can enable the testing flag. Brave and the ChatGPT desktop app are experimental; Firefox and Safari have not implemented it. The browser table above is kept current.
How do I use WebMCP on launchto.win?
Sign in on the Maker or Shipaholic plan in a supported browser and every page registers the tools. Then point any in-browser agent at a directory's submission form and tell it to fill the form from your Launch to Win package. The agent reads the package with get-package; you review and press submit.
Can an agent submit to directories without me?
Not through WebMCP. The tools read and create launch packages; they do not submit anything. Filling a directory's form is the agent's job and pressing submit is yours. Fully automated submission is a separate, semi-automated feature on the Shipaholic plan.

Give your agent the real package.

Build a launch package, upgrade to Maker or Shipaholic, and your agent can read it through WebMCP.

Free plan available. No credit card required.