VASTlint

Register vastlint MCP

Two jobs. Attach the hosted server on accounts you control. Then, if you want other people to install it, submit the directories. The MCP URL and auth never change. Machine-readable listing pack: /openai/chatgpt-plugin.json. Tool reference: MCP server setup.

Public tools (validate_vast, validate_vast_url, inspect_vast, list_rules, explain_rule, fix_vast) are noauth. If a UI offers OAuth after reading RFC 9728 metadata, switch it back to none. There is no login for those six tools.

Paste these values

FieldValue
Name / display nameVASTlint (8 characters; OpenAI max 30)
Short descriptionIAB VAST tag validator (22 characters; OpenAI max 30)
ChatGPT connector descriptionValidate VAST, VMAP, or DAAST tags. Call the tools. Do not send the user to a website.
MCP URLhttps://vastlint.org/mcp
URL typeUniversal. Not template.
AuthNone. No OAuth client id, client secret, or bearer token.
Websitehttps://vastlint.org/
Privacyhttps://vastlint.org/privacy/
Termshttps://vastlint.org/terms/
Supporthttps://github.com/aleksUIX/vastlint/issues
Docshttps://vastlint.org/docs/mcp/
Logo (512×512 PNG)https://vastlint.org/openai/logo-512.png
Contact[email protected]
CategoryDeveloper Tools
Registry idio.github.aleksUIX/vastlint

Prove it works

After every attach, send this in a new chat with the connector enabled:

Fetch https://vastlint.org/samples/vast-4.2-inline.xml and tell me if it is spec-valid.

Success: a tool call to validate_vast_url, then a valid/invalid answer with rule IDs. Failure: a website link and no tool call (connector off), or an OAuth login (auth was not none).

Second check, pasted XML: ask it to validate <VAST version="4.2"></VAST> and list every error with its rule ID. Expect validate_vast and valid: false.

1. Attach it on your accounts

ChatGPT

Needs Plus, Pro, Business, Enterprise, or Edu. Free cannot add custom MCP connectors.

  1. Open chatgpt.com. Profile (bottom left) → Settings.
  2. Apps & Connectors → Advanced Settings → Developer Mode on. Reload if Create is missing.
  3. Apps & Connectors → Create (top right).
  4. Name: VASTlint. Description: Validate VAST, VMAP, or DAAST tags. Call the tools. Do not send the user to a website. MCP server URL: https://vastlint.org/mcp. Authentication: None (sometimes labelled No Authentication).
  5. Check any confirmation box. Create.
  6. If ChatGPT starts an OAuth login, cancel. Edit the connector and set Authentication to None. RFC 9728 metadata lists an authorization server for AdCP; it is not a ChatGPT login.
  7. New chat. Open the composer tools / sources control. Enable VASTlint. Saved is not the same as on for this conversation.
  8. Paste the prove-it prompt. Confirm the tool call if asked.

Docs: Developer Mode and MCP connectors.

Claude.ai

Works on Free (one custom connector), Pro, and Max. Team/Enterprise: Owner adds it first.

  1. claude.ai → Customize → Connectors → Add custom connector.
  2. Remote MCP server URL: https://vastlint.org/mcp. Name: VASTlint.
  3. Leave OAuth client id and secret empty. Do not add request headers. Add.
  4. In the chat, Connect / enable VASTlint, then paste the prove-it prompt.

Team or Enterprise Owner: Organization settings → Connectors → Add → Custom → Web. Same URL. Members then Customize → Connectors → Connect. Docs: custom connectors using remote MCP.

Claude Desktop

Prefer the in-app Connectors UI if you see it (same URL, no OAuth). Otherwise edit the config and merge. macOS: ~/Library/Application Support/Claude/claude_desktop_config.json. Windows: %APPDATA%\Claude\claude_desktop_config.json.

{
  "mcpServers": {
    "vastlint": {
      "type": "sse",
      "url": "https://vastlint.org/mcp"
    }
  }
}

Quit Claude Desktop fully (not just the window) and reopen. Tools / hammer should list vastlint.

Claude Code

claude mcp add --transport http vastlint https://vastlint.org/mcp

No --header. Then claude mcp list. In a session, /mcp should show vastlint connected. If it opens a browser login, the transport or auth was wrong.

Docs: Connect Claude Code to tools via MCP.

Cursor

Cursor Settings → MCP → Add new MCP server. Or edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this repo):

{
  "mcpServers": {
    "vastlint": {
      "url": "https://vastlint.org/mcp"
    }
  }
}

No auth block, no headers. Reload MCP. If an older build wants an explicit transport, add type: sse with the same URL. Ask the agent to validate a VAST tag.

VS Code / GitHub Copilot

Command Palette → MCP: Open User Configuration, or workspace .vscode/mcp.json:

{
  "servers": {
    "vastlint": {
      "type": "http",
      "url": "https://vastlint.org/mcp"
    }
  }
}

Start the server in the MCP view. Copilot Chat must be in Agent mode. Docs: Add MCP servers in VS Code.

Windsurf

Cascade → Configure MCP, or edit ~/.codeium/windsurf/mcp_config.json. Paste:

{
  "mcpServers": {
    "vastlint": {
      "type": "sse",
      "url": "https://vastlint.org/mcp"
    }
  }
}

Restart Cascade. Confirm vastlint in the MCP list, then send the prove-it prompt.

Gemini CLI

Consumer Gemini at gemini.google.com cannot add custom MCP. Use the CLI or AI Studio.

gemini mcp add --transport http vastlint https://vastlint.org/mcp

Or merge this into ~/.gemini/settings.json or project .gemini/settings.json:

{
  "mcpServers": {
    "vastlint": {
      "httpUrl": "https://vastlint.org/mcp"
    }
  }
}

Then gemini mcp list. Docs: Gemini CLI MCP servers.

Google AI Studio

  1. Open aistudio.google.com and start a chat.
  2. Tools (or MCP servers) in the sidebar → Add MCP server.
  3. Name: VASTlint. URL: https://vastlint.org/mcp. Authentication: none. No bearer token.
  4. Connect. Send the prove-it prompt.

If Tools has no MCP option yet, use Gemini CLI. Gemini Enterprise custom MCP is a Google Cloud product with its own OAuth fields; do not fill those for this public endpoint.

2. List it so other people can install it

OpenAI plugin directory (ChatGPT and Codex)

This is a directory listing. Users still install the plugin after you publish. Copy every field from chatgpt-plugin.json. Limits: display name and short description 30 characters; starter prompts at most 3, one line, 128 characters; exactly 5 positive and 3 negative test cases.

  1. OpenAI Platform → the vastlint org. Organization settings: verify developer or business identity. Role for the submitter: Apps Management = Write. Reload plugin submission.
  2. Create plugin → With MCP.
  3. Info: name VASTlint, short description IAB VAST tag validator, long description from the JSON long_description, developer identity, category Developer Tools, logo logo-512.png, website / privacy / terms / support from the table.
  4. MCP: Universal. URL https://vastlint.org/mcp. Authentication none. No demo credentials. No screenshots (no plugin UI). Skip CSP unless the form refuses to continue; this listing has no component fetch domains.
  5. Scan Tools. You should see the six public tools. Ignore AdCP tools if they appear.
  6. Domain verification: the portal prints a token. Put that exact string, one line, no extra whitespace, in apps/vastlint-web/public/.well-known/openai-apps-challenge in vastlint-infra. Commit, push, wait for Pages. Then Verify Domain. ChatGPT GETs https://vastlint.org/.well-known/openai-apps-challenge and must receive only that token as text/plain. A 404 means the file is not shipped yet.
  7. Prompts: paste the three starter_prompts. Testing: paste the five test_cases and three negative_test_cases. Justifications: paste from annotation_justifications for each public tool.
  8. Record a short demo of ChatGPT (connector on) running the prove-it prompt. Paste that video URL into the demo-recording field. Unlisted YouTube is fine.
  9. Release notes: use release_notes from the JSON. Attest. Submit for review. After approval, publish from the portal.

Claude connectors directory

  1. Needs a Claude Team or Enterprise org. Owner (or Directory / Libraries role).
  2. Attach https://vastlint.org/mcp as a custom connector first. Prove it works in Claude.ai.
  3. Claude.ai → Organization settings → Directory (or Connectors directory submission).
  4. Production URL: https://vastlint.org/mcp. Transport: Streamable HTTP or SSE (both work on this host). Auth: none. Name: VASTlint. Slug: vastlint (permanent; do not change later). Tagline: Validate VAST, VMAP, and DAAST tags against IAB specs (53 characters; max 55). Icon: the 512 PNG. Privacy, support, docs from the table.
  5. Confirm synced tools have titles and readOnly / destructive hints. Submit.

Docs: remote MCP connectors.

MCP Registry

Already published as io.github.aleksUIX/vastlint. Confirm: registry listing. New versions refresh from vastlint/crates/vastlint-mcp/server.json on release. Do not create a second listing.

Smithery

Already listed: smithery.ai/servers/aleksander/vastlint. Update there only if the hosted URL or description drifts.

3. Optional extras

ChatGPT Custom GPT Actions

Create a GPT. Import Actions from https://vastlint.org/openapi/validate.json. No auth. This is POST /api/validate for pasted XML only. Live tag URLs still need the MCP connector (validate_vast_url).

If it fails

  • Website link, no tool: the connector is off for that chat, or you are on ChatGPT Free.
  • OAuth popup: set Authentication to None. Do not paste an API key. Protected AdCP tools on the same host are not for these clients.
  • Scan Tools wants OAuth: stay on none, scan again, list only the six public tools in the submission.
  • Domain verify fails: the challenge file must be exactly the portal token, one line, live at https://vastlint.org/.well-known/openai-apps-challenge, status 200, body not HTML.
  • OpenAI rejects short description: it must be 30 characters or fewer. Use IAB VAST tag validator.
  • Claude directory missing: you need a Team/Enterprise org, not a Pro personal account.

Done when

  • ChatGPT with VASTlint enabled calls validate_vast_url on the sample tag.
  • Claude.ai, Desktop, or Claude Code does the same.
  • Cursor or Copilot does the same.
  • Gemini CLI or AI Studio does the same.
  • OpenAI plugin: identity verified, Scan Tools on auth none, domain verified, 5+3 tests pasted, submitted (or live).
  • Claude directory submitted or live, if you have a Team org.