{"id":109391,"date":"2026-04-20T14:06:00","date_gmt":"2026-04-20T14:06:00","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=109391"},"modified":"2026-03-19T10:15:32","modified_gmt":"2026-03-19T10:15:32","slug":"local-vs-remote-mcp-servers-which-should-you-choose","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/ai\/local-vs-remote-mcp-servers-which-should-you-choose\/","title":{"rendered":"Local vs remote MCP servers &#8211; which should you choose?"},"content":{"rendered":"\n<p><strong>MCP (Model Context Protocol) servers let AI apps access real-time data and external tools, improving accuracy beyond static model knowledge. Choosing between local and remote MCP servers affects security, scalability, and integration. In this article, learn all about these servers and which to choose for your use case.<\/strong><\/p>\n\n\n\n<p>When you have an application or agent using <a href=\"https:\/\/modelcontextprotocol.io\/docs\/getting-started\/intro\" target=\"_blank\" rel=\"noreferrer noopener\">MCP (model context protocol)<\/a> servers, one of the architectural decisions you&#8217;ll need to take is where exactly they should be located.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-use-mcp-servers\">Why use MCP servers?<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.ibm.com\/think\/topics\/large-language-models\" target=\"_blank\" rel=\"noreferrer noopener\">Large language models (LLMs)<\/a> are trained on vast amounts of data but don&#8217;t have built-in access to live, up-to-date information. Their knowledge is limited to the data available at the time of training. This doesn&#8217;t usually include data held within an organization&#8217;s own systems.<\/p>\n\n\n\n<p>This limitation matters in business settings, where information changes continuously. For example, customer records, product inventories, orders, and financial data are updated regularly. In order to produce useful output, applications or AI systems often need access to the latest version of this information.<\/p>\n\n\n\n<p>When a user asks a question that depends on information that the model doesn&#8217;t yet have, it can rely on external tools to obtain the missing data. An application or agent invokes these tools, retrieves the relevant information, and supplies it to the model as additional context. The model can then generate a response that combines its general trained knowledge with current, organization-specific data.<\/p>\n\n\n\n<p>MCP servers provide a standard way for applications or agents to interact with services. Instead of needing to understand the specific details of each service <a href=\"https:\/\/www.red-gate.com\/simple-talk\/sysadmin\/general\/api-monitoring-key-metrics-and-best-practices\/\" target=\"_blank\" rel=\"noreferrer noopener\">API<\/a>, a client only needs to know how to connect to an MCP server. Once connected, the server describes the capabilities it makes available. These capabilities generally fall into three categories:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li><strong>Resources<\/strong>: structured information the server exposes. In a database-related server these might include tables, views, or other entities &#8211; but it really is any data or content exposed by the server.<br><br><\/li>\n\n\n\n<li><strong>Tools<\/strong>: actions that the client can invoke. For databases, these might include executing queries, running <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/theory-and-design\/data-control-language-aka-security\/\" target=\"_blank\" rel=\"noreferrer noopener\">data definition language (DDL)<\/a> statements, or performing other supported operations.<br><br><\/li>\n\n\n\n<li><strong>Prompts:<\/strong> prompt templates, or structured messages and instructions, that a client can discover, retrieve, and optionally <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/performance-implications-of-parameterized-queries\/\" target=\"_blank\" rel=\"noreferrer noopener\">parameterize<\/a>.<\/li>\n<\/ul>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-where-are-mcp-servers-located\">Where are MCP servers located?<\/h2>\n\n\n\n<p>AI-based apps and agents often connect to multiple MCP services:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"796\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/03\/image-11.png\" alt=\"An image showing a graph of how AI-based apps and agents often connect to multiple MCP services.\" class=\"wp-image-109392\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/03\/image-11.png 940w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/03\/image-11-300x254.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/03\/image-11-768x650.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p>In the example shown above, the app is talking to a large language model but is also able to make use of a cloud service, a remote database, and a local filesystem resource.<\/p>\n\n\n\n<p>This demonstrates the different locations for the MCP servers. On the local server, the app spins up three MCP clients &#8211; one for each of the MCP servers.<\/p>\n\n\n\n<section id=\"my-first-block-block_1e3859ae12455328a059ee50b2428aab\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Simple Talk is brought to you by Redgate Software<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            Take control of your databases with the trusted Database DevOps solutions provider. Automate with confidence, scale securely, and unlock growth through AI.                                    <\/div>\n            <\/div>\n                            <a href=\"https:\/\/www.red-gate.com\/solutions\/overview\/\" class=\"btn btn--secondary btn--lg\">Discover how Redgate can help you<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-explaining-the-three-different-mcp-clients\">Explaining the three different MCP clients<\/h4>\n\n\n\n<p>The simplest option is example 1 (shown at the bottom of the graph.) There is a local MCP server that provides access to the file system, and the app spins up an MCP client to connect to it.<\/p>\n\n\n\n<p>Example 3 (at the top) is where a remote cloud service provides its own MCP server. The app then just needs to spin up the MCP client, which connects to the provided server over the Internet or local network.<\/p>\n\n\n\n<p>Example 2 (in the middle) is the most commonly used today. The remote database doesn&#8217;t offer its own MCP server but the code for one is provided. This code is often supplied by the database vendor but it could also come from a third party. The MCP server for the database is also instantiated locally on the app server, along with an MCP client that can talk to it. Between the database MCP server and the remote database, the communication uses the API of the database engine, often via a <a href=\"https:\/\/www.sciencedirect.com\/topics\/computer-science\/database-driver\" target=\"_blank\" rel=\"noreferrer noopener\">database driver<\/a>.<\/p>\n\n\n\n<p>The reason why the middle example is so common today is related to security. The top example requires a shared security setup, which is not always available. It&#8217;s usually easier, therefore, to have the MCP server within the local system boundary, as in the middle example.<\/p>\n\n\n\n<p>Security is improving fast, though, and the current specification includes explicit security guidance for Streamable HTTP. This includes origin validation, localhost binding guidance, authentication recommendations, and an authorization model based on <a href=\"https:\/\/oauth.net\/2.1\/\" target=\"_blank\" rel=\"noreferrer noopener\">OAuth 2.1<\/a> conventions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-are-mcp-client-to-server-transports\">What are MCP client-to-server transports?<\/h2>\n\n\n\n<p>MCP clients (like <a href=\"https:\/\/modelcontextprotocol.io\/docs\/tools\/inspector\" target=\"_blank\" rel=\"noreferrer noopener\">MCP Inspector<\/a>) define two standard <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-03-26\/basic\/transports\" target=\"_blank\" rel=\"noreferrer noopener\">transport options: Streamable HTTP and stdio<\/a>. They carry the same MCP messages but suit different deployment styles.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-streamable-http-explained\">Streamable HTTP explained<\/h4>\n\n\n\n<p>With Streamable HTTP, the server runs as an independent service, and clients talk to it over HTTP. The specification uses <code><a href=\"https:\/\/www.w3schools.com\/tags\/ref_httpmethods.asp\" target=\"_blank\" rel=\"noreferrer noopener\">POST<\/a><\/code> for client-to-server messages. This makes it far more suitable for remote access, shared services, and <a href=\"https:\/\/www.brentozar.com\/archive\/2011\/06\/how-design-multiclient-databases\/\" target=\"_blank\" rel=\"noreferrer noopener\">multi-client<\/a> scenarios.<\/p>\n\n\n\n<p>Streamable HTTP replaced the older HTTP+SSE transport, and SSE (server-side events) now appears as an optional streaming mechanism within Streamable HTTP or as part of backwards compatibility, rather than as a separate current standard transport.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-stdio-explained\">stdio explained<\/h4>\n\n\n\n<p>The simpler option is stdio. The client starts the MCP server as a local subprocess, sends <a href=\"https:\/\/www.jsonrpc.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSON-RPC<\/a> messages through <a href=\"https:\/\/stackoverflow.com\/questions\/44423865\/what-exactly-is-stdin\" target=\"_blank\" rel=\"noreferrer noopener\">stdin<\/a>, and receives responses on stdout. That makes it a natural fit for local tools, desktop apps, and development scenarios where everything runs on one machine.<\/p>\n\n\n\n<p>The main advantage of stdio is its simplicity. There is no separate web server to publish, no HTTP endpoint to configure, and no network path to secure. It can be a very direct way for a client such as a desktop application to talk to a local MCP server.<\/p>\n\n\n\n<p>stdio is usually the easier choice when the server is local and tightly coupled to one client, while HTTP is the stronger choice when the server needs to be reachable over a network, reused by many clients, or integrated with broader web infrastructure.<\/p>\n\n\n\n<p>For HTTP transports, the specification includes specific security guidance. By contrast, local stdio servers often rely on the local machine context and environment-based <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/changing-service-credentials\/\" target=\"_blank\" rel=\"noreferrer noopener\">credentials<\/a> instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>In practice, the choice between local and remote MCP servers is mainly a question of deployment, connectivity, and security. Local servers are often simpler to run and easier to secure within an existing application boundary, while remote servers are better suited to shared services and broader network access. As MCP continues to mature, understanding these trade-offs will help architects choose the approach that best fits their applications, data sources, and operational constraints.<\/p>\n\n\n\n<section id=\"faq\" class=\"faq-block my-5xl\">\n    <h2>FAQs: Local vs remote MCP servers &#8211; which should you choose?<\/h2>\n\n                        <h3 class=\"mt-4xl\">1. What is an MCP server?<\/h3>\n            <div class=\"faq-answer\">\n                <p data-start=\"351\" data-end=\"473\">An MCP server is a standard interface that lets AI apps access data, tools, and prompts from external systems.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">2. Why use MCP servers?<\/h3>\n            <div class=\"faq-answer\">\n                <p>MCP servers are used to give AI access to up-to-date, organization-specific data.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">3. Where can MCP servers run?<\/h3>\n            <div class=\"faq-answer\">\n                <p>MCP servers can run locally, remotely, or in a hybrid setup.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">4. Which setup is most common?<\/h3>\n            <div class=\"faq-answer\">\n                <p data-start=\"639\" data-end=\"741\">The most common MCP setup is a local MCP server connecting to a remote service (like a database).<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">5. What transports does MCP use?<\/h3>\n            <div class=\"faq-answer\">\n                <p>MCP uses the following transports: Streamable HTTP (networked) and stdio (local).<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">6. Which transport should I choose for MCP?<\/h3>\n            <div class=\"faq-answer\">\n                <div class=\"flex flex-col text-sm\">\n<section class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" data-turn-id=\"request-WEB:25f93734-5355-4263-be7a-20bdc1172cac-1\" data-testid=\"conversation-turn-4\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\">\n<div class=\"flex max-w-full flex-col gap-4 grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"76d3e56c-2f3f-4ada-9d65-7035244eb6ff\" data-message-model-slug=\"gpt-5-3\" data-turn-start-message=\"true\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden\">\n<div class=\"markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling\">\n<p data-start=\"827\" data-end=\"934\" data-is-last-node=\"\" data-is-only-node=\"\">Choose stdio for simple local use, and HTTP for scalable, multi-client systems.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"z-0 flex min-h-[46px] justify-start\">\u00a0<\/div>\n<div class=\"mt-3 w-full empty:hidden\">\n<div class=\"text-center\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<div class=\"pointer-events-none h-px w-px absolute bottom-0\" aria-hidden=\"true\" data-edge=\"true\">\u00a0<\/div>\n            <\/div>\n            <\/section>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-else-is-new-on-simple-talk\">What else is new on Simple Talk?<\/h2>\n\n\n<ul class=\"wp-block-latest-posts__list wp-block-latest-posts\"><li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/www.red-gate.com\/simple-talk\/ai\/local-vs-remote-mcp-servers-which-should-you-choose\/\">Local vs remote MCP servers &#8211; which should you choose?<\/a><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/www.red-gate.com\/simple-talk\/ai\/when-and-when-not-to-use-llms-in-your-data-pipeline\/\">When, and when not, to use LLMs in your data pipeline<\/a><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/can-sql-server-2025s-regexp_split_to_table-fix-string_split-in-t-sql\/\">Can SQL Server 2025&#8217;s REGEXP_SPLIT_TO_TABLE fix STRING_SPLIT in T-SQL?\u00a0<\/a><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/www.red-gate.com\/simple-talk\/development\/data-manipulation-techniques-in-esproc-spl-a-complete-guide\/\">Data manipulation techniques in esProc SPL: a complete guide<\/a><\/li>\n<li><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/cross-database-ownership-chaining-in-sql-server-security-risks-behavior-and-privilege-escalation-explained\/\">Cross-database ownership chaining in SQL Server: security risks, behavior, and privilege escalation explained<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>MCP (Model Context Protocol) servers let AI apps access real-time data and external tools, improving accuracy beyond static model knowledge. Choosing between local and remote MCP servers affects security, scalability, and integration. In this article, learn all about these servers and which to choose for your use case.&hellip;<\/p>\n","protected":false},"author":346483,"featured_media":109395,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[159169,53],"tags":[159075,5300,159380],"coauthors":[159368],"class_list":["post-109391","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-featured","tag-ai","tag-architecture","tag-mcp-model-context-protocol"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/109391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/346483"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=109391"}],"version-history":[{"count":6,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/109391\/revisions"}],"predecessor-version":[{"id":110060,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/109391\/revisions\/110060"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media\/109395"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=109391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=109391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=109391"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=109391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}