---
title: "What is NLWeb? The natural-language web protocol"
description: NLWeb is an open Microsoft protocol that turns any website into a natural-language /ask endpoint for AI agents. Every NLWeb instance is also an MCP server.
last_updated: 2026-05-21
canonical_url: https://agent-ready.dev/what-is-nlweb
---

# What is NLWeb?

> An open protocol that turns a website into a natural-language `/ask` endpoint for AI agents — and makes every site an MCP server in the process.

## What is NLWeb?

NLWeb ("Natural Language Web") is an open protocol for giving a website a conversational query interface. Instead of only serving HTML pages to browsers, an NLWeb-enabled site exposes an `/ask` endpoint that accepts a plain-language question and returns structured JSON answers grounded in that site's own content. The [specification](https://nlweb.ai/docs/specification) is transport-agnostic but defines two HTTP endpoints: `POST /ask` for queries and `POST /await` for polling long-running asynchronous answers.

The goal, in Microsoft's framing, is to [let every website function like an AI app](https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/the-future-of-ai-optimize-your-site-for-agents---its-cool-to-be-a-tool/4434189) — queryable by humans through a chat box and by agents through a machine-native interface, from the same endpoint.

## Who created NLWeb and why?

NLWeb was announced by Microsoft at Build 2025 and is led by **R.V. Guha**, the creator of RSS, RDF, and [Schema.org](https://schema.org). That lineage matters: rather than invent a new content vocabulary, NLWeb reuses the Schema.org structured data that millions of sites already publish. The bet is the same one that made RSS and Schema.org succeed — a thin, open convention on top of data the web already has, rather than a heavyweight new standard.

## How does the /ask protocol work?

A client sends a JSON request to `/ask` containing a natural-language query and optional preferences. The response carries a required `_meta` block plus one of four result types:

- **Answer** — an array of typed, semi-structured JSON objects (recipes, articles, products), each ideally a Schema.org type.
- **Elicitation** — a structured follow-up question when the query is ambiguous.
- **Promise** — a token for an asynchronous result, polled later via `/await`.
- **Failure** — a documented error code such as `NO_RESULTS` or `RATE_LIMITED`.

A `mode` preference controls post-processing — `list` returns raw matches, `summarize` asks the server to compose an answer over them. Setting `streaming: true` streams results over Server-Sent Events as they are found.

## How does NLWeb use Schema.org?

Schema.org is NLWeb's native data model. Result objects are expected to use Schema.org `@type` and `@context` fields (the JSON-LD pattern), so an answer about a recipe comes back as a `Recipe`, a restaurant as a `Restaurant`, and so on. The reference implementation ingests the structured data a site already exposes — via sitemaps and embedded JSON-LD — which means sites that already publish good Schema.org markup are most of the way to a useful NLWeb endpoint.

## How does NLWeb relate to MCP?

Every NLWeb instance is also a [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server. The `ask` and `await` operations map directly to MCP tools over JSON-RPC, so any MCP-compatible assistant can call an NLWeb site as a capability without a custom integration. This is also how discovery works in practice: NLWeb has no dedicated well-known file, so agents reach an `/ask` endpoint through the MCP ecosystem. If you're weighing the two, see [how MCP compares to A2A and agents.json](https://agent-ready.dev/mcp-vs-a2a-vs-agents-json).

## How do I make my site NLWeb-ready?

Three moves, in order of leverage:

- **Publish clean Schema.org structured data.** It is the input NLWeb retrieves and the shape it returns. Good JSON-LD is the foundation, not an afterthought.
- **Stand up an /ask endpoint.** Self-host the open-source [reference implementation](https://github.com/nlweb-ai/nlweb-ask-agent), use a managed offering, or build a minimal endpoint over your own content and retrieval.
- **Expose it as an MCP server.** Wiring `ask` as an MCP tool is what makes the endpoint discoverable to the wider agent ecosystem.

NLWeb sits alongside the other agent-readiness signals — llms.txt, AGENTS.md, and protocol manifests. To see where your site stands today, run a full [agent-readability scan](https://agent-ready.dev/agent-readability-score).

## Frequently asked questions

### What is NLWeb?

NLWeb is an open protocol for adding a natural-language query interface to a website. A site implements an /ask endpoint that accepts a plain-English question and returns structured, Schema.org-typed JSON answers grounded in that site's own content — usable by both conversational UIs and AI agents.

### Who created NLWeb?

NLWeb was introduced by Microsoft at Build 2025 and is led by R.V. Guha, the creator of RSS, RDF, and Schema.org. That lineage is deliberate: NLWeb reuses existing Schema.org structured data rather than inventing a new content vocabulary.

### Is NLWeb the same as MCP?

No, but they are tightly linked. Every NLWeb instance is also a Model Context Protocol (MCP) server: the ask and await operations map directly to MCP tools. So any MCP-compatible assistant can call an NLWeb site without bespoke integration. MCP is the transport; NLWeb is the natural-language-search contract layered on top.

### Do I need a vector database to run NLWeb?

Not necessarily. The protocol only defines the request/response contract — how you answer is up to you. Microsoft's reference implementation uses embeddings and a vector store for retrieval, but a small site can satisfy /ask with lexical search or even hand-written routing. Pick retrieval that fits your corpus size.

### How do agents discover a site's NLWeb endpoint?

There is no dedicated discovery standard yet — no /.well-known/nlweb file. The specification only fixes the endpoint paths (/ask and /await). In practice discovery rides on MCP: because every NLWeb instance is an MCP server, MCP-aware agents find and call it through the MCP ecosystem.

---

Read the full guide on the web: <https://agent-ready.dev/what-is-nlweb>

Score your site for agents: <https://agent-ready.dev/agent-readability-score>

## Sitemap

See the full [sitemap](https://agent-ready.dev/sitemap.md) for all pages on agent-ready.dev.
