- Before diving into the practical setup, make sure to read this essential article that covers the basics of MCP. The concepts explained in the article will help you understand the practical steps in this guide.
By the end of this lesson, you'll be able to:
- Understand what MCP is and why it's important
- Connect MCP Client to local and cloud-based MCP Servers
- Understand transport protocols and proxies
- Be aware of MCP's limitations
- Will take approximately 15 minutes
Model Context Protocol (MCP) allows Large Language Models (LLMs) to interact with your real-world data, applications, and tools by adding context they wouldn't otherwise know (e.g. your calendar, files, or CRM).
MCP bridges LLMs and your environment through:
- MCP Servers – Expose tools, resources, or data
- MCP Clients – Interface for the LLM to talk to servers
- MCP Proxy – Translates between server "languages": STDIO, SSE, streamable-HTTP
💡 Think of MCP as giving ChatGPT or Claude access to your apps and tools in a controlled, programmable way.
-
MCP Client Is a software that can connect to MCP Servers to get their available tools and provide those tools to your LLM. It supports:
-
Consume in your custom code such as Python with FastMCP module
-
Or with User-Interface-based applications for developers such as: Cursor, Windsurf, VS Code GitHub Copilot, VS Code extentions: RooCode, Cline, Continue and others
-
Ensure your Docker Desktop or Podman Deskrop is running.
-
For general public: Claud Desktop, Letta ADE Desktop, LM Studio
Each MCP Server may speak with one of a couple of these "languages" (MCP Transport Protocols). Locally running MCP Servers almost all typically support STDIO transport protocol but may support SSE and Streamable-HTTP.
- STDIO - typically with locally installed MCP Servers
- SSE - sometimes with locally installed MCP Servers, more often with cloud-based MCP Servers
- Streamable-HTTP - sometimes with locally installed MCP Servers, more often with cloud-based MCP Servers
Same goes to MCP Clients, which may not speak MCP Server's language, that's where you'll need MCP Proxy to translate:
- MCP-Remote – Simple Streamable-HTTP & SSE → STDIO proxy with auth. Your go-to first choice since most MCP Clients support STDIO.
- MCP-Proxy - For SSE ⇄ STDIO or SSE ⇄ StreamableHttp
- SuperGateway - Converts between STDIO and HHTP-based transports (SSE, StreamableHttp, WebSockets)
To run MCP Servers locally you'll need these tools installed:
- Locally with
npm/npx,uv/uvx/pip,bun/bunx,node, python. Note when you installuvit also hasuvx, andnpmhas build-innpxand the same withbun/bunx. Most of the commands starting withpipcan be replaced withuv piporuvx. Most of the time installed like this MCP Servers support STDIO-only but may support SSE or even Streamable-HTTP transports. - In containers Docker (docs) / Podman - may support one or a few transport protocols.
- Via MCP Toolkit (Docker Desktop extension) - STDIO-only.
To prepare for this please go ahead and install Docker Desktop, npm, uv and bun on your local computer using the links above.
- Install Docker Desktop
- Open the app, in the right panel find "Extensions", Press "Manage", then select "Browse" tab, search "MCP Toolkit", Press "Install"
If for example you need to use mcp-server-time MCP Server locally, with uvx you don't need to install it! That's the whole point of using uvx (just like npx).
uvx mcp-server-time will:
- Automatically download and install mcp-server-time in a temporary, isolated environment
- Run it immediately
- Clean up after execution (unless you specify otherwise)
- This is similar to how
npx @mcp/filesystemworks - it downloads and runs the package without requiring a separate installation step, you just neednpminstalled. - Same goes for
bunx @sylphlab/filesystem-mcpjust installbun
From online services with native MCP support (e.g. GitHub, DeepWiki, Cloudflare). Some may support SSE only or streamable-HTTP only or both:
- SSE: example https://mcp.deepwiki.com/sse (note /sse at the end indicating SSE protocol)
- Streamable-HTTP: example https://mcp.context7.com/mcp (note /mcp at the end indicating StreamableHttp)
- Streamable-HTTP with Auth: example https://api.githubcopilot.com/mcp/ read more
In some cases Auth is not needed, like for example https://mcp.deepwiki.com/ that works as a public source of documentation that our MCP Clients only reads from the website while others require some form of Authentication using login & password, API keys. And OAuth dynamically can authenticate the user providing a more secure way to login.
Open the mcpServers.json example config file and update:
- OpenMemory/Cloud: OPENMEMORY_API_KEY with your key. Register & get API here
- Linkedin-my12345: Composio with your URL that begins with
https://mcp.composio.dev/composio/server. Register and get the URL here - filesystem: with the correct full paths on your local computer
Most notable limitations:
- Security: Prompt poisoning, code injection, tool shadowing, cleartext creds. OAuth partly solves this (if your app supports it), also Docker Desktop MCP Toolkit is a better solution than cleartext config with credentials, but still not an enterprise solution.
- OAuth-only: if your application has a different Auth mechanism, then you're probably going to store your credentials in cleartext.
- Performance: Context-window and token limits. Each MCP Server may expose a dozen of tools. More than 20-50 tools can significantly decrease quality of LLM performance, therefore controlling how many MCP servers used is crucial (and unfortunately a manual task).
- Anthropic Claude Desktop - for General Public
- Cursor - for Developers
- Roo Code (VS Code Extension) - for Developers
- VS Code Copilot Chat - for Developers
Install one Low-Code Agentic RAG builder:
- Flowise + external MCP-Flowise Server
- LangFlow (MCP Server is build-in)