Introduction
I spent some time exploring the Model Context Protocol (MCP). Not a deep dive—just a hands-on attempt to understand how it actually works.
So I built a minimal client + server setup:
👉 https://github.com/an1meshk/claude-chat-cli
In a real-world project, we will build client and server separately; however, as this was just a demo project, everything was built in the same project
A few things stood out more than I expected.
Demo
🧠 Context
The goal wasn’t to learn everything about MCP. It was to answer a simpler question:
How hard is it to actually build something with it?
Before moving further, here is a quick MCP client and server architecture diagram:

⚙️ What I Tried
- Went through the MCP intro course - link
- Built a minimal client and server in Python using the course’s startup kit
- Connected it to a simple CLI chat client that already came with the startup kit
Nothing complex—but enough to see how things fit together.
💡 What Stood Out
1. Setup Is Simpler Than Expected
I was expecting some heavy setup. But, instead:
- Basic server setup was straightforward
- The Python MCP library abstracts most of the complexity
👉 It felt closer to:
“Define a few handlers, and you’re up.”
than:
“learn a new framework.”
2. The Real Concept Is Context Flow
The interesting part wasn’t the server setup. It was understanding:
- How context flows
- How tools are exposed
- How the model interacts with them
That’s where the mental shift is.
🧠 What Helped Me Understand It
This simple mental model made things click:
image credit Anthropic academy course
Client → MCP Server → Tool → Response → Client
- Client sends a request
- MCP server routes it
- The tool executes logic
- Exposing resources
- Response flows back
Once this clicked, everything else made more sense
⚡ If You Want to Try It
The setup is intentionally minimal:
- Basic MCP server using Python
- A simple tool
- CLI client to trigger it
That’s enough to understand the core idea
Repo:
https://github.com/an1meshk/claude-chat-cli
You will need an Anthropic API key, as this project uses Claude
⚙️ One More Thing That Helped
Project uses uv for dependency management. That helps in a few ways:
- Fast installs
- Clean environment setup
- Minimal friction
It removes a lot of the usual setup overhead
⚠️ What I Haven’t Explored Yet
This was just a first pass. Still curious about:
- Structuring tools cleanly
- Scaling MCP servers
- Real production use cases
🧠 Initial Take
My early impression:
- MCP isn’t hard to start with
- But the real value is in how you design interactions
The setup is easy.
The thinking is where the work is.
🏁 Final Thought
Sometimes the best way to understand a new concept is:
Build the simplest possible version of it
This was one of those cases.
If you have reached here, then I have made a satisfactory effort to keep you reading. Please be kind enough to leave any comments or share any corrections.
My Other Blogs:
- Shift-Left Performance Testing in Spring Boot: Engineering Stability Before Scale
- Practical Tips When Working with AI Coding Assistants
- To Avoid Performance Impact Never Use Spring RestClient Default Implementation in Production
- Modern DevSecOps Needs More Than One Tool: A Practical Secure SDLC Strategy
- Supercharge Your E2E Tests with Playwright and Cucumber Integration
- When Resilience Backfires: Retry and Circuit Breaker in Spring Boot


Top comments (0)