Compare commits

...

4 Commits

Author SHA1 Message Date
2792fdf628 docs: add AGENTS.md with comprehensive MCP server documentation
Document all 27 MCP servers including:
- Categorized overview by function and language
- Detailed capability descriptions
- Environment variable reference table
- Quick start commands
- Validation checklist
- Development notes and references

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-01-21 17:17:30 -05:00
ff5f487162 docs: add STATUS.md for tracking validation progress
Track setup and validation status of all 27 MCP servers
with markdown table showing repository name and status.
Include usage instructions for building, starting,
stopping, and rebuilding individual services.

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-01-21 17:17:27 -05:00
9597968408 feat: add Docker Compose configuration for 27 MCP servers
- Configure all MCP/LSP servers with KNELDevStack-AIMW- prefix
- Categorize services by function (dev, ops profiles)
- Set up environment variables for authentication
- Configure ports and volumes where needed
- Create custom Dockerfiles for repos without native support

Services include design tools, infrastructure management,
development tools, content management, collaboration,
analytics, security, and productivity automation.

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-01-21 17:17:23 -05:00
e03266d168 chore: add .gitignore to exclude vendor directory
💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-01-21 17:17:17 -05:00
4 changed files with 656 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
vendor/

176
AGENTS.md Normal file
View File

@@ -0,0 +1,176 @@
# AI Agents Documentation
This document tracks the AI agents and MCP servers configured in this project.
## Agents Overview
### Available MCP Servers
#### Design & Engineering (3 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| kicad-mcp | KNELDevStack-AIMW-kicad-mcp | In Progress | PCB design automation with 64 tools, JLCPCB integration |
| blender-mcp | KNELDevStack-AIMW-blender-mcp | Pending | 3D modeling, materials, scenes, AI 3D model generation |
| freecad-mcp | KNELDevStack-AIMW-freecad-mcp | Pending | CAD modeling, Python execution, parts library |
#### Hosting & Infrastructure (5 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| kubernetes-mcp | KNELDevStack-AIMW-kubernetes-mcp | Pending | K8s/OpenShift management (native Go implementation) |
| docker-mcp | KNELDevStack-AIMW-docker-mcp | Pending | Container and compose stack management |
| proxmox-mcp | KNELDevStack-AIMW-proxmox-mcp | Pending | Hypervisor VM/container management |
| terraform-mcp | KNELDevStack-AIMW-terraform-mcp | Pending | IaC automation, HCP Terraform, workspace management |
| cloudron-mcp | KNELDevStack-AIMW-cloudron-mcp | Pending | Self-hosted app management |
#### Development Tools (2 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| bash-language-server | KNELDevStack-AIMW-bash-language-server | Pending | LSP for bash (diagnostics, completion, formatting) |
| context7-mcp | KNELDevStack-AIMW-context7-mcp | Pending | MCP server framework and SDK for documentation |
#### Content Management (4 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| nextcloud-mcp | KNELDevStack-AIMW-nextcloud-mcp | Pending | 90+ tools across 8 apps (Notes, Calendar, Files, Deck, etc.) |
| ghost-mcp | KNELDevStack-AIMW-ghost-mcp | Pending | CMS post, member, newsletter management |
| docspace-mcp | KNELDevStack-AIMW-docspace-mcp | Pending | Room, file, collaboration management |
| wordpress-mcp | KNELDevStack-AIMW-wordpress-mcp | Pending | WordPress integration via Abilities API |
#### Communication & Collaboration (3 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| discourse-mcp | KNELDevStack-AIMW-discourse-mcp | Pending | Forum search, posts, topics, categories (read/write modes) |
| imap-mcp | KNELDevStack-AIMW-imap-mcp | Pending | Email browsing, composition, Gmail OAuth2 support |
| postizz-mcp | KNELDevStack-AIMW-postizz-mcp | Pending | Social media management platform |
#### Analytics & Security (2 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| matomo-mcp | KNELDevStack-AIMW-matomo-mcp | Pending | Analytics integration |
| bitwarden-mcp | KNELDevStack-AIMW-bitwarden-mcp | Pending | Official password vault management |
#### Productivity & Automation (6 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| gimp-mcp | KNELDevStack-AIMW-gimp-mcp | Pending | Image editing with GIMP 3.0, OCR support |
| snipeit-mcp | KNELDevStack-AIMW-snipeit-mcp | Pending | Asset inventory, maintenance tracking |
| mcp-redmine | KNELDevStack-AIMW-mcp-redmine | Pending | Project management, issue tracking, file operations |
| mcp-ansible | KNELDevStack-AIMW-mcp-ansible | Pending | IT automation playbooks |
| elasticsearch-mcp | KNELDevStack-AIMW-elasticsearch-mcp | Pending | Search and index management (Rust) |
| audiobook-mcp | KNELDevStack-AIMW-audiobook-mcp | Pending | Audiobook management with AI-powered features |
#### Additional Tools (3 servers)
| Service | Container Name | Status | Description |
|---------|---------------|--------|-------------|
| drawio-mcp | KNELDevStack-AIMW-drawio-mcp | Pending | Draw.io diagram management |
| docker-language-server | KNELDevStack-AIMW-docker-language-server | Pending | Language server for Dockerfiles, Compose files, Bake files |
## Agent Capabilities
### By Language
#### TypeScript/Node.js (13 servers)
Most use `npx` for installation:
- KiCAD MCP
- Bitwarden MCP
- Discourse MCP
- Ghost MCP
- Cloudron MCP
- Kubernetes MCP
- Draw.io MCP
- Matomo MCP
- Postiz MCP
- WordPress MCP
- Audiobook MCP
- Context7 MCP
- Bash Language Server
#### Python (10 servers)
Most use `uvx` for installation:
- Blender MCP
- FreeCAD MCP
- GIMP MCP
- Docker MCP
- Proxmox MCP
- Snipe-IT MCP
- Redmine MCP
- IMAP MCP
- Ansible MCP
- Nextcloud MCP (hybrid)
#### Go (2 servers)
- Kubernetes MCP (also available via npx)
- Terraform MCP
#### Rust (1 server)
- Elasticsearch MCP
## Environment Variables Reference
Common environment variables required for MCP servers:
| Service | Required Variables |
|---------|-------------------|
| bitwarden-mcp | `BITWARDEN_CLIENT_ID`, `BITWARDEN_CLIENT_SECRET`, `BITWARDEN_PASSWORD`, `BITWARDEN_SERVER_URL` |
| discourse-mcp | `DISCOURSE_URL`, `DISCOURSE_API_KEY`, `DISCOURSE_API_USERNAME` |
| ghost-mcp | `GHOST_API_URL`, `GHOST_ADMIN_API_KEY` |
| cloudron-mcp | `CLOUDRON_URL`, `CLOUDRON_TOKEN` |
| nextcloud-mcp | `NEXTCLOUD_HOST`, `NEXTCLOUD_USERNAME`, `NEXTCLOUD_APP_PASSWORD` |
| proxmox-mcp | `PROXMOX_HOST`, `PROXMOX_USER`, `PROXMOX_TOKEN`, `PROXMOX_NODE` |
| snipeit-mcp | `SNIPEIT_URL`, `SNIPEIT_TOKEN` |
| redmine-mcp | `REDMINE_URL`, `REDMINE_API_KEY` |
| wordpress-mcp | `WORDPRESS_URL`, `WORDPRESS_USERNAME`, `WORDPRESS_APPLICATION_PASSWORD` |
| docspace-mcp | `DOCSPACE_HOST`, `DOCSPACE_TOKEN` |
| imap-mcp | `IMAP_SERVER`, `IMAP_PORT`, `IMAP_USERNAME`, `IMAP_PASSWORD` |
| postizz-mcp | `POSTIZ_API_KEY`, `POSTIZ_URL` |
| matomo-mcp | `MATOMO_URL`, `MATOMO_TOKEN` |
| elasticsearch-mcp | `ELASTICSEARCH_URL`, `ELASTICSEARCH_USERNAME`, `ELASTICSEARCH_PASSWORD` |
| context7-mcp | `UPSTASH_REDIS_REST_URL`, `UPSTASH_REDIS_REST_TOKEN` |
## Quick Start
To start an agent:
```bash
docker compose up -d <service-name>
```
Example:
```bash
docker compose up -d kicad-mcp
```
To view logs:
```bash
docker compose logs -f <service-name>
```
To stop an agent:
```bash
docker compose stop <service-name>
```
## Development Notes
- All containers use the prefix `KNELDevStack-AIMW-` for easy identification
- Container names are in PascalCase for readability
- Service names are lowercase for Docker Compose compatibility
- Each agent is validated individually before moving to the next
- Vendor directory is gitignored to avoid committing cloned repositories
## Validation Checklist
For each agent, verify:
- [ ] Container builds successfully
- [ ] Container starts without errors
- [ ] Logs show proper initialization
- [ ] Environment variables are correctly set (if required)
- [ ] MCP protocol handshake completes
- [ ] Tools are registered and available
- [ ] Resources are accessible (if applicable)
## References
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [MCP SDK](https://github.com/modelcontextprotocol/sdk)
- [AIWorkStack-dev](https://github.com/stars/ReachableCEO/lists/aiworkstack-dev)
- [AIWorkStack-ops](https://github.com/stars/ReachableCEO/lists/aiworkstack-ops)

57
STATUS.md Normal file
View File

@@ -0,0 +1,57 @@
# MCP Servers Setup Status
Tracking the setup and validation of MCP/LSP servers via Docker Compose.
| Repository | Status | Notes |
|------------|--------|-------|
| KiCAD-MCP-Server | Pending | |
| freecad-mcp | Pending | |
| blender-mcp | Pending | |
| context7 | Pending | |
| gimp-mcp | Pending | |
| bash-language-server | Pending | |
| docker-language-server | Pending | |
| drawio-mcp-server | Pending | |
| matomo-mcp-client | Pending | |
| imap-mcp | Pending | |
| mcp-redmine | Pending | |
| ghost-mcp | Pending | |
| discourse-mcp | Pending | |
| mcp-cloudron | Pending | |
| postizz-MCP | Pending | |
| snipeit-mcp | Pending | |
| nextcloud-mcp-server | Pending | |
| docspace-mcp | Pending | |
| docker-mcp | Pending | |
| kubernetes-mcp-server | Pending | |
| ProxmoxMCP | Pending | |
| terraform-mcp-server | Pending | |
| mcp-ansible | Pending | |
| mcp-server (Bitwarden) | Pending | |
| mcp-adapter (WordPress) | Pending | |
| audiobook-mcp-server | Pending | |
| mcp-server-elasticsearch | Pending | |
## Usage
To build and start a specific server:
```bash
docker compose up -d <service-name>
```
To view logs:
```bash
docker compose logs -f <service-name>
```
To stop a server:
```bash
docker compose stop <service-name>
```
To rebuild a server after changes:
```bash
docker compose build --no-cache <service-name>
```
Note: Use lowercase service names from the compose file. Container names will still be prefixed with CDS-AIMW-.

422
docker-compose.yml Normal file
View File

@@ -0,0 +1,422 @@
services:
# ==========================================
# Design & Engineering (3 servers)
# ==========================================
# KiCAD MCP - PCB design automation
kicad-mcp:
build:
context: ./vendor/KiCAD-MCP-Server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-kicad-mcp
restart: unless-stopped
environment:
- NODE_ENV=production
command: ["node", "dist/index.js"]
profiles:
- dev
# Blender MCP - 3D modeling and materials
blender-mcp:
build:
context: ./vendor/blender-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-blender-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
command: ["uvx", "blender-mcp"]
profiles:
- dev
# FreeCAD MCP - CAD modeling
freecad-mcp:
build:
context: ./vendor/freecad-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-freecad-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
command: ["uvx", "freecad-mcp"]
profiles:
- dev
# ==========================================
# Hosting & Infrastructure (5 servers)
# ==========================================
# Kubernetes MCP - K8s/OpenShift management
kubernetes-mcp:
build:
context: ./vendor/kubernetes-mcp-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-kubernetes-mcp
restart: unless-stopped
ports:
- "8081:8080"
volumes:
- ~/.kube/config:/root/.kube/config:ro
profiles:
- ops
# Docker MCP - Container and compose management
docker-mcp:
build:
context: ./vendor/docker-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-docker-mcp
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ~/.docker/config.json:/root/.docker/config.json:ro
environment:
- PYTHONUNBUFFERED=1
command: ["uvx", "docker-mcp"]
profiles:
- ops
# Proxmox MCP - Hypervisor management
proxmox-mcp:
build:
context: ./vendor/ProxmoxMCP
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-proxmox-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- PROXMOX_HOST=${PROXMOX_HOST}
- PROXMOX_USER=${PROXMOX_USER}
- PROXMOX_TOKEN=${PROXMOX_TOKEN}
- PROXMOX_NODE=${PROXMOX_NODE}
command: ["uvx", "proxmox-mcp"]
profiles:
- ops
# Terraform MCP - IaC automation
terraform-mcp:
build:
context: ./vendor/terraform-mcp-server
dockerfile: Dockerfile
target: dev
container_name: KNELDevStack-AIMW-terraform-mcp
restart: unless-stopped
environment:
- HOME=/terraform
volumes:
- ~/.terraform.d:/terraform/.terraform.d:ro
- ./terraform-cache:/terraform/.terraform.cache
profiles:
- ops
# Cloudron MCP - Self-hosted app management
cloudron-mcp:
build:
context: ./vendor/mcp-cloudron
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-cloudron-mcp
restart: unless-stopped
environment:
- CLOUDRON_URL=${CLOUDRON_URL}
- CLOUDRON_TOKEN=${CLOUDRON_TOKEN}
profiles:
- ops
# ==========================================
# Development Tools (2 servers)
# ==========================================
# Bash Language Server - LSP for bash
bash-language-server:
build:
context: ./vendor/bash-language-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-bash-language-server
restart: unless-stopped
ports:
- "8082:8080"
command: ["npm", "start"]
profiles:
- dev
# Context7 MCP - Documentation framework
context7-mcp:
build:
context: ./vendor/context7
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-context7-mcp
restart: unless-stopped
environment:
- UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL}
- UPSTASH_REDIS_REST_TOKEN=${UPSTASH_REDIS_REST_TOKEN}
command: ["node", "packages/mcp/dist/index.js", "--transport", "stdio"]
profiles:
- dev
# ==========================================
# Content Management (4 servers)
# ==========================================
# Nextcloud MCP - 90+ tools across 8 apps
nextcloud-mcp:
build:
context: ./vendor/nextcloud-mcp-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-nextcloud-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- NEXTCLOUD_HOST=${NEXTCLOUD_HOST}
- NEXTCLOUD_USERNAME=${NEXTCLOUD_USERNAME}
- NEXTCLOUD_APP_PASSWORD=${NEXTCLOUD_APP_PASSWORD}
ports:
- "8083:8080"
profiles:
- ops
# Ghost MCP - CMS management
ghost-mcp:
build:
context: ./vendor/ghost-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-ghost-mcp
restart: unless-stopped
environment:
- GHOST_API_URL=${GHOST_API_URL}
- GHOST_ADMIN_API_KEY=${GHOST_ADMIN_API_KEY}
command: ["npx", "-y", "@fanyangmeng/ghost-mcp"]
profiles:
- ops
# ONLYOFFICE DocSpace MCP - Room and file management
docspace-mcp:
build:
context: ./vendor/docspace-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-docspace-mcp
restart: unless-stopped
environment:
- DOCSPACE_HOST=${DOCSPACE_HOST}
- DOCSPACE_TOKEN=${DOCSPACE_TOKEN}
profiles:
- ops
# WordPress MCP Adapter
wordpress-mcp:
build:
context: ./vendor/mcp-adapter
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-wordpress-mcp
restart: unless-stopped
environment:
- WORDPRESS_URL=${WORDPRESS_URL}
- WORDPRESS_USERNAME=${WORDPRESS_USERNAME}
- WORDPRESS_APPLICATION_PASSWORD=${WORDPRESS_APPLICATION_PASSWORD}
command: ["npx", "-y", "@wordpress/mcp-adapter"]
profiles:
- ops
# ==========================================
# Communication & Collaboration (3 servers)
# ==========================================
# Discourse MCP - Forum integration
discourse-mcp:
build:
context: ./vendor/discourse-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-discourse-mcp
restart: unless-stopped
environment:
- DISCOURSE_URL=${DISCOURSE_URL}
- DISCOURSE_API_KEY=${DISCOURSE_API_KEY}
- DISCOURSE_API_USERNAME=${DISCOURSE_API_USERNAME}
command: ["npx", "-y", "@discourse/mcp"]
profiles:
- ops
# IMAP MCP - Email processing
imap-mcp:
build:
context: ./vendor/imap-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-imap-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- IMAP_SERVER=${IMAP_SERVER}
- IMAP_PORT=${IMAP_PORT:-993}
- IMAP_USERNAME=${IMAP_USERNAME}
- IMAP_PASSWORD=${IMAP_PASSWORD}
command: ["uvx", "imap-mcp"]
profiles:
- ops
# Postiz MCP - Social media management
postizz-mcp:
build:
context: ./vendor/postizz-MCP
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-postizz-mcp
restart: unless-stopped
environment:
- POSTIZ_API_KEY=${POSTIZ_API_KEY}
- POSTIZ_URL=${POSTIZ_URL}
profiles:
- ops
# ==========================================
# Analytics & Security (2 servers)
# ==========================================
# Matomo MCP Client
matomo-mcp:
build:
context: ./vendor/matomo-mcp-client
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-matomo-mcp
restart: unless-stopped
environment:
- MATOMO_URL=${MATOMO_URL}
- MATOMO_TOKEN=${MATOMO_TOKEN}
profiles:
- ops
# Bitwarden MCP - Password vault
bitwarden-mcp:
build:
context: ./vendor/mcp-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-bitwarden-mcp
restart: unless-stopped
environment:
- BITWARDEN_CLIENT_ID=${BITWARDEN_CLIENT_ID}
- BITWARDEN_CLIENT_SECRET=${BITWARDEN_CLIENT_SECRET}
- BITWARDEN_PASSWORD=${BITWARDEN_PASSWORD}
- BITWARDEN_SERVER_URL=${BITWARDEN_SERVER_URL:-https://vault.bitwarden.com}
command: ["npx", "-y", "@bitwarden/mcp-server"]
profiles:
- ops
# ==========================================
# Productivity & Automation (6 servers)
# ==========================================
# GIMP MCP - Image editing
gimp-mcp:
build:
context: ./vendor/gimp-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-gimp-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
command: ["uvx", "gimp-mcp"]
profiles:
- dev
# Snipe-IT MCP - Asset inventory
snipeit-mcp:
build:
context: ./vendor/snipeit-mcp
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-snipeit-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- SNIPEIT_URL=${SNIPEIT_URL}
- SNIPEIT_TOKEN=${SNIPEIT_TOKEN}
command: ["uvx", "snipeit-mcp"]
profiles:
- ops
# Redmine MCP - Project management
mcp-redmine:
build:
context: ./vendor/mcp-redmine
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-mcp-redmine
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- REDMINE_URL=${REDMINE_URL}
- REDMINE_API_KEY=${REDMINE_API_KEY}
command: ["uvx", "mcp-redmine"]
profiles:
- ops
# Ansible MCP - IT automation
mcp-ansible:
build:
context: ./vendor/mcp-ansible
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-mcp-ansible
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
volumes:
- ./ansible-playbooks:/playbooks:ro
- /var/run/docker.sock:/var/run/docker.sock
command: ["uvx", "mcp-ansible"]
profiles:
- ops
# Elasticsearch MCP
elasticsearch-mcp:
build:
context: ./vendor/mcp-server-elasticsearch
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-elasticsearch-mcp
restart: unless-stopped
environment:
- ELASTICSEARCH_URL=${ELASTICSEARCH_URL:-http://localhost:9200}
- ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
- ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
ports:
- "8084:8080"
profiles:
- ops
# Audiobook MCP Server
audiobook-mcp:
build:
context: ./vendor/audiobook-mcp-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-audiobook-mcp
restart: unless-stopped
environment:
- AUDIOBOOK_LIBRARY_PATH=${AUDIOBOOK_LIBRARY_PATH:-/audiobooks}
volumes:
- ${AUDIOBOOK_LIBRARY_PATH:-/audiobooks}:/audiobooks
command: ["npx", "-y", "audiobook-mcp-server"]
profiles:
- dev
# ==========================================
# Additional Tools (3 servers)
# ==========================================
# Draw.io MCP Server
drawio-mcp:
build:
context: ./vendor/drawio-mcp-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-drawio-mcp
restart: unless-stopped
environment:
- DRAWIO_URL=${DRAWIO_URL:-https://app.diagrams.net}
command: ["npx", "-y", "drawio-mcp-server"]
profiles:
- dev
# Docker Language Server
docker-language-server:
build:
context: ./vendor/docker-language-server
dockerfile: Dockerfile
container_name: KNELDevStack-AIMW-docker-language-server
restart: unless-stopped
ports:
- "8085:8080"
profiles:
- dev