A8gent
MCP Architecture · Lesson 1 of 16

MCP vs Plain Function Calling

Understand what the Model Context Protocol adds over hardcoded function calling, and when the extra layer is worth building.

Two ways to give an agent tools

Before writing any code, get clear on what the Model Context Protocol actually changes. If you have built with function calling, you already know one way to give a model tools: you define a set of functions inside your app, pass their schemas to the model, and run whatever it calls. That works, but the tools live inside one app and cannot be reused anywhere else.

MCP takes those tools out of your app and puts them behind a small server that speaks a shared protocol. Any compatible client, such as Claude Desktop, Claude Code, or Cursor, can connect to that server, discover its tools, and call them. You expose a capability once, and every client can use it.

What MCP adds

  • Reuse across clients. The same server works in Claude Desktop, Cursor, and your own agent without rewriting the integration for each one.
  • A clean boundary. Your server sits in front of your APIs and databases, so you decide exactly which actions an agent can reach and under what rules.
  • Discovery. Clients ask the server what tools, resources, and prompts it offers, so you can add or change tools without editing every client.

What it costs you

MCP is another moving part. You run a server, handle its transport, and maintain its schemas. For a single app calling a single model with a fixed set of functions, that overhead buys you little, and plain function calling is the simpler, cheaper choice.

How to decide

  1. Will more than one client or agent use these tools? If yes, MCP earns its place.
  2. Do you want a permissioned boundary in front of company systems that survives client changes? MCP gives you that.
  3. Is this a one-off integration inside one product? Function calling is usually enough.

What good looks like

You can say in one sentence why a given job needs MCP rather than function calling, and the reason is reuse or a controlled boundary, not that MCP is newer. A builder who reaches for MCP only when it removes a real constraint ships simpler, more reliable work.

Common mistakes

  • Building an MCP server for a task a single API call or webhook would have handled, adding a server to maintain for no gain.
  • Assuming MCP replaces your APIs. It sits in front of them, usually calling the same APIs underneath while adding descriptions and permission rules on top.
  • Choosing MCP because it feels modern, then discovering you now maintain a protocol server for one client that will never change.