mcpField
V
Valid — Vehicle Identity Mcp Server

Valid — Vehicle Identity Mcp Server

Remote
github.com/infopronto-makerLegal & Government1Updated 18w ago
Repository

About Valid — Vehicle Identity Mcp Server

AI Agent Visibility is a Cloudflare Worker template that transforms site content into formats used by AI agents and crawlers. It enriches pages with Workers AI, caches results in KV, and serves discovery surfaces such as Markdown, JSON indexes, crawler directives, and JSON-LD.

Key features

  1. 01Enrich content with Workers AI
  2. 02Cache enriched pages in KV
  3. 03Serve llms.txt and Markdown pages
  4. 04Provide JSON indexes and JSON-LD
  5. 05Expose crawler directives and optional identity checks

Use cases

  1. 01Make site pages available in formats agents can read
  2. 02Serve structured content for agent grounding and citation
  3. 03Preview discovery surfaces with the bundled UI

MCP support

This input does not describe MCP functionality.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://bzejstotdvsalpiqywbj.supabase.co/functions/v1/valid-mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

All endpoints
Streamable HTTPhttps://bzejstotdvsalpiqywbj.supabase.co/functions/v1/valid-mcpAuth required

Tools

Details

From the project README

AI Agent Visibility

Deploy to Cloudflare

Search is shifting from links to answers. To show up in those answers, your content has to be readable by AI agents and crawlers — in whatever convention each one looks for. This template makes your site visible across every agent-discovery surface from a single content store, powered by Workers AI.

How it works: the Worker enriches your content once with Workers AI — deriving a clean title, an agent-friendly summary, key points, and topic tags — caches it in KV, then projects that one store onto every surface an agent might request:

  • /llms.txt and /llms-full.txt — the llms.txt index conventions
  • /index.json — a typed JSON index for structured agents
  • /<slug>.md — clean per-page Markdown, ideal for grounding and citation
  • /robots.txt — explicit directives that welcome named AI crawlers
  • Content-Signal headers — declare how agents may use your content
  • JSON-LD (/jsonld, /<slug>.jsonld) — schema.org structured data for classic and AI crawlers
  • Web Bot Auth (optional) — verify the identity of signed agents (RFC 9421, Ed25519)

The same data, in whichever shape an agent prefers. A bundled UI lets you preview and copy each surface live.

This template ships with sample content so it works the moment you deploy it. Point it at your own pages by editing src/lib/content.ts, or POST content to /api/resources to enrich it on the fly.

Who is this for

  • Anyone who wants to show up in AI answers. If readers increasingly ask ChatGPT, Claude, or Perplexity instead of clicking a search result, this gives those agents a clean, structured copy of your content to cite.
  • Developers exploring AEO (Answer Engine Optimization). A working reference for the emerging set of agent-discovery conventions, all in one Worker.
  • Teams who keep getting agent 4xxs. If bot analytics show AI agents hitting paths they can't read, this is the fix: serve them content they can.

Looking for a commerce-specific version? See the commerce-llms-txt-template for a product-catalog–focused /llms.txt. This template is the general, multi-surface counterpart.

Getting Started

Outside of this repo, you can start a new project with this template using C3 (the create-cloudflare CLI):

npm create cloudflare@latest -- --template=cloudflare/templates/agent-visibility-template

A live preview is generated for every pull request via the Deploy to Cloudflare button above.

Setup

  1. Install dependencies:

    npm install
    
  2. Create a KV namespace and add its ID to wrangler.jsonc (replace the example namespace ID):

    npx wrangler kv namespace create VISIBILITY_CACHE
    
  3. Set your site identity in wrangler.jsonc under vars (SITE_NAME, SITE_DESCRIPTION).

  4. (Optional) To use the runtime write API, set an admin secret — the POST routes are disabled until you do:

    npx wrangler secret put ADMIN_TOKEN
    
  5. Run locally:

    npm run dev
    
  6. Deploy:

    npm run deploy
    

After it deploys

The Worker is live immediately with the bundled sample content — no data source required. Visit the root URL for the surface explorer UI, then check the live agent surfaces:

  • https://<your-worker>/llms.txt and /llms-full.txt
  • https://<your-worker>/index.json
  • https://<your-worker>/getting-started.md (any sample slug)
  • https://<your-worker>/robots.txt

The first request to a surface enriches the content with Workers AI and caches it; subsequent requests are served from KV. Replace the sample content (see Adding your own content) to make it yours.

Configuration

All configuration lives in wrangler.jsonc under vars:

VariableDescriptionDefault
SITE_NAMEYour site's name, shown across every surfaceAcme Docs
SITE_DESCRIPTIONOne-line description for agents(sample)
AI_MODELWorkers AI model used for enrichment@cf/meta/llama-3.3-70b-instruct-fp8-fast
ENRICHMENT_CACHE_TTLSeconds to cache enriched records in KV3600
CONTENT_SIGNALContent-Signal policy (emitted in robots.txt and as a header)ai-input=yes, search=yes, ai-train=no
ENABLE_WEB_BOT_AUTHExpose the optional agent-identity surfacefalse

Secrets (set with npx wrangler secret put <NAME>, never committed):

SecretDescription
ADMIN_TOKENBearer token required by the mutating API routes (POST /api/resources, POST /api/refresh). While unset, those routes return 401.

Adding your own content

Option A — edit the source: replace the entries in src/lib/content.ts with your own pages (slug, url, optional title, and body as HTML or Markdown), then redeploy.

Option B — POST at runtime: with ADMIN_TOKEN set, send content to the API and it's enriched and added immediately:

curl -X POST https://your-worker.workers.dev/api/resources \
  -H "authorization: Bearer $ADMIN_TOKEN" \
  -H "content-type: application/json" \
  -d '{"slug":"about","url":"https://example.com/about","title":"About","body":"<h1>About us</h1>..."}'

Slugs must match ^[a-z0-9-]{1,63}$, url must be http(s), bodies are capped at 100 KB, and the store holds up to 100 resources. Call POST /api/refresh (also authenticated) to clear the cache and re-enrich from source.

Endpoints

MethodPathDescription
GET/llms.txtllms.txt index (Markdown)
GET/llms-full.txtFull content inlined (Markdown)
GET/index.jsonTyped JSON index
GET/:slug.mdPer-page Markdown
GET/:slug.jsonldPer-page schema.org JSON-LD
GET/jsonldSite-level schema.org JSON-LD
GET/robots.txtAI-bot directives
GET/api/siteSite config + surface list (used by the UI)
GET/api/resourcesEnriched resources as JSON
GET/api/resources/:slugA single enriched resource
POST/api/resourcesEnrich and add/replace a resource (requires ADMIN_TOKEN)
POST/api/refreshClear the enrichment cache (requires ADMIN_TOKEN)
GET/.well-known/web-bot-auth/directoryTrusted agent keys (if enabled)
POST/api/identityVerify a signed agent request (if enabled)

Caching

Enrichment is the expensive step (one Workers AI call per page), so results are cached in KV under a single key and reused until ENRICHMENT_CACHE_TTL expires (default 1 hour). A POST /api/resources enriches only the new/changed page and updates the cache in place; POST /api/refresh clears the cache so the next read re-enriches from source. If Workers AI is briefly unavailable, the Worker falls back to deterministic enrichment and caches that degraded result for only 60 seconds so a transient outage can't poison your surfaces for the full TTL.

Known limitations

  • Enrichment runs on the request path. The first request after a cold cache enriches all pages inline, so it's slower than cached reads. For large sites, move enrichment to a Queue or a scheduled Cron Trigger.
  • The store lives in two KV keys and is capped at 100 resources / 100 KB per body to stay well within KV limits. For larger catalogs, switch to one KV key per resource (or D1) and add pagination.
  • KV is eventually consistent. After a POST, a surface read in another region may briefly serve the previous version.
  • Runtime writes use KV read-modify-write. The mutating API is intended for lightweight admin updates. Avoid concurrent writes; for high-volume or multi-writer workflows, serialize writes through a Durable Object or move the store to D1.
  • Web Bot Auth is a minimal reference (see below), not a hardened implementation — review the current drafts before relying on it.

Optional: Web Bot Auth (agent identity)

Everything above is about making content readable. Web Bot Auth is a different axis — letting a well-behaved agent prove who it is with signed requests (RFC 9421, Ed25519). It's off by default. Set ENABLE_WEB_BOT_AUTH=true to expose a key directory at /.well-known/web-bot-auth/directory and a verification endpoint at /api/identity. Replace the sample keys in src/lib/web-bot-auth.ts with the keys of agents you actually trust, and review the latest Web Bot Auth drafts before relying on it in production.

Testing

npm test

The test suite seeds the KV cache before hitting the public surfaces, so it can run locally without making Workers AI requests.

License

See the repository LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.