mcp-multiclient-platform
ZenBiz Multi-Client Docker MCP Platform
A Dockerized, multi-client version of the existing Odoo MCP connector. The codebase is shared, while every client runs in an isolated MCP container with its own configuration and Odoo credentials.
Architecture
HOST OPERATING SYSTEM
clients/peltierpro/.env clients/zenbiz/.env
| |
v v
+--------------------+ +--------------------+
| mcp-peltierpro | | mcp-zenbiz |
| container :8000 | | container :8000 |
| host :8000 | | host :8001 |
+---------+----------+ +----------+---------+
| |
v v
Peltier Pro Odoo ZenBiz Odoo
same Docker image / same MCP tool modulesThis directly follows the proposed initialization/configuration plan, but does not introduce a database yet. Configuration currently comes from per-client Docker environment files.
Why this is multi-client
The application no longer hard-codes Peltier Pro in server.py. At container startup, Settings.from_env() initializes the MCP identity, Odoo connection, transport, OAuth and security settings from that client's .env file.
As a result, one repository can serve Peltier Pro, ZenBiz, and future customers without duplicating the tools.
Project structure
.
├── app/
│ ├── server.py # generic MCP initialization
│ ├── config.py # dynamic per-container settings
│ ├── odoo_client.py
│ ├── prompts.py
│ └── tools/ # shared MCP capabilities
├── clients/
│ ├── peltierpro/
│ │ ├── .env # local example; replace secrets
│ │ └── .env.example
│ ├── zenbiz/
│ │ ├── .env
│ │ └── .env.example
│ └── _template/
│ └── .env.example
├── Dockerfile # one reusable MCP image
└── docker-compose.yml # creates multiple MCP containersStart both MCP containers
First replace ODOO_API_KEY=replace-... in the client .env files.
docker compose up -d --buildThen:
Peltier Pro MCP:
http://localhost:8000/mcpZenBiz MCP:
http://localhost:8001/mcpPeltier health:
http://localhost:8000/healthZenBiz health:
http://localhost:8001/health
Both containers listen on port 8000 internally. Docker maps them to different host ports, matching the proposed MCP:8000, MCP:8001 model.
Add a third client
Copy the template:
cp -R clients/_template clients/client3
cp clients/client3/.env.example clients/client3/.envAdd this service:
mcp-client3:
<<: *mcp-common
container_name: mcp-client3
env_file:
- ./clients/client3/.env
ports:
- "8002:8000"Then rebuild:
docker compose up -d --buildConfiguration flow
At this stage, the proposed Initialization & Load Configurations block is implemented by Docker + Settings.from_env():
Docker Compose selects a client configuration.
Docker creates an isolated MCP container.
app/config.pyloads client identity, Odoo settings, transport/security and OAuth settings.app/server.pycreates the MCP service and registers the shared tools.The MCP container connects only to the Odoo instance defined for that client.
A future management system/database can replace or generate these .env files without requiring a redesign of the MCP tools.
Security note
Do not commit real .env files or API keys. For production, use deployment secrets/environment variables (Railway, Docker secrets, a secrets manager, etc.).
mcp-multiclient-platform
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aljon-zb/mcp-multiclient-platform'
If you have feedback or need assistance with the MCP directory API, please join our Discord server