Lesson 24 of 30
Without a shared standard, connecting N applications to M external tools means roughly N times M custom integrations — MCP is a protocol that turns that into N plus M by giving every tool and every application a common language to speak.
12 min read
Every option explains itself — why the right one is right, and why each wrong one is wrong. Miss one and it comes back later on a spaced-repetition schedule.
Question 1 of 3
In MCP's client/server model, what does an MCP server do?
Hints without spoilers, and a plain explanation of why a wrong answer was wrong — answered only from this lesson. Free account, no card.
Sign up freeWhat interviewers actually ask about this, and what a strong answer has to cover.
A strong answer covers
Likely follow-ups
Say you're building several AI applications, and each one needs to reach a handful of external tools and data sources: a filesystem, a database, a search API, an internal wiki. Without any shared standard, every application ends up writing its own custom, one-off integration code for every tool it wants to use. Connect N applications to M tools that way, and you've written roughly N × M separate integrations — and every new tool or every new application multiplies that further.
MCP (Model Context Protocol) is an open, standardized protocol that solves this the way most integration problems get solved: with a shared interface both sides can agree on. An MCP server exposes a tool, data source, or context provider (a filesystem, a database, a documentation index, whatever) using the protocol's standard shape. Any MCP client — any AI application built to speak MCP — can then consume that server without needing custom, tool-specific integration code. Build one MCP server for a tool, and every MCP-compatible application can use it. Build one MCP-compatible client, and it can reach every existing MCP server. N × M custom integrations becomes N clients + M servers, each side only needing to implement the protocol once.
This is deliberately a protocol-level concept, not an implementation detail: the value is in the shared contract itself — what a client can ask a server for, and what shape the server's answer comes back in — not in the specifics of any one server's code.
// Without a shared protocol: one bespoke integration per tool, per application
async function getFileList() {
/* app-specific code to talk to this one filesystem tool, its own way */
}
async function queryDatabase(sql: string) {
/* a completely different app-specific integration for this one database */
}
// With MCP: any MCP client can call any MCP server the same standardized way,
// without writing a bespoke integration for each one
// const result = await mcpClient.callTool("filesystem-server", "list_files", { path: "/docs" });
// const rows = await mcpClient.callTool("database-server", "query", { sql: "SELECT ..." });
The client-side code doesn't need to know how the filesystem server or the database server are implemented internally — it only needs to speak the protocol. That's the same shape as, say, HTTP standardizing how a browser talks to any web server regardless of what's running behind it: the standard is what makes "any client, any server" possible without custom glue code for every pair.
"Why would you use a standard protocol like MCP instead of writing a custom integration for each tool?" tests whether a candidate can articulate the actual integration-scaling problem (N × M becoming N + M) rather than just recognizing MCP as a buzzword — the reasoning is the same one that justifies any shared protocol, and being able to generalize it is the real signal.