Add Custom MCP Gateway example + servers (brave, wikipedia, postgres) and CI#133
Add Custom MCP Gateway example + servers (brave, wikipedia, postgres) and CI#133Fadil369 wants to merge 8 commits intodocker:mainfrom
Conversation
…ing; Taskfile targets
… and troubleshooting
There was a problem hiding this comment.
Pull request overview
This PR adds a comprehensive Custom MCP Gateway example demonstrating how to configure and run a Docker MCP Gateway with multiple MCP servers, along with CI infrastructure for code quality checks.
- Introduces a new
custom-mcp/example with Docker Compose configuration for MCP Gateway - Implements secrets management via
.mcp.envandpostgres_urlfiles with example templates - Adds CI workflow for Markdown and YAML linting across the repository
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| custom-mcp/mcp.env.example | Template file showing required environment variables and secrets for MCP servers |
| custom-mcp/compose.yaml | Docker Compose configuration for MCP Gateway with multiple servers (duckduckgo, github-official, brave, wikipedia-mcp, postgres) |
| custom-mcp/Taskfile.yaml | Task definitions for managing the stack (up, down, build, clean) |
| custom-mcp/README.md | Documentation explaining setup, usage, and configuration of the custom MCP Gateway |
| README.md | Updates main repository table to include the new custom MCP Gateway example |
| .gitignore | Adds patterns to exclude secret files (.mcp.env, postgres_url) from version control |
| .github/workflows/ci.yml | New CI workflow for automated Markdown and YAML linting |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| 2. cp mcp.env.example .mcp.env | ||
| 3. Fill in required secrets (e.g., GITHUB_TOKEN for `github-official`). | ||
|
|
||
| Run |
There was a problem hiding this comment.
This section header should use a level 2 markdown heading (##) for proper document structure.
| Run | |
| ## Run |
| postgres://user:password@host:5432/dbname | ||
| - This is mounted as a secret named `database-url` and used by the gateway. | ||
|
|
||
| Notes |
There was a problem hiding this comment.
This section header should use a level 2 markdown heading (##) for proper document structure.
| Notes | |
| ## Notes |
| # secrets can be provided multiple times and referenced per server | ||
| - --secrets=docker-desktop:/run/secrets/mcp_secret | ||
| # For Postgres DSN | ||
| - --secrets=/run/secrets/database-url |
There was a problem hiding this comment.
The secrets path format is inconsistent. Line 19 uses 'docker-desktop:/run/secrets/mcp_secret' with a prefix notation, while line 21 uses '/run/secrets/database-url' without a prefix. Consider using a consistent format for both secrets to improve maintainability and clarity.
| - --secrets=/run/secrets/database-url | |
| - --secrets=docker-desktop:/run/secrets/database-url |
| secrets: | ||
| mcp_secret: | ||
| file: ./.mcp.env | ||
| database-url: |
There was a problem hiding this comment.
The database-url secret references './postgres_url' file which doesn't exist in the repository and isn't created by default. This will cause the compose stack to fail to start unless the user manually creates this file. Consider either making this secret optional, documenting the requirement more prominently in the compose file, or providing an example postgres_url.example file similar to the mcp.env.example pattern.
| database-url: | |
| database-url: | |
| # IMPORTANT: You must create the './postgres_url' file containing your Postgres DSN. | |
| # See 'postgres_url.example' for a template/example. |
| | [ADK](https://github.com/google/adk-python) Sock Store Agent | Multi-Agent | qwen3 | MongoDb, Brave, Curl, | [./adk-sock-shop](./adk-sock-shop/) | [compose.yaml](./adk-sock-shop/compose.yaml) | | ||
| | [Langchaingo](https://github.com/tmc/langchaingo) DuckDuckGo Search | Single Agent | gemma3 | duckduckgo | [./langchaingo](./langchaingo) | [compose.yaml](./langchaingo/compose.yaml) | | ||
| | [MinionS](https://github.com/HazyResearch/minions) Cost-Efficient Local-Remote Collaboration | Local-Remote Protocol | qwen3(local), gpt-4o(remote) | | [./minions](./minions) | [docker-compose.minions.yml](https://github.com/HazyResearch/minions/blob/main/apps/minions-docker/docker-compose.minions.yml) | | ||
| | Custom MCP Gateway (this repo) | Gateway + Tools | none | duckduckgo, github-official (extensible) | [./custom-mcp](./custom-mcp) | [compose.yaml](./custom-mcp/compose.yaml) | |
There was a problem hiding this comment.
The MCPs column lists "duckduckgo, github-official (extensible)" but the actual compose.yaml includes additional servers: brave, wikipedia-mcp, and postgres. Consider updating this to be more accurate, such as "duckduckgo, github-official, brave, wikipedia-mcp, postgres (extensible)" or "duckduckgo, github-official, brave, and more (extensible)".
| | Custom MCP Gateway (this repo) | Gateway + Tools | none | duckduckgo, github-official (extensible) | [./custom-mcp](./custom-mcp) | [compose.yaml](./custom-mcp/compose.yaml) | | |
| | Custom MCP Gateway (this repo) | Gateway + Tools | none | duckduckgo, github-official, brave, wikipedia-mcp, postgres (extensible) | [./custom-mcp](./custom-mcp) | [compose.yaml](./custom-mcp/compose.yaml) | |
| # Postgres server and SQL tool (requires database-url secret file) | ||
| - --servers=postgres | ||
| - --tools=query |
There was a problem hiding this comment.
The postgres server is enabled by default but requires the database-url secret file to exist. Since this file doesn't exist by default and may not be needed by all users, consider adding a comment here noting that users can remove or comment out the postgres server and related secret references (lines 29-30, 33, 46-47) if they don't need postgres functionality.
|
|
||
| This example wires a Docker MCP Gateway with a flexible set of MCP servers and secrets loaded from a `.mcp.env` file. | ||
|
|
||
| Prerequisites |
There was a problem hiding this comment.
The section headers in this README file should use proper markdown heading levels. "Prerequisites", "Setup", "Run", "Modify servers", "Included servers & secrets", and "Notes" should be marked as level 2 headings (##) for better document structure and accessibility.
| - The gateway will listen on port 8811. A health endpoint is available at: | ||
| http://localhost:8811/health | ||
|
|
||
| Modify servers |
There was a problem hiding this comment.
This section header should use a level 2 markdown heading (##) for proper document structure.
| Modify servers | |
| ## Modify servers |
| - Edit compose.yaml and add or remove `--servers=...` entries on the mcp-gateway service. | ||
| - If a server needs credentials, add them to `.mcp.env` and reference via `--secrets=...` if required. | ||
|
|
||
| Included servers & secrets |
There was a problem hiding this comment.
This section header should use a level 2 markdown heading (##) for proper document structure.
| Included servers & secrets | |
| ## Included servers & secrets |
| - Docker Desktop 4.43+ or Docker Engine with Compose v2.38.1+ | ||
| - Optional: Docker Model Runner if you plan to use local models | ||
|
|
||
| Setup |
There was a problem hiding this comment.
This section header should use a level 2 markdown heading (##) for proper document structure.
…d config; wire into compose
…workflow; proxy to MCP gateway
This PR adds a new Custom MCP Gateway example and CI workflow.
Highlights:
Notes: