A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
A Streamlit-based chat app for LLMs with plug-and-play tool support via Model Context Protocol (MCP), powered by LangCha
A Streamlit-based playground that lets you chat with large language models and seamlessly plug in external Multi-Server Command Protocol (MCP) tools. Spin up multiple FastMCP servers (Weather & Currency) alongside a Streamlit client, all orchestrated with Docker Compose. The client is provider-agnostic (OpenAI • Amazon Bedrock • Anthropic • Google Gemini • Groq) thanks to LangChain + LangGraph. Built with uv for lightning-fast dependency installation.
Want a deep dive into how it all works? Check out the detailed walkthrough in this Medium article: https://medium.com/@elkhan.alizada/your-own-ai-agent-playground-build-it-with-streamlit-langgraph-and-docker-4caeb6fe0ac4


| Feature | Description |
|---|---|
| 🔌 Multi-Server MCP | Register any number of MCP servers; the agent auto-detects available tools & routes calls. |
| 🖥️ Streamlit Chat UI | Rich chat experience with history, sidebar controls and live tool execution output. |
| 🧩 Provider-Agnostic | One LangChain interface for OpenAI, Bedrock, Anthropic, Google, Groq. Switch on the fly. |
| 🎯 Dynamic Model Selection | Override default models with custom model IDs directly from the UI. |
| ➕ Dynamic MCP Server Management | Add/remove MCP servers on-the-fly through the UI without editing config files. |
| 🤖 React Agent via LangGraph | create_react_agent enables dynamic tool selection and reasoning. |
| 🐳 Docker-First | Separate Dockerfiles for client & each server + a single docker-compose.yaml. |
| 📦 Extensible | Drop-in new MCP servers or providers without touching UI code. |
mcp-playground/
├─ docker-compose.yaml # One-command orchestration
├─ client/ # Streamlit UI
│ ├─ app.py # Main entry-point
│ ├─ config.py # Typed settings & defaults
│ ├─ servers_config.json # MCP endpoint catalogue
│ ├─ ui_components/ # Streamlit widgets
│ └─ ...
└─ servers/
├─ server1/ # Weather Service MCP
│ └─ main.py
└─ server2/ # Currency Exchange MCP
└─ main.py
OPENAI_API_KEY) or AWS creds for Bedrock.git clone https://github.com/your-org/mcp-playground.git
cd mcp-playground
docker compose up --build
⚡ Fast Builds with uv: All services use uv for dependency management, providing significantly faster Docker builds compared to traditional pip. Dependencies are cached and only reinstalled when pyproject.toml changes.
| Service | URL | Default Port |
|---|---|---|
| Streamlit Client | http://localhost:8501 | 8501 |
| Weather MCP | http://localhost:8000 | 8000 |
| Currency MCP | http://localhost:8001 | 8001 |
All runtime settings are concentrated in client/config.py and environment variables.
| Variable | Purpose |
|---|---|
MODEL_ID | Provider selector (OpenAI, Bedrock, Anthropic, Google, Groq). |
TEMPERATURE | Sampling temperature (sidebar slider). |
MAX_TOKENS | Token limit (sidebar). |
Default Model IDs:
MODEL_OPTIONS = {
'OpenAI': 'gpt-4o',
'Antropic': 'claude-3-5-sonnet-20240620',
'Google': 'gemini-2.0-flash-001',
'Bedrock': 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
'Groq': 'meta-llama/llama-4-scout-17b-16e-instruct'
}
You can override the default model for any provider directly in the UI:
Examples:
gpt-4o with o1 for reasoning tasks or gpt-4o-mini for cost efficiencyclaude-opus-4.6 or claude-sonnet-4.6 for latest modelsgemini-2.0-flash-exp or gemini-exp-1206 for experimental featuresus.anthropic.claude-opus-4-6-v1 for Opus 4.6 or us.anthropic.claude-sonnet-4-6 for Sonnet 4.6llama-3.3-70b-versatileAdd custom MCP servers without editing servers_config.json:
MyCustomServer)http://localhost:8002/sse)sse or http{"Authorization": "Bearer token"}
Server Sources:
servers_config.json (cannot be removed via UI)MCP endpoints can also be statically defined in servers_config.json for persistent configuration.
Try:
"What will the weather be in Baku tomorrow and how much is 100 USD in AZN?"
:8000mcp = FastMCP("Weather Service", host="0.0.0.0", port=8000)
@mcp.tool()
async def get_current_weather(location: str) -> dict: ...
@mcp.tool()
async def get_forecast(location: str, days: int = 3) -> dict: ...
:8001mcp = FastMCP("Currency Exchange", host="0.0.0.0", port=8001)
@mcp.tool()
async def get_currency_rates(date: str = None) -> dict: ...
@mcp.tool()
async def convert_currency(amount: float, from_currency: str, to_currency: str, date: str = None) -> dict: ...
MCP server integration for DaVinci Resolve Studio
mcp-language-server gives MCP enabled clients access semantic tools like get definition, references, rename, and diagnos
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots