Harbor¶
A team MCP gateway for a WooCommerce store. Administrators connect tools once; members use one endpoint or the dashboard chat with their own identity and permissions.
The React and TypeScript dashboard sits on a Python, FastAPI and MCP gateway. The store, gateway and three original MCP servers run together in Kubernetes.
Start here¶
| I want to... | Read |
|---|---|
| Run the complete system locally | Getting started |
| Use chat, invite a member or manage tool access | User guide |
| Connect an external MCP client | External clients |
| Change the code and run checks | Development |
| Understand the architecture and its tradeoffs | System design |
| Operate, back up or deploy the system | Operations |
| Review the security boundary and remaining risks | Threat model |
| Inspect what was tested and corrected | Verification and audit record |
What is included¶
- A persistent WordPress and WooCommerce storefront with cash-on-delivery checkout.
- Three Streamable HTTP MCP servers: commerce, store policies and shipping quotes. The commerce server implements five product and order tools.
- A dynamic server registry with collision-safe tool names, cached discovery, isolated timeouts and credentials stored in Kubernetes Secrets.
- Invitations, administrator and member roles, individually hashed API keys, immediate revocation and per-tool role permissions.
- Gemini chat that calls the gateway as the signed-in user, shows tool results and asks for confirmation before a write.
- An attributable audit trail, SSRF protection, network isolation and least-privilege Kubernetes RBAC.
- One Helm chart with local and production values, repeatable bootstrap, backup scripts and CI checks.
The project focuses on one store and one gateway replica, with per-tool permissions and security controls around every gateway call.
Scope and evidence¶
Local execution uses your computer and has no VPS dependency. Chat requires a Gemini API key and is subject to the provider's quota. A missing key leaves management and MCP available, with an explicit unavailable-chat notice.
This is a single-node demonstration with production deployment guidance. It does not claim high availability or an already deployed public VPS. The verification record separates local checks, historical end-to-end evidence and work that has not been repeated. The threat model describes the remaining operational limits.
The application repository is private. Repository access is needed to inspect or run its source. The API and environment reference, visual provenance and technical walkthrough provide supporting detail.