LABSCO SUMMARY
Two servers from one project.
The interesting part is the shape rather than the features: one repository, two independent stdio entry points, each registered separately with its own environment. That is the pattern to copy if you are grouping several small servers in a single codebase. The news half needs a newsdata.io key before it will answer anything.
What it is
A playground project holding two separate MCP microservices, a News service and a Weather service, both over stdio. Each runs as its own module and is registered as its own entry in the client config.
What you get
- A weather service and a news service as two independent stdio servers, started with
python -m src.weather_mcp.mainandpython -m src.news_mcp.main - A Claude Desktop config block showing both registered side by side, so one project contributes two servers
- A Makefile that handles the environment:
make setup,make sync,make freeze-dependencies,make clean - A small, readable stack —
mcp[cli]for the protocol,httpxfor requests,python-dotenvfor configuration
Requirements
Python 3.12 with the uv package manager and a virtual environment; make setup then make sync prepares it. The client entry points at the uv executable by absolute path with --directory set to the project. The news service needs a free API key from newsdata.io, passed as NEWS_API_KEY in that server's env block; the weather service takes no key.
Setup effort
Build from source — git clone https://github.com/RonFelsenfeld/mcp-playground.git
USE CASES
01
Seeing how two servers coexist in one project
Register both entry points from the same checkout and watch each appear as its own server.
02
Getting news into a conversation
Add a newsdata.io key to the news server's env block and query it from the client.
03
Starting a Python MCP project
Copy the uv-plus-Makefile setup rather than assembling the environment steps yourself.
BEFORE YOU INSTALL
What to know first
Requires
- uv on PATH
- Python 3.12
- NEWS_API_KEY for the news service
INSTALLATION
Connect your client
You clone and build this one yourself, so change the path in the block to wherever your copy ended up, and put your own values in place of the placeholders.
Server setup
TERMINAL
git clone https://github.com/RonFelsenfeld/mcp-playground.git
cd mcp-playground
make setup
source .venv/bin/activate
make syncMCP Clients
Claude Desktop
CLAUDE DESKTOP · JSON
{
"mcpServers": {
"weather": {
"command": "<ABSOLUTE_PATH_TO_UV>",
"args": [
"--directory",
"<YOUR_PROJECT_PATH>",
"run",
"-m",
"src.weather_mcp.main"
]
},
"news": {
"command": "<ABSOLUTE_PATH_TO_UV>",
"args": [
"--directory",
"<YOUR_PROJECT_PATH>",
"run",
"-m",
"src.news_mcp.main"
],
"env": {
"NEWS_API_KEY": "<YOUR_NEWS_API_KEY>"
}
}
}
}