The short version
RAG — retrieval-augmented generation — is a technique for feeding a model relevant text at inference time, usually by searching a vector database of documents you embedded beforehand. It exists to answer questions from a body of knowledge the model was not trained on.
MCP — the Model Context Protocol — is a standard for connecting a model to external tools and data sources at runtime. It exists to let a model do things: query a live database, call an API, read a file, send a message.
So the comparison is slightly misframed. RAG retrieves knowledge; MCP grants capability. You can use either alone, and plenty of real systems use both — an MCP server can itself perform a RAG lookup.
What RAG is good at
RAG shines when the task is "answer from these documents". You have a corpus — support articles, internal wikis, a product manual — and you want the model to ground its answers in that specific material rather than its training data. Embedding the corpus once and retrieving the relevant chunks per query is efficient and well-understood.
Its limits are worth naming. RAG gives the model text to read, not actions to take — it cannot place an order or update a record. And it works on a snapshot: if the underlying documents change, the index has to be rebuilt, so RAG is a poor fit for data that changes by the minute.
What MCP is good at
MCP shines when the task needs live data or side effects. "What's the current status of order 4471" cannot be answered from a pre-built index — it requires querying the system of record right now. "Create a calendar event" is an action, not a retrieval. These are MCP's territory.
MCP also handles freshness for free: because the server queries the source at call time, there is no index to go stale. The trade-off is latency and reliability — every tool call is a live request that can be slow or fail, whereas a vector lookup is fast and local.
When to use which — and both
Use RAG when the answer lives in a stable body of documents and you only need the model to read. Use MCP when the answer requires querying a live system, or when the model needs to take an action rather than just answer.
Use both when a task spans the two. A support agent might retrieve the relevant policy with RAG and then look up the customer's actual account state through an MCP server — knowledge plus capability in one flow. Treating them as rivals leads to picking the wrong tool; treating them as complementary is usually closer to what real systems need.
One practical note: because an MCP server is just a program, nothing stops it from doing retrieval internally. A "docs" MCP server that searches your knowledge base on demand is RAG wearing an MCP interface — which is often the cleanest way to expose a corpus that also changes over time.