# No agent interface (MCP) advertised

> Sites that want agents to take actions can advertise an MCP server so assistants discover their tools. Add a /.well-known/mcp.json for agent discovery.

_Category: AI readiness · Detector `aeo` · Check `mcp-discovery-missing` · Severity: info_

Most AEO is about being read; this one is about being acted on. If your site exposes actions an agent could take — booking, search, checkout, an API — advertising a Model Context Protocol (MCP) interface lets assistants discover and use those tools instead of scraping. It’s optional and only relevant for app/API sites, but for those it’s how you become agent-usable rather than merely agent-readable.

## Symptoms

- A GET to `/.well-known/mcp.json` returns 404
- Agents can read your content but can’t invoke your actions
- No machine-discoverable description of your tools/endpoints

## How VibeCheck detects it

The `aeo` detector flags this live in the browser and reports it to the widget's Problems list — and to your coding agent over MCP.

- **Issue string:** `No agent interface (MCP) advertised`
- **Threshold:** /.well-known/mcp.json is not served as a 2xx JSON response

## Root causes

- No MCP server exists for the site’s actions yet
- An MCP server exists but isn’t advertised at a discoverable well-known path

## The fix

If (and only if) your site offers actions worth exposing to agents, build an MCP server describing those tools and advertise it with a discovery document at `/.well-known/mcp.json` served as `application/json`. For a pure content site this is safely skipped — it’s reported as info.

### Steps

1. Decide whether agents should take actions on your site (skip if it’s content-only)
2. Build an MCP server exposing those actions as tools
3. Advertise it at `/.well-known/mcp.json` with an `application/json` content type

_/.well-known/mcp.json (discovery document)_

```json
{
  "name": "acme",
  "description": "Search and book Acme widgets.",
  "server": { "url": "https://acme.com/mcp" }
}
```

## Framework-specific fixes

### Next.js

Serve the discovery document from a Route Handler at `app/.well-known/mcp.json/route.ts`, returning `application/json`.

_app/.well-known/mcp.json/route.ts_

```ts
export function GET() {
  return Response.json({ name: 'acme', server: { url: 'https://acme.com/mcp' } })
}
```

### Vanilla JS

Host a static `/.well-known/mcp.json` and ensure it’s served with an `application/json` content type.

```json
{ "name": "acme", "server": { "url": "https://acme.com/mcp" } }
```

## FAQ

### Do content sites need this?

No. MCP discovery only matters if you want agents to take actions (search, book, buy, call an API). A blog or docs site can safely ignore it — that’s why VibeCheck reports it as info, not a warning.

### What is MCP?

The Model Context Protocol is an open standard for exposing tools and data to AI agents in a structured way. Advertising an MCP server lets assistants discover and use your actions rather than reverse-engineering your UI.

### How is an MCP server different from a REST API?

A REST API is a set of endpoints a developer wires up by hand; an MCP server describes those same actions as self-documenting tools an agent can discover and call without a bespoke integration. If you already have an API, an MCP server is usually a thin wrapper that makes it agent-usable.

## Related problems

- [Missing llms.txt](https://vibecheck.wcgw.fun/fix/missing-llms-txt.md) — AI readiness
- [robots.txt blocks AI crawlers](https://vibecheck.wcgw.fun/fix/ai-crawlers-blocked.md) — AI readiness
- [No markdown content negotiation](https://vibecheck.wcgw.fun/fix/missing-markdown-negotiation.md) — AI readiness
- [Missing structured data (JSON-LD)](https://vibecheck.wcgw.fun/fix/missing-structured-data.md) — AI readiness

---

Fix guide from VibeCheck — https://vibecheck.wcgw.fun/fix/missing-mcp-discovery. Full site index for LLMs: https://vibecheck.wcgw.fun/llms.txt
