MCP Security for Business Users: What to Lock Down First
MCP servers have real access to your systems. The four security practices we set before any client goes live: scope minimisation, read-only where possible, audit logging, credential rotation.
The first time you watch Claude open a customer record in HubSpot, pull the related Slack thread, and draft a reply into Gmail, the convenience is genuinely startling. The second thought, usually about ten seconds later, is less fun. If Claude can do all of that from one prompt, what happens when the prompt is wrong, when the account is compromised, or when a contractor you offboarded six weeks ago still has a token sitting in a config file on their old laptop. Those questions are the whole point of this article. They do not require you to become a security engineer. They do require you to make four specific decisions before an MCP setup moves from your own machine into anything resembling a shared business tool.
The four practices below are the ones we at WitsCode put in place before any client goes live with an MCP configuration. They are not the last word on the subject, and a regulated industry will need more, but they catch the failure modes we see most often in small teams adopting Claude and other MCP-capable clients. The failures are almost never exotic. They are ordinary permissions left wider than they needed to be, logs nobody looked at, and credentials nobody rotated.
Why MCP raises the stakes in a way chat alone did not
A chat assistant that can only read what you paste into the prompt has a very small blast radius. The worst it can do is give you bad advice. An MCP-connected assistant is different. It holds live credentials to Gmail, to your CRM, to your accounting system, to your design files. When the model decides to call a tool, that call runs with your authority. It is closer in category to a junior employee with your password than to a chatbot.
That mental model is the one to hold. Every permission question about MCP becomes easier if you translate it into a question about a new hire on their first day. Would you give the new hire the ability to delete production records on day one. Probably not. Would you hand them admin access to the Google Workspace tenant the moment they signed their contract. Almost certainly not. The MCP server deserves the same caution, and the same default of starting narrow.
Scope minimisation, which is the single highest-leverage control
When you connect an MCP server to a third-party service, somewhere in the setup you authorise a set of scopes. Scopes are the permissions the server can exercise on your behalf. For Google Workspace this happens on the OAuth consent screen. For Slack it happens in the app manifest. For most SaaS providers it happens somewhere inside an admin panel when you generate an API key or install a connector. The scope list is almost always longer than you need.
The default temptation is to tick everything. The server says it supports Drive, Gmail, Calendar, and Docs, so you grant all four. A day later you realise you only ever wanted it to search Drive and draft email, and the calendar and Docs access is sitting there doing nothing except enlarging what a misbehaving prompt could reach. Scope minimisation means, at the start, you grant only what the workflows you actually plan to run on Monday morning need. You can always add a scope later. You almost never go back and remove one once it feels fine.
Read-only is the second half of this idea and deserves its own sentence. Most MCP servers that expose write operations also expose read operations, and most of your early use cases are read cases. You want Claude to summarise a thread, not reply to it. You want Claude to look up a customer, not update the record. When the provider offers a read-only scope, take it. The moment your workflow genuinely needs a write operation, upgrade that single scope. Do not pre-emptively grant write because you might want it eventually. The practical version of this rule on common providers looks like granting gmail.readonly before gmail.modify, granting drive.readonly before drive.file, and granting Slack channels.history before chat.write. Admin scopes are the category to avoid entirely unless a specific, named workflow requires them, because admin scopes are the ones that let a prompt injection cascade from one compromised account to the whole tenant.
Audit logging, which is the control you forget until you need it
The second practice is turning on, and actually looking at, the audit log at the provider level. Most business-tier SaaS products keep a log of who did what, and critically they attribute tool-initiated actions to the OAuth client or service account that made them. Google Workspace has an admin audit log that records every API call against Drive, Gmail, and the rest. Slack keeps an audit log API on its Business Plus and Enterprise Grid plans, and on lower tiers it keeps the access log which is still useful. HubSpot records activity attributed to private apps. Most cloud accounting tools have something equivalent under a name like activity log or security events.
The MCP server itself may also log locally, usually to a file under your user profile. That file is useful for debugging but is not the source of truth, because it lives on the same machine as the agent that could be compromised. The provider-side log is the one that matters, because it lives on the other side of the credential and cannot be rewritten by a local process.
Two decisions turn audit logs from a compliance theatre into something useful. The first is giving your MCP server a distinct identity at the provider. Do not reuse the founder's personal OAuth session. Create a dedicated OAuth client or service account labelled something like claude-mcp-production, so that when you read the log you can instantly separate its actions from your own. The second is setting a recurring review. Once a fortnight, someone, probably you in the first few months, opens the provider admin console and skims the last two weeks of tool activity. You are not trying to audit every call. You are looking for clusters that do not match what you remember asking for, and for any activity in a scope you did not expect the server to use. Ten minutes a fortnight is enough to catch the obvious misbehaviour.
Credential rotation, which stops old tokens becoming permanent back doors
Every MCP server has some form of credential. It might be an OAuth refresh token sitting in a config file. It might be a long-lived API key pasted into an environment variable. Either way, once a credential is issued and stored, it keeps working until something forces it to stop. That is fine in normal operation and catastrophic in two cases. The first is when a machine is lost or compromised. The second is when the person who set it up leaves the company, especially when a contractor offboards. The credential on their laptop keeps working the next day unless you take a deliberate action.
The baseline practice is quarterly rotation for refresh tokens and API keys. Put a recurring calendar entry on the first of January, April, July, and October labelled MCP credential rotation. On that day you revoke the current token at the provider, generate a new one, and update the config on the machines that run your MCP server. The whole thing takes fifteen minutes per server if nothing goes wrong. It forces you to prove, four times a year, that you still know which machines are holding your credentials. That in itself is valuable information that quietly degrades if nobody ever checks.
The second layer is immediate rotation on any trigger event. A laptop goes missing, you rotate. A contractor finishes their engagement, you rotate the same day, before they close their calendar. A member of the team changes roles and no longer needs the connector, you rotate. The trigger does not have to be malicious to justify rotation. The point is that a credential tied to a particular person or machine should die when that person or machine leaves the circle of trust, and the only reliable way to guarantee that is to cut it at the provider end.
One subtle case worth calling out is shared desktop MCP setups. A small team that all uses Claude Desktop against the same OAuth client is effectively sharing one credential. If one member leaves, the quarterly rotation schedule is too slow. Either run separate OAuth clients per user, which is cleaner but more admin, or rotate immediately on any team change.
Tool whitelisting for dangerous MCP servers
The three controls above handle the usual business SaaS case. A fourth control matters specifically for MCP servers that expose dangerous primitives, by which we mean servers that can execute shell commands, run arbitrary SQL, write code to disk, or hit a production database directly. These exist, they are useful in engineering contexts, and they deserve a different default.
For this category, the rule is tool whitelisting. Most MCP clients, including Claude Desktop and the enterprise Claude products, let you approve tools individually rather than wholesale. Instead of trusting the server to expose whatever tools it wishes, you list the specific tool names you allow. A filesystem server might expose read_file, write_file, list_directory, and delete_file. You allow the first three and leave the fourth unchecked. A database server might expose run_query and run_migration. You allow the read query path and keep migrations behind a human step.
The second half of this control is a per-call approval setting, sometimes called human in the loop or confirmation prompts. When enabled, the client pauses before it runs a whitelisted tool and shows you what is about to happen. For a low-risk tool like Drive search you can turn this off. For a shell or database tool you keep it on, even when it slows you down, because the one in five hundred prompt that tries to do something odd is the exact case the pause is there to catch.
Do not run a shell or arbitrary code MCP server against the machine that holds your live credentials for everything else. If you genuinely need one, give it its own user account, its own workspace, and no credentials to anything that matters. A sandbox that can destroy itself is fine. A sandbox that can destroy your company is not a sandbox.
What a first lock-down actually looks like end to end
Put the four controls together and the before-launch checklist is short. You grant the MCP server only the scopes a named workflow needs, defaulting to read-only on every provider that offers the option. You give the server its own OAuth client or service account so its activity is legible in the provider audit log. You turn on the audit log at the provider and schedule a fortnightly ten-minute review. You add a quarterly rotation date to your calendar and a standing rule that contractor offboarding triggers same-day rotation. For any MCP server that can touch a filesystem, a database, or a shell, you whitelist the specific tools you use and keep per-call approvals on.
None of this is exotic. It maps onto controls you probably already apply to the rest of your SaaS stack. The reason to write it down for MCP specifically is that MCP clients are new enough that the defaults do not yet assume a business context. You have to set the defaults yourself. The good news is that once they are set, they travel. A new MCP server added to the stack inherits the habits, the rotation schedule covers it automatically, and the audit review picks up its calls the first time it runs.
If you would like a second pair of eyes on the configuration before a wider rollout, or a written policy that your team can point to when a new server comes up for approval, that is the kind of engagement we run at WitsCode. We sit with the founder and the most technical person on the team for a session, review the MCP servers already installed, set the scope and logging posture across each provider, and leave behind a one-page rotation and review schedule that survives the person who drafted it moving on. -> WitsCode MCP security engagement.
Self-check
Word count approximately 2080, inside the 2000 to 2400 target. Frontmatter present with slug set to mcp-security, pillar Non-Tech Founders, cro_angle uses the arrow form only. Primary keyword mcp security appears in the title, frontmatter, and body. Supporting keywords claude mcp security, mcp server permissions, and mcp access control are covered in substance through the scope minimisation and whitelisting sections, with the permissions and access-control phrases surfaced naturally. Six H2 sections, within the four to eight range. No bullet lists, no em-dashes, no emoji, prose only. SERP-miss content is present across all four required areas: scope minimisation with the read-only default and the ladder of specific scopes, audit logging with named provider consoles including Workspace admin audit log and Slack audit log, credential rotation with the quarterly cadence and immediate contractor-offboarding trigger, and tool whitelisting for dangerous MCP servers with the per-call approval guidance. CRO line closes the article with the arrow form.
Get weekly field notes.
Practical writing on shipping products, straight to your inbox. No spam.
Need help with this?
Custom Web Applications
We design and build web apps, MVPs, and SaaS products. Talk to us about what you are working on.
Talk to usWant to discuss non-tech founders for your business?
Start a project and we'll talk through where you are, what's working, and the highest-leverage moves for the next 90 days.