What is an MCP server, and when does a business need one?
The Model Context Protocol (MCP) is an open standard for connecting AI applications to tools and data. An MCP server is the piece you write or run on your side: it decides which actions and which data an AI application may reach in your systems. Most businesses do not need to build one. A workflow with a model at one step, or a plain API call, does the job with less to secure. You need one when an agent has to choose among several actions over internal systems and you want that access defined, limited and logged in a single place. This article says how to tell which side you are on, and how to start without handing an agent the keys.
By Saveez IrfanUpdated
In short
- MCP is an open standard that lets an AI application discover and call tools, read resources and use prompt templates that a server offers. The server is where you decide what is allowed.
- You probably do not need one if the steps are fixed. A Make or Zapier scenario, or a direct API call with a model at one step, is simpler to build, test and secure.
- Build one when an agent must pick between several actions over your own data, when more than one AI application needs the same controlled access, or when you want a single place to scope, log and revoke it.
- An MCP server does not make anything safe by itself. It is a new surface. The safety comes from narrow tools, per-user credentials, read-only first, a person approving writes, and an audit log.
- The two real risks are tools that are too broad and prompt injection through tool results. Design for both: one tool per intent, no tool that sends, pays or deletes at the start, and treat everything a tool returns as untrusted text.
- Start with one read-only server over one system, on staging or a copy, with three or four narrow tools and a log. Widen only on evidence.
What is an MCP server?
Anthropic's Claude Code documentation describes the Model Context Protocol as an open source standard for AI-tool integrations, and says MCP servers give Claude Code access to your tools, databases and APIs. In plain terms, it is an agreed way for an AI application to ask a server 'what can you do?' and then call it. The AI application is the client. The server is a small program that sits in front of your system and answers.
The reason it exists is repetition. Without a standard, every AI application needs its own custom connection to every system. With one, you write the connection to your system once, as a server, and any application that speaks the protocol can use it. Anthropic's documentation uses the example of connecting an issue tracker, a monitoring dashboard or a database so the assistant can read and act on that system directly instead of working from whatever you paste into a chat.
Two limits on what we say here. The protocol is still evolving and Claude Code's own documentation refers to protocol revisions and a newer client runtime, so check the current specification at modelcontextprotocol.io before you build. We could not read that site from our environment when writing this, so the protocol facts below rest on Anthropic's Claude Code and API documentation, linked under Sources. And we are not an Anthropic partner; nothing here is endorsed by Anthropic.
What does an MCP server expose?
Three kinds of thing. Claude Code's documentation refers to all three when it describes a server's capabilities: tools, prompts and resources, which a client discovers by asking the server to list them.
| Kind | What it is | Business example | Where the risk sits |
|---|---|---|---|
| Tools | Actions the AI can choose to call, each with a name, a description and typed inputs | find_order(order_id), list_overdue_invoices(), create_draft_reply(ticket_id) | Highest. A tool is an action. Its scope is the blast radius |
| Resources | Data the client can read and attach, addressed by a URI. Claude Code lets you reference them with @ mentions | A price list, a policy document, a customer record view | Medium. Reads leak data; they do not change it |
| Prompts | Reusable prompt templates the server offers to the user | 'Summarise this week's exceptions' with the right fields pre-filled | Low, but they are still text that steers the model, so they deserve review |
In practice most business servers are mostly tools. That is also where the design effort belongs, because a tool's name, description and inputs are all the model knows about what it may do. Anthropic's tool-use documentation describes the mechanism: Claude decides when to call a tool from the request and the tool's description, and returns a structured call that your application executes. The model asks. Your code does the work, and your code is where the checks live.
A server can also change what it offers while a client is connected. Claude Code's documentation says a server can update its tools, prompts or resources and notify the client, which then refreshes. That is convenient for your own server and a reason not to connect servers you do not control.
Local or remote: where does the server run?
Claude Code's documentation describes two main shapes. A local server runs as a process on the machine of the person using the client, over the standard input and output (the 'stdio' transport). A remote server runs elsewhere and is reached over HTTP, which the documentation recommends for remote servers; an older SSE transport is described as deprecated.
| Local (stdio) | Remote (HTTP) | |
|---|---|---|
| Runs on | The user's own machine | A server you host, or a vendor hosts |
| Credentials | Live in that machine's environment, so every machine holds a copy | Live on the server; users authenticate to it |
| Good for | One developer, local files, quick experiments, tools that need direct system access | Shared business data, several users, central permissions and logs |
| Access control | Whatever the person's own account can do, unless you narrow it | Per-user sign-in, per-tool permissions, revocable centrally |
| Main risk | Secrets scattered across laptops; no central log | A network-reachable service that must be authenticated and monitored properly |
For a business, the rule of thumb is simple. Local is for a developer experimenting. Anything that touches shared business data should run as a remote server you control, so credentials sit in one place, access is per person and revocable, and there is one log. This is the same pattern we used on the fleet order automation, where the monday.com token is account-wide and reaches commission data, so it lives in exactly one service and the front end never sees it. An MCP server is that boundary with a protocol on the front: the broad credential stays behind it, and the model is only handed narrow tools.
When do you need one, and when is something simpler enough?
Start from the job, not the protocol. The question is whether a model has to choose its own actions among several systems, or whether you can write the steps down. Our article on AI agents for operations makes the same cut: most operations problems are workflows with one model-shaped step, and an agent buys unpredictability you then have to engineer back out.
| The situation | Use | Why |
|---|---|---|
| A fixed process: form to board, invoice to ledger, message to owner | A Make, Zapier or n8n scenario, or a small service | The steps are known. A model, if any, does one bounded step inside it. Nothing needs to discover tools |
| One application of yours calls a model, with two or three functions it may call | Ordinary tool use in your own code, calling your own API | Anthropic's tool-use API already lets you define functions your application executes. A protocol adds a moving part |
| A system needs to hand data to another on an event | A webhook or API integration | That is integration, not an agent. See our systems integration page |
| Staff want to ask an assistant questions across several internal systems and get a read-only answer | An MCP server over those systems, read-only | The path depends on what each lookup returns, and a person reads the result |
| More than one AI application (a coding assistant, a chat assistant, your own agent) needs the same access | An MCP server | Define the access once; every client inherits the same limits and the same log |
| You want the agent to change records, send messages or move money-adjacent data | An MCP server plus proposals and a person approving | Write tools are the risky ones. See the staged rollout below |
| You are connecting an assistant to a third-party SaaS that already offers a maintained server | Their server, after reviewing what it can do | Check the scopes it asks for. Anthropic says it does not security-audit MCP servers |
Some automation platforms and SaaS vendors now offer MCP connectors of their own. We have not compared them, and what they expose changes, so read the current documentation for any you consider and apply the checks in this article to it.
Authentication and permissions: who is calling, and what may they do?
Two separate questions, and an MCP server has to answer both. Authentication: who or what is this client? Authorisation: what is it allowed to do with each tool and each record? A server that answers the first and skips the second is a locked front door with every room open.
- Use the sign-in the protocol and your client support. Claude Code's documentation says it supports OAuth 2.0 for remote servers and flags a server as needing authentication when it answers 401 or 403. It also accepts a static token in a request header for simpler cases. Prefer per-user sign-in over one shared secret, so you can tell people apart in the log and revoke one without breaking everyone.
- Keep the broad credential inside the server. The server holds the key to the CRM or database. The model never sees it and cannot be talked into printing it, because it is not in the conversation.
- Authorise per tool and per record, in the server, not in the tool description. A description that says 'only use for the user's own customers' is a request. A query that filters by the signed-in user's permissions is a rule.
- Give each agent its own identity and its own narrow scope. An agent that triages inbound mail needs different access from one that reconciles payments. One credential for all of them means one compromised agent reaches everything.
- Do not commit secrets. Claude Code's project file, .mcp.json, can be shared through version control and supports environment-variable expansion, so a token can be referenced instead of pasted.
On the client side, administrators have levers too. Claude Code's documentation describes three scopes for server configuration (local, project and user), an approval prompt for project-scoped servers in interactive sessions, and managed configuration to restrict which servers an organisation's users may run. It also notes that non-interactive runs and cloud sessions load project-scoped servers without that prompt. So review a repository's .mcp.json like code, because in an automated run nobody is asked.
Read-only first, then proposals, then approved writes
Split tools by consequence and widen in stages. The same rule sits behind our AI agents article: read tools are given freely, write tools either do not exist or create a proposal that waits for a person.
| Stage | What the tools can do | What you learn before moving on |
|---|---|---|
| 1. Read-only on staging or a copy | Look things up. Return small, structured results | Whether the tool names and descriptions are enough for the model to pick the right one; what it asks for that you did not expect |
| 2. Read-only on live data, narrow views | The same, against production, through views that already exclude sensitive fields | What the log shows people actually asking for; whether access control holds for two different users |
| 3. Write as a proposal | Create a draft, a suggested change or a queued task. Nothing takes effect | How often proposals are wrong, and whether reviewers read them or click through |
| 4. Approved writes, reversible only | A person approves a proposal and the server applies it, with an undo | Whether the approval step carries weight and the audit trail answers 'who approved what' |
| Not on the list | Tools that send to customers, pay, delete, or change permissions on the model's say-so | Add only with a specific reason, a narrow scope and a person in the path |
That is also why shadow mode matters. On the fleet order automation, the allocation and SLA layer shipped behind a flag that logged what it would have done without doing it, and comparing that with the manual process for real orders is what made the cutover uneventful. A write tool on an MCP server can run the same way: record the proposed call, compare with what a person did, and enable the real write later.
Audit logging
Log every tool call with who or what called it, the tool, the arguments, a summary of the result, the time and whether it succeeded, in a store the agent cannot edit. On the trading ERP, every write appends a field-level entry to a table staff can insert into and read but never update or delete, so the trail cannot be rewritten through the API. Do the same for the server. If a figure is queried months later, you want to know what was asked and what came back, not what the model said it did.
What goes wrong: over-broad tools and poisoned results
Over-broad tools
The commonest mistake is a tool that is too general, because it was quick to write. A run_sql tool, a call_api tool that takes any URL, a tool that accepts a free-text 'action' parameter. Each one gives the model, and anyone who can influence the model, the full power of the credential behind it. Prefer one tool per intent with typed inputs: find_order, list_overdue_invoices, create_draft_reply. Validate the inputs on the server. Return only the fields the job needs, and keep results small, since Claude Code's documentation says it warns about, and by default limits, very large tool output.
Prompt injection through tool results
Whatever a tool returns goes into the model's context, and some of it is text written by outsiders: an email body, a supplier's PDF, a web page, a customer's note. If that text contains instructions, the model may follow them. Anthropic's Claude Code documentation warns that servers which fetch external content can expose you to prompt injection, and its security page says that while the protections reduce risk, no system is completely immune. Anthropic's guidance for applications recommends labelling untrusted content as such, keeping it out of the system prompt, limiting the model's access to sensitive data and actions, and testing with hostile inputs. Our companion article on securing AI agents covers those controls in detail.
For an MCP server the practical consequence is this. The more your tools can read untrusted content, and the more they can do, the more an injected instruction can achieve. A server that reads inbound email and can also send email, on the same credential, has both halves of the problem. Split them: a reading server with no send tool, and any outbound action behind a proposal and a person.
Servers you did not write
Anthropic's security page encourages writing your own servers or using providers you trust, and says Anthropic reviews connectors against listing criteria for its directory but does not security-audit or manage any MCP server. Treat a third-party server like a third-party dependency with access to your data: read what it can do, check the scopes it requests, and prefer one you can pin or host.
How to start small
- 01Pick one question people ask repeatedly across one system, such as 'where is this order and what is its status?'. Not 'connect everything'.
- 02Write the three or four tools that answer it, each doing one thing with typed inputs and small outputs. Write the description as if for a new colleague.
- 03Put the server in front of a staging copy or a read-only database role. The model never gets the underlying credential.
- 04Add per-user sign-in, an allowlist of who may connect, and the append-only log, before the first real query.
- 05Use it yourselves for a while. Read the log. Look for questions the tools cannot answer and tools being called with arguments you did not expect.
- 06Move to live data through narrow views only when the log looks the way you intended. Add proposals for writes after that, not before.
- 07Write down who owns the server, how to disable it quickly and how to rotate its credential.
A caution about our own track record. We have not published a case study of an MCP server running in production for a client, and we do not claim one. What we can point to is the pattern it relies on: the credential boundary and shadow mode on the fleet order automation, and the append-only audit trail and model-proposes, person-confirms design on the trading ERP, where Claude reads supplier invoices. Our Claude platform page describes operations agents with a short list of narrow tools, usually exposed through an MCP server over your own systems, as something we build; our AI integration page covers the wider work.
Deciding
| If this is true | Then |
|---|---|
| You can write the steps down | Build a workflow. Put a model at the one step that needs it. No MCP server |
| One of your own applications needs two or three functions for a model | Define them in your code with tool use. Add a server if more clients appear |
| Several AI applications need the same access to internal systems | Build one remote MCP server with per-user sign-in and a log |
| The agent would change records or send messages | Read-only first, then proposals, then reversible approved writes |
| The tools can read outsiders' text and also act | Split reading from acting, and put a person on anything outbound |
| You are tempted by a general-purpose tool such as run_sql | Write the narrow tools instead |
| A vendor offers a ready-made server | Read its scopes first, and treat it as a dependency with access to your data |
Common questions
A small program that sits in front of a system and tells an AI application what it can do there, then does it when asked. MCP, the Model Context Protocol, is an open standard for that conversation, so one server can be used by any compatible AI application. The server is where you set what is allowed.
It is a layer on top of one, designed for AI clients. Your normal API is built for programs that know exactly what to call. An MCP server describes its tools in a form a model can read and choose from, and it should expose fewer, narrower actions than the API behind it. It does not replace the API or its security.
Not necessarily. If the steps are fixed, a Make or Zapier scenario or a direct API call with a model at one step is simpler. If one application of yours needs a few functions, define them directly with tool use. A server earns its place when several clients or several systems need one controlled, logged point of access.
Local servers suit a developer experimenting on their own machine. For shared business data, run a remote server you control, so credentials stay in one place, users sign in individually, and there is one log. Anthropic's documentation recommends HTTP for remote servers and describes the older SSE transport as deprecated.
Only with limits. Start read-only on staging, give tools narrow typed inputs, authenticate each user, keep the broad credential inside the server, log every call, and keep a person in the path for anything that writes, sends or pays. Prompt injection through tool results cannot be fully eliminated, so limit what a successful one could do.
Choose one repeated question over one system, write three or four narrow read-only tools, put the server in front of a staging copy, add sign-in and an append-only log, and use it internally while you read the log. Move to live data and then to proposals only when the log shows it behaving as intended.
Sources
Statements about what a platform does are checked against the vendor’s own documentation as of 2026-10-10. Vendors change things, so check the current page before you rely on a limit or a price.
- Connect Claude Code to tools via MCP · Anthropic
- Security · Anthropic
- Tool use with Claude · Anthropic
- Mitigate jailbreaks and prompt injections · Anthropic
Drafted with AI assistance (Claude). Published under Saveez Irfan’s name, who is accountable for it. Editorial policy