nvNeuralVerge
Product Updates

What Is Model Context Protocol (MCP)? A Developer's Guide

What Model Context Protocol actually is and how its client-server architecture works, compared to a plain REST integration or a function-calling schema.

Published September 1, 2026

An AI agent that needs to check a company's registration status, search a codebase, or query a database has always had one honest option: someone writes custom integration code connecting that specific agent to that specific tool. Do that for five tools and three agent frameworks, and you're maintaining fifteen bespoke integrations that all solve the same underlying problem in slightly different ways. Model Context Protocol (MCP) exists to remove that duplication — an open protocol that lets any compatible AI application connect to any compatible tool or data source, without either side writing code specific to the other.

What Model Context Protocol actually is

MCP is a standardized way for an AI application — a chat client, an IDE, an autonomous agent — to discover and use external tools and data sources, without a custom integration for every pairing. A server implements the protocol once to expose its capabilities; any client that also implements the protocol can connect to it, see what it offers, and use it, the same way any USB device works with any USB port without a driver written specifically for that one device-and-computer combination.

It's easiest to place against the two things people build instead.

MCP vs. a plain REST integration

Calling a REST API directly from your own code works fine when you're building one specific integration for one specific application — you write the request, parse the response, and move on. The friction shows up at the second, third, and tenth integration: each new tool means new code to write, and each new AI application that wants to use an existing tool means writing that integration again from scratch, because a REST API on its own doesn't describe itself in a way an AI application can discover and use automatically. MCP servers expose their capabilities in a standard, discoverable form specifically so that connecting a new client doesn't mean writing new integration code.

MCP vs. a model's own function-calling schema

Most model providers support function calling — a way for a model to request that a specific function be invoked, with arguments, inside that provider's own API. That's a real and useful capability, but it's a different layer from MCP: function calling is how a model expresses "call this tool" once the tool is already available to it. MCP is how that tool became available in the first place — an MCP client typically takes a connected server's tools and translates them into whatever function-calling schema the underlying model expects, so the model-facing mechanics don't change even as the set of connected servers does.

How MCP's architecture works, step by step

MCP defines a small number of roles and message types, and the same pattern repeats regardless of what the server actually does underneath.

1. Host and client

The host is the application a person actually uses — a chat interface, an IDE, an agent runtime. Inside the host, a client manages one connection to one server, handling the protocol-level back-and-forth. A single host can run several clients at once, each connected to a different server, which is what lets one application reach many unrelated tools without a separate integration per tool.

2. Server

A server exposes a set of capabilities — tools, resources, and prompts — over the protocol. It can be a local process, launched and communicated with over standard input and output, or a remote service reachable over HTTP. Either way, it speaks the same protocol, so a client doesn't need different logic depending on where the server happens to run.

3. Discovery

When a client connects, it asks the server what it offers, and the server responds with a structured list — each tool's name, description, and the parameters it accepts; each resource's identifier and type; each prompt's template and parameters. This is the step that makes the whole system self-describing: nothing about what a specific server offers needs to be hard-coded into the client ahead of time.

4. Invocation

Once the client (and, through it, the model reasoning inside the host) knows what's available, invoking a tool is a structured request-response exchange: the client sends the tool's name and arguments, the server does whatever work the tool represents, and the response comes back in a defined shape. The model driving the host's reasoning decides when to invoke a tool and with what arguments; the protocol just defines how that invocation actually travels between host and server.

Tools, resources, and prompts: the three primitives

MCP defines three distinct kinds of capability a server can expose, and most real-world integrations lean heavily on one of them.

Tools are actions — something the server does when invoked, often with a side effect or a computed result: run a search, look up a record, execute a calculation. This is the primitive most agent-facing integrations are built around, since an agent's typical need is "do this thing and tell me the result."

Resources are readable content a server makes available — a file, a database record, a document — that a client can pull into context without it being framed as an action with a return value. Resources fit content a host wants available to reason over, rather than something invoked for a result.

Prompts are reusable, parameterized templates a server offers for common interactions, letting a host surface a consistent, well-crafted starting point for a task instead of every user or developer writing their own version of the same prompt from scratch.

A worked example: an agent checking a company's registration status

Take a concrete, illustrative case: an agent mid-conversation needs to confirm whether Acme Oy (Finland) is currently an active, registered entity.

  1. The host's client is already connected to an MCP server exposing corporate-registry tools, and during discovery it learned that server offers a tool for looking up Finnish registry records by Business ID.
  2. The agent's own reasoning recognizes it needs this specific fact and doesn't have it from the conversation alone, so it invokes the tool with the Business ID as an argument.
  3. The server runs the actual lookup against the registry, and returns a structured result — registration status, entity name, registered address — in the response.
  4. The client hands that result back into the model's context, and the agent's reasoning continues with the fact now available, exactly as if the information had been in the conversation from the start.

Nothing about this sequence required the agent's host application to have been built with knowledge of that specific registry lookup in advance — the tool became available the moment the client connected to a server that offered it.

Security and permissions: capability access is a design decision, not a protocol guarantee

Nothing about MCP automatically decides which servers a given client should be allowed to connect to, or which tools within a connected server an agent should actually be permitted to invoke. The protocol makes discovery and invocation possible; scoping is a decision the host application and whoever configures it has to make deliberately. A host running a general-purpose chat assistant has good reason to be more conservative about which servers it connects to than a host running a dedicated internal automation agent — and within one connected server, a client can reasonably choose to surface only a subset of the tools that server offers, rather than exposing everything by default.

This matters in practice because a tool with a real side effect — sending an email, modifying a record, executing a payment — is a fundamentally different risk than a tool that only reads and returns data. Treating every MCP tool as equally safe to invoke without confirmation is a design choice worth making deliberately, not a default to accept because the protocol allows it.

Why this matters more for agents than for a single chat interface

A conversational assistant answering questions one at a time benefits from MCP, but the case sharpens considerably for an autonomous agent working a multi-step task. An agent's information needs aren't fully known in advance — what it needs to look up depends on what it's already found, which means the set of tools available to it matters more than in a single-turn chat exchange. A host that can connect to any MCP server means an agent's tool set can grow — a new data source, a new capability — without the agent's own reasoning loop or the host application needing to be rebuilt each time. The alternative, custom integration per tool per agent framework, doesn't scale the same way once an agent's task genuinely might need any one of a dozen different capabilities depending on how the task unfolds.

MCP vs. calling an API directly: two integration modes, not a replacement

Exposing a capability over MCP doesn't replace calling it directly from backend code — they're two different integration modes for the same underlying capability, and most real systems use both. Calling a capability directly fits a fixed pipeline that already knows a specific step belongs at a specific point in a flow. Exposing the same capability over MCP fits an agent that needs to decide for itself, mid-task, whether and when to reach for it. Neither mode is objectively better; the fit depends on whether the calling logic is fixed in advance or needs to be decided dynamically by an agent's own reasoning.

How NeuralVerge implements MCP

NeuralVerge exposes its own source catalog as MCP tools alongside the same capabilities over REST — AI research, AI extraction, and individual sources like company, registry, and enrichment lookups each map to a named tool an MCP client can discover and invoke. A connected client sees a tool definition — a name, a description, and its parameters — the same way it would for any other MCP server, and invoking one returns the identical structured response NeuralVerge's REST endpoints return, just reached through a different transport.

A reverse email lookup, for instance, is exposed as a run-email-enrichment tool. Once a client is connected, invoking it looks like this:

{
  "tool": "run-email-enrichment",
  "arguments": { "email": "jane.doe@acme.com" }
}

A Crunchbase company lookup follows the identical pattern under its own tool name:

{
  "tool": "run-crunchbase-company",
  "arguments": { "url": "https://www.crunchbase.com/organization/example" }
}

And general-purpose extraction — used across most of the corporate registry sources as well as standalone URLs — goes through a shared run-extract tool, with the target URL and, where a fixed shape is needed, a schema passed as an argument:

{
  "tool": "run-extract",
  "arguments": {
    "url": "https://example.com/company/acme",
    "instructions": "Extract data from the company profile"
  }
}

The pattern repeats across the catalog: one tool per source, named consistently, taking the same arguments the equivalent REST call would take. An agent reasoning over its available tools doesn't need to know NeuralVerge's internal structure to use any of them correctly — the tool's own name and description are enough to decide when it applies. Coverage is rolling out endpoint by endpoint rather than every source going live over MCP simultaneously, and each data source page states its current status rather than assuming blanket availability; where a specific source isn't yet reachable over MCP, the equivalent REST call returns the same response shape in the meantime. Full connection details are documented at docs.neuralverge.ai.

Where teams use MCP

  • Connecting an agent to internal tools and data — databases, internal APIs, proprietary knowledge bases — without writing a custom integration for each one per agent framework.
  • Standardizing across multiple AI applications. A team running several different AI-powered tools internally can build one MCP server per data source and connect all of them, rather than integrating each data source into each application separately.
  • Extending an IDE or coding assistant with project-specific tools — a linter, a deployment pipeline, an internal documentation search — exposed as MCP servers rather than editor-specific plugins.
  • Giving research and enrichment agents live data access, exposing capabilities like AI research, AI extraction, and the rest of a source catalog as tools an agent can reach for mid-task, rather than pre-fetching everything a task might conceivably need in advance.

What to check before you build on MCP

  • Does your AI application (the host) actually support MCP, or would you need to build client support yourself? Not every application speaks the protocol natively yet — check before assuming it's available out of the box.
  • Does the server you need already exist, or would you be building one? A growing ecosystem of MCP servers already covers common tools and data sources — check before committing engineering time to building a new one.
  • Local process or remote service — which transport fits your deployment? A local, stdio-based server is simple for development; a remote, HTTP-based server fits a shared, multi-user deployment better.
  • Are you exposing tools, resources, or both — and does that match what the capability actually is? An action framed as a resource, or content framed as a tool, works technically but reads oddly to a client reasoning over what's available.
  • Does the same underlying capability behave identically whether called directly or through MCP? If a REST call and an MCP tool call for the same capability return different shapes, that's two integrations to maintain instead of one.

Standing up one real MCP server for a tool you already have, and connecting it to a client you already use, is a faster way to judge fit than reading the specification alone. NeuralVerge exposes its own source catalog this way — reachable over REST or MCP with the same response shape either way, documented at docs.neuralverge.ai.

Frequently asked questions

Is MCP the same thing as function calling?

They're related but not the same layer. Function calling is how a model itself requests that a tool be invoked, inside a single model provider's API. MCP is a protocol for how an application discovers and connects to tool and data servers in the first place — an MCP client typically turns a connected server's tools into the function-calling schema a model actually sees.

Do I need to use MCP, or can I just build my own tool integrations?

You can always build a direct, custom integration for one specific application and one specific tool — nothing requires MCP. The tradeoff is that a custom integration only works for that one pairing, while an MCP server works with any MCP-compatible client without either side writing code specific to the other.

What's the difference between a Tool, a Resource, and a Prompt in MCP?

Tools are actions a client can invoke that do something or return computed data. Resources are readable content a server exposes, like a file or a record, that a client can pull into context without it being an action. Prompts are reusable, parameterized templates a server offers for common interactions. Most agent-facing integrations lean heavily on tools.

Does MCP require a specific transport, like HTTP?

No — the protocol defines the message format and interaction pattern, not one required transport. A local server commonly communicates over standard input and output; a remote server commonly communicates over HTTP. Both speak the same underlying protocol either way.

Is MCP specific to one AI provider or model?

No — it's an open protocol, not tied to a single model or vendor. Any client that implements the protocol can connect to any server that implements it, regardless of which model is doing the reasoning on the client side.

Does MCP decide which tools an agent is allowed to use?

No — the protocol makes discovery and invocation possible, but scoping which servers a client connects to and which tools it surfaces from a connected server is a design decision made by whoever configures the host application, not something MCP enforces on its own.

About NeuralVerge

NeuralVerge gives developers and AI builders a single API for AI deep research, AI extraction, and autonomous agents — powered by 29 data sources under the hood.

Product Updates on the NeuralVerge blog.

Try it on your own data

One request format across research, extraction, and enrichment.

Get started