# Banner Check for ChatGPT — development integration

Banner Check has an optional MCP Apps integration for ChatGPT. Public-directory
publication and real-host acceptance are not yet complete. The website remains a
fully static local validator and does not depend on this integration.

For the skill, CLI, and ChatGPT overview, see [Skill & MCP](https://bannercheck.org/skill).

## Developer connection

The MCP service is deployed for testing at `https://mcp.bannercheck.org/mcp`.
DNS, trusted HTTPS, and MCP tool/resource discovery were verified on 2026-10-02.
Real ChatGPT acceptance and public-directory publication remain pending.

Open [ChatGPT Plugins](https://chatgpt.com/plugins),
choose **+ → Create MCP App**, enter `https://mcp.bannercheck.org/mcp`, and
select **No authentication**. Review the custom-server notice before creating
the connection. This path was available in the tested account without a Developer
mode toggle; other accounts may expose it under Settings → Security and login.
See the [official connection guide](https://developers.openai.com/plugins/deploy/connect-chatgpt)
for current availability and account/workspace requirements.

## Workflow

Ask ChatGPT to open Banner Check, choose a ZIP/HTML file from your device inside
the widget, select a network, and inspect the report. Pasted HTML is also supported.
Checks run in the browser using the same engine as the website.

Click **Explain in ChatGPT** to share only the network, verdict, check counts,
up to five fixed check categories with severities, and an omitted issue count.
The summary is versioned and marked as an untrusted browser-computed result.
It is not a server attestation or a guarantee of acceptance by an ad network.

The plugin never shares raw HTML, ZIP bytes, asset data, filenames, external URLs,
or detailed evidence. Changing the file or network invalidates the prior shared
context. Unshared reports remain inside the widget and disappear when it closes.

Conversation attachments are not accessible to these tools. To keep the creative
on your device, select it **inside Banner Check**, rather than attaching it to the
ChatGPT conversation. Live preview and automatic fixes remain in the web validator
in this first version; the plugin does not execute banner scripts or embed subframes.

## Remote MCP tools

- `open_banner_check({ networkId? })`: opens the local validator UI, optionally
  selecting a supported network. Returns `schemaVersion: "1"`,
  `status: "awaiting_local_file"`, and `networkId` or `null`. This changes the
  visible interface and is not a read-only tool. It has not validated a banner.
- `list_supported_networks({})`: public network IDs, labels, and package limits.
- `get_network_requirements({ networkId })`: public requirements from the same
  rules as the website's native WebMCP tool. The remote requirements output uses schema
  version `"3"` and adds click-zone policy and public documentation links; the
  native WebMCP requirements output remains version `"2"`. Use the list tool for
  supported IDs rather than inventing IDs.
- `compare_network_requirements({ networkIds })`: compare 2–5 distinct supported
  networks, returning their requirements in requested order and the policy fields
  that differ. This compares public rules, not a banner's compatibility.
- `get_check_guidance({ checkId, networkId? })`: general explanations and suggested
  fixes for a fixed check category, optionally with that network's requirements.
  It never receives evidence or diagnoses unseen banner contents.
- `get_webmcp_info({})`: the website's native browser tools, support requirements,
  usage, privacy, and documentation links. It does not probe your browser or call
  tools in its tab. These three new tool outputs use schema version `"1"`.

## Reference resources

MCP clients that support resource discovery can read these public references:

- `banner-check://rules/networks` — versioned JSON snapshot of supported-network
  requirements, the repository ruleset date, policy confidence, and source links.
- `banner-check://guides/usage` — Markdown guide to workflows, privacy, and limits.
- `banner-check://guides/webmcp` — the same JSON returned by `get_webmcp_info`.

The existing `ui://banner-check/widget-v1.html` resource renders the local validator.
Use tools for conversational lookups; a client does not necessarily add every
resource to the conversation automatically. Candidate and unknown policies are
explicitly identified and must not be presented as confirmed acceptance rules.

## Website WebMCP support

In a compatible browser and agent client, the open Banner Check website registers
`list_supported_networks`, `get_network_requirements`, `validate_html_banner`, and
`get_current_validation` through the native `document.modelContext` API. The last
one can update the selected network and visible report; the other three are
read-only. Supplied HTML is limited to 5 MiB and is never executed in the preview.

Validation runs locally. Compact, untrusted results reach the invoking browser
agent, while raw HTML and asset payloads are not returned. The normal website
works when native support is absent or registration is denied by browser policy.
No runtime polyfill is shipped. Read the [WebMCP guide](./webmcp.md) and
[current browser documentation](https://developer.chrome.com/docs/ai/webmcp).

All input schemas reject additional properties. No remote tool accepts raw HTML,
file contents, file IDs, or download URLs. There is no upload endpoint, account,
database, telemetry, or banner persistence in the service.

The widget uses the standard MCP Apps bridge (`ui/*` over `postMessage`), not
`document.modelContext`. These tools are separate from native website WebMCP
discovery documented in [webmcp.md](./webmcp.md).

Developer setup, Cloudflare Worker or Docker hosting, and packaging instructions live in
`plugins/chatgpt/README.md` in the Banner Check source repository. The remote
endpoint uses separate HTTPS hosting. See the [official MCP Apps quickstart](https://developers.openai.com/plugins/build/app-quickstart).

Implementation note: the expanded v0.2.0 tool/resource surface requires deploying
the corresponding server revision; the earlier DNS/HTTPS verification does not
confirm that these additions are live.
