Skip to content

Commit 0587f24

Browse files
authored
Tagged version 0.5.0 (#669)
* Tagged version 0.5.0 Signed-off-by: Mihai Criveti <[email protected]> * CHANGELOG.md 0.5.0 Signed-off-by: Mihai Criveti <[email protected]> --------- Signed-off-by: Mihai Criveti <[email protected]>
1 parent 5fa47b5 commit 0587f24

30 files changed

+233
-60
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 0.4.0
2+
current_version = 0.5.0
33
commit = False
44
tag = False
55
sign-tags = True

.github/tools/cleanup-ghcr-versions.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ fi
9292
##############################################################################
9393
ORG="ibm"
9494
PKG="mcp-context-forge"
95-
KEEP_TAGS=( "0.1.0" "v0.1.0" "0.1.1" "v0.1.1" "0.2.0" "v0.2.0" "0.3.0" "v0.3.0" "0.4.0" "v0.4.0" "latest" )
95+
KEEP_TAGS=( "0.1.0" "v0.1.0" "0.1.1" "v0.1.1" "0.2.0" "v0.2.0" "0.3.0" "v0.3.0" "0.4.0" "v0.4.0" "0.5.0" "v0.5.0" "latest" )
9696
PER_PAGE=100
9797

9898
DRY_RUN=${DRY_RUN:-true} # default safe

.github/workflows/docker-release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
#
55
# This workflow re-tags a Docker image (built by a previous workflow)
66
# when a GitHub Release is published, giving it a semantic version tag
7-
# like `v0.4.0`. It assumes the CI build has already pushed an image
7+
# like `v0.5.0`. It assumes the CI build has already pushed an image
88
# tagged with the commit SHA, and that all checks on that commit passed.
99
#
1010
# ➤ Trigger: Release published (e.g. from GitHub UI or `gh release` CLI)
1111
# ➤ Assumes: Existing image tagged with the commit SHA is available
12-
# ➤ Result: Image re-tagged as `ghcr.io/OWNER/REPO:v0.4.0`
12+
# ➤ Result: Image re-tagged as `ghcr.io/OWNER/REPO:v0.5.0`
1313
#
1414
# ======================================================================
1515

@@ -25,7 +25,7 @@ on:
2525
workflow_dispatch:
2626
inputs:
2727
tag:
28-
description: 'Release tag (e.g., v0.4.0)'
28+
description: 'Release tag (e.g., v0.5.0)'
2929
required: true
3030
type: string
3131

.github/workflows/release-chart.yml.inactive

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: Release Helm Chart
33
on:
44
release:
5-
types: [published] # tag repo, ex: v0.4.0 to trigger
5+
types: [published] # tag repo, ex: v0.5.0 to trigger
66
permissions:
77
contents: read
88
packages: write

CHANGELOG.md

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,179 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
66

77
---
88

9+
## [0.5.0] - 2025-08-06 - Enterprise Operability, Auth, Configuration & Observability
10+
11+
### Overview
12+
13+
This release focuses on enterprise-grade operability with **42 issues resolved**, bringing major improvements to authentication, configuration management, error handling, and developer experience. Key achievements include:
14+
15+
- **Enhanced JWT token security** with mandatory expiration when configured
16+
- **Improved UI/UX** with better error messages, validation, and test tool enhancements
17+
- **Stronger input validation** across all endpoints with XSS prevention
18+
- **Developer productivity** improvements including file-specific linting and enhanced Makefile
19+
- **Better observability** with masked sensitive data and improved status reporting
20+
21+
### Added
22+
23+
#### **Security & Authentication**
24+
* **JWT Token Expiration Enforcement** (#425) - Made JWT token expiration mandatory when `REQUIRE_TOKEN_EXPIRATION=true`
25+
* **Masked Authentication Values** (#601, #602) - Auth credentials now properly masked in API responses for gateways
26+
* **API Docs Basic Auth Support** (#663) - Added basic authentication support for API documentation endpoints with `DOCS_BASIC_AUTH_ENABLED` flag
27+
* **Enhanced XSS Prevention** (#576) - Added validation for RPC methods to prevent XSS attacks
28+
* **SPDX License Headers** (#315, #317, #656) - Added script to verify and fix file headers with SPDX compliance
29+
30+
#### **Developer Experience**
31+
* **File-Specific Linting** (#410, #660) - Added `make lint filename|dirname` target for targeted linting
32+
* **MCP Server Name Column** (#506, #624) - New "MCP Server Name" column in Global tools/resources for better visibility
33+
* **Export Connection Strings** (#154) - Enhanced connection string export for various clients from UI and API
34+
* **Time Server Integration** (#403, #637) - Added time server to docker-compose.yaml for testing
35+
* **Enhanced Makefile** (#365, #397, #507, #597, #608, #611, #612) - Major Makefile improvements:
36+
- Fixed database migration commands
37+
- Added comprehensive file-specific linting support
38+
- Improved formatting and readability
39+
- Consolidated run-gunicorn scripts
40+
- Added `.PHONY` declarations where missing
41+
- Fixed multiple server startup prevention (#430)
42+
43+
#### **UI/UX Improvements**
44+
* **Test Tool Enhancements**:
45+
- Display default values from input_schema (#623, #644)
46+
- Fixed boolean inputs passing as on/off instead of true/false (#622)
47+
- Fixed array inputs being passed as strings (#620, #641)
48+
- Support for multiline text input (#650)
49+
- Improved parameter type conversion logic (#628)
50+
* **Checkbox Selection** (#392, #619) - Added checkbox selection for servers, tools, and resources in UI
51+
* **Improved Error Messages** (#357, #363, #569, #607, #629, #633, #648) - Comprehensive error message improvements:
52+
- More user-friendly error messages throughout
53+
- Better validation feedback for gateways, tools, prompts
54+
- Fixed "Unexpected error when registering gateway with same name" (#603)
55+
- Enhanced error handling for add/edit operations
56+
57+
#### **Code Quality & Testing**
58+
* **Security Scanners**:
59+
- Added Snyk security scanning (#638, #639)
60+
- Integrated DevSkim static analysis tool (#590, #592)
61+
- Added nodejsscan for JavaScript security (#499)
62+
* **Web Linting** (#390, #614) - Added lint-web to CI/CD with additional linters (jshint, jscpd, markuplint)
63+
* **Package Linters** (#615, #616) - Added pypi package linters: check-manifest and pyroma
64+
65+
### Fixed
66+
67+
#### **Critical Bugs**
68+
* **Gateway Issues**:
69+
- Fixed gateway ID returned as null by Create API (#521)
70+
- Fixed duplicate gateway registration bypassing uniqueness check (#603, #649)
71+
- Gateway update no longer fails silently in UI (#630)
72+
- Fixed validation for invalid gateway URLs (#578)
73+
- Improved STREAMABLEHTTP transport validation (#662)
74+
- Fixed unexpected error when registering gateway with same name (#603)
75+
* **Tool & Resource Handling**:
76+
- Fixed edit tool update failures with integration_type="REST" (#579)
77+
- Fixed inconsistent acceptable length of tool names (#631, #651)
78+
- Fixed long input names being reflected in error messages (#598)
79+
- Fixed edit tool sending invalid "STREAMABLE" value (#610)
80+
- Fixed GitHub MCP Server registration flow (#584)
81+
* **Authentication & Security**:
82+
- Fixed auth_username and auth_password not being set correctly (#472)
83+
- Fixed _populate_auth functionality (#471)
84+
- Properly masked auth values in gateway APIs (#601)
85+
86+
#### **UI/UX Fixes**
87+
* **Edit Functionality**:
88+
- Fixed edit prompt failing when template field is empty (#591)
89+
- Fixed edit screens for servers and resources (#633, #648)
90+
- Improved consistency in displaying error messages (#357)
91+
* **Version Panel & Status**:
92+
- Clarified difference between "Reachable" and "Available" status (#373, #621)
93+
- Fixed service status display in version panel
94+
* **Input Validation**:
95+
- Fixed array input parsing in test tool UI (#620, #641)
96+
- Fixed boolean input handling (#622)
97+
- Added support for multiline text input (#650)
98+
99+
#### **Infrastructure & Build**
100+
* **Docker & Deployment**:
101+
- Fixed database migration commands in Makefile (#365)
102+
- Resolved Docker container issues (#560)
103+
- Fixed internal server errors during CRUD operations (#85)
104+
* **Documentation & API**:
105+
- Fixed OpenAPI title from "MCP_Gateway" to "MCP Gateway" (#522)
106+
- Added mcp-cli documentation (#46)
107+
- Fixed invalid HTTP request logs (#434)
108+
* **Code Quality**:
109+
- Fixed redundant conditional expressions (#423, #653)
110+
- Fixed lint-web issues in admin.js (#613)
111+
- Updated default .env examples to enable UI (#498)
112+
113+
### Changed
114+
115+
#### **Configuration & Defaults**
116+
* **UI Enabled by Default** - Updated .env.example to set `MCPGATEWAY_UI_ENABLED=true` and `MCPGATEWAY_ADMIN_API_ENABLED=true`
117+
* **Enhanced Validation** - Stricter validation rules for gateway URLs, tool names, and input parameters
118+
* **Improved Error Handling** - More descriptive and actionable error messages across all operations
119+
120+
#### **Performance & Reliability**
121+
* **Connection Handling** - Better retry mechanisms and timeout configurations
122+
* **Session Management** - Improved stateful session handling for Streamable HTTP
123+
* **Resource Management** - Enhanced cleanup and resource disposal
124+
125+
#### **Developer Workflow**
126+
* **Simplified Scripts** - Consolidated run-gunicorn scripts into single improved version
127+
* **Better Testing** - Enhanced test coverage with additional security and validation tests
128+
* **Improved Tooling** - Comprehensive linting and security scanning integration
129+
130+
### Security
131+
132+
* Mandatory JWT token expiration when configured
133+
* Masked sensitive authentication data in API responses
134+
* Enhanced XSS prevention in RPC methods
135+
* Comprehensive security scanning with Snyk, DevSkim, and nodejsscan
136+
* SPDX-compliant file headers for license compliance
137+
138+
### Infrastructure
139+
140+
* Improved Makefile with better target organization and documentation
141+
* Enhanced Docker compose with integrated time server
142+
* Better CI/CD with comprehensive linting and security checks
143+
* Simplified deployment with consolidated scripts
144+
145+
---
146+
147+
### 🌟 Release Contributors
148+
149+
This release represents a major step forward in enterprise readiness with contributions from developers worldwide focusing on security, usability, and operational excellence.
150+
151+
#### 🏆 Top Contributors in 0.5.0
152+
- **Mihai Criveti** (@crivetimihai) - Release coordinator, infrastructure improvements, security enhancements
153+
- **Madhav Kandukuri** (@madhav165) - XSS prevention, validation improvements, security fixes
154+
- **Keval Mahajan** (@kevalmahajan) - UI enhancements, test tool improvements, checkbox implementation
155+
- **Manav Gupta** - File-specific linting support and Makefile improvements
156+
- **Rakhi Dutta** (@rakdutta) - Comprehensive error message improvements across add/edit operations
157+
- **Shoumi Mukherjee** (@shoummu1) - Array input parsing, tool creation fixes, UI improvements
158+
159+
#### 🎉 New Contributors
160+
Welcome to our first-time contributors who joined us in 0.5.0:
161+
162+
- **JimmyLiao** (@jimmyliao) - Fixed STREAMABLEHTTP transport validation
163+
- **Arnav Bhattacharya** (@arnav264) - Added file header verification script
164+
- **Guoqiang Ding** (@dgq8211) - Fixed tool parameter type conversion and API docs auth
165+
- **Pascal Roessner** (@roessner) - Added MCP Gateway Name to tools overview
166+
- **Kumar Tiger** (@kumar-tiger) - Fixed duplicate gateway name registration
167+
- **Shamsul Arefin** (@shams) - Improved JavaScript validation patterns and UUID support
168+
- **Emmanuel Ferdman** (@emmanuelferdman) - Fixed prompt service test cases
169+
- **Tomas Pilar** (@thomas7pilar) - Fixed missing ID in gateway response and auth flag issues
170+
171+
#### 💪 Returning Contributors
172+
Thank you to our dedicated contributors who continue to strengthen MCP Gateway:
173+
174+
- **Nayana R Gowda** - Fixed redundant conditional expressions and Makefile formatting
175+
- **Mohan Lakshmaiah** - Improved tool name consistency validation
176+
- **Abdul Samad** - Continued UI polish and improvements
177+
- **Satya** (@TS0713) - Gateway URL validation improvements
178+
- **ChrisPC-39** - Updated default .env to enable UI and added tool search functionality
179+
180+
---
181+
9182
## [0.4.0] - 2025-07-22 - Security, Bugfixes, Resilience & Code Quality
10183

11184
### Security Notice

Containerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM registry.access.redhat.com/ubi9-minimal:9.6-1754000177
22
LABEL maintainer="Mihai Criveti" \
33
name="mcp/mcpgateway" \
4-
version="0.4.0" \
4+
version="0.5.0" \
55
description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway"
66

77
ARG PYTHON_VERSION=3.11

Containerfile.lite

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ LABEL maintainer="Mihai Criveti" \
216216
org.opencontainers.image.title="mcp/mcpgateway" \
217217
org.opencontainers.image.description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway" \
218218
org.opencontainers.image.licenses="Apache-2.0" \
219-
org.opencontainers.image.version="0.4.0"
219+
org.opencontainers.image.version="0.5.0"
220220

221221
# ----------------------------------------------------------------------------
222222
# Copy the entire prepared root filesystem from the builder stage

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,7 +2589,7 @@ MINIKUBE_ADDONS ?= ingress ingress-dns metrics-server dashboard registry regist
25892589
# OCI image tag to preload into the cluster.
25902590
# - By default we point to the *local* image built via `make docker-prod`, e.g.
25912591
# mcpgateway/mcpgateway:latest. Override with IMAGE=<repo:tag> to use a
2592-
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.4.0).
2592+
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.5.0).
25932593
TAG ?= latest # override with TAG=<ver>
25942594
IMAGE ?= $(IMG):$(TAG) # or IMAGE=ghcr.io/ibm/mcp-context-forge:$(TAG)
25952595

@@ -3224,7 +3224,7 @@ devpi-unconfigure-pip:
32243224

32253225
# ─────────────────────────────────────────────────────────────────────────────
32263226
# 📦 Version helper (defaults to the version in pyproject.toml)
3227-
# override on the CLI: make VER=0.4.0 devpi-delete
3227+
# override on the CLI: make VER=0.5.0 devpi-delete
32283228
# ─────────────────────────────────────────────────────────────────────────────
32293229
VER ?= $(shell python3 -c "import tomllib, pathlib; \
32303230
print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])" \

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ ContextForge MCP Gateway is a feature-rich gateway, proxy and MCP Registry that
120120

121121
**ContextForge MCP Gateway** is a gateway, registry, and proxy that sits in front of any [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server or REST API-exposing a unified endpoint for all your AI clients.
122122

123-
**⚠️ Caution**: The current release (0.4.0) is considered alpha / early beta. It is not production-ready and should only be used for local development, testing, or experimentation. Features, APIs, and behaviors are subject to change without notice. **Do not** deploy in production environments without thorough security review, validation and additional security mechanisms. Many of the features required for secure, large-scale, or multi-tenant production deployments are still on the [project roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/) - which is itself evolving.
123+
**⚠️ Caution**: The current release (0.5.0) is considered alpha / early beta. It is not production-ready and should only be used for local development, testing, or experimentation. Features, APIs, and behaviors are subject to change without notice. **Do not** deploy in production environments without thorough security review, validation and additional security mechanisms. Many of the features required for secure, large-scale, or multi-tenant production deployments are still on the [project roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/) - which is itself evolving.
124124

125125
It currently supports:
126126

@@ -386,13 +386,13 @@ docker run -d --name mcpgateway \
386386
-e BASIC_AUTH_PASSWORD=changeme \
387387
-e AUTH_REQUIRED=true \
388388
-e DATABASE_URL=sqlite:///./mcp.db \
389-
ghcr.io/ibm/mcp-context-forge:0.4.0
389+
ghcr.io/ibm/mcp-context-forge:0.5.0
390390

391391
# Tail logs (Ctrl+C to quit)
392392
docker logs -f mcpgateway
393393

394394
# Generating an API key
395-
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.4.0 \
395+
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.5.0 \
396396
python3 -m mcpgateway.utils.create_jwt_token --username admin --exp 0 --secret my-test-key
397397
```
398398

@@ -420,7 +420,7 @@ docker run -d --name mcpgateway \
420420
-e JWT_SECRET_KEY=my-test-key \
421421
-e BASIC_AUTH_USER=admin \
422422
-e BASIC_AUTH_PASSWORD=changeme \
423-
ghcr.io/ibm/mcp-context-forge:0.4.0
423+
ghcr.io/ibm/mcp-context-forge:0.5.0
424424
```
425425

426426
SQLite now lives on the host at `./data/mcp.db`.
@@ -444,7 +444,7 @@ docker run -d --name mcpgateway \
444444
-e PORT=4444 \
445445
-e DATABASE_URL=sqlite:////data/mcp.db \
446446
-v $(pwd)/data:/data \
447-
ghcr.io/ibm/mcp-context-forge:0.4.0
447+
ghcr.io/ibm/mcp-context-forge:0.5.0
448448
```
449449

450450
Using `--network=host` allows Docker to access the local network, allowing you to add MCP servers running on your host. See [Docker Host network driver documentation](https://docs.docker.com/engine/network/drivers/host/) for more details.
@@ -460,7 +460,7 @@ podman run -d --name mcpgateway \
460460
-p 4444:4444 \
461461
-e HOST=0.0.0.0 \
462462
-e DATABASE_URL=sqlite:///./mcp.db \
463-
ghcr.io/ibm/mcp-context-forge:0.4.0
463+
ghcr.io/ibm/mcp-context-forge:0.5.0
464464
```
465465

466466
#### 2 - Persist SQLite
@@ -479,7 +479,7 @@ podman run -d --name mcpgateway \
479479
-p 4444:4444 \
480480
-v $(pwd)/data:/data \
481481
-e DATABASE_URL=sqlite:////data/mcp.db \
482-
ghcr.io/ibm/mcp-context-forge:0.4.0
482+
ghcr.io/ibm/mcp-context-forge:0.5.0
483483
```
484484

485485
#### 3 - Host networking (rootless)
@@ -497,7 +497,7 @@ podman run -d --name mcpgateway \
497497
--network=host \
498498
-v $(pwd)/data:/data \
499499
-e DATABASE_URL=sqlite:////data/mcp.db \
500-
ghcr.io/ibm/mcp-context-forge:0.4.0
500+
ghcr.io/ibm/mcp-context-forge:0.5.0
501501
```
502502

503503
---
@@ -506,7 +506,7 @@ podman run -d --name mcpgateway \
506506
<summary><strong>✏️ Docker/Podman tips</strong></summary>
507507

508508
* **.env files** - Put all the `-e FOO=` lines into a file and replace them with `--env-file .env`. See the provided [.env.example](.env.example) for reference.
509-
* **Pinned tags** - Use an explicit version (e.g. `v0.4.0`) instead of `latest` for reproducible builds.
509+
* **Pinned tags** - Use an explicit version (e.g. `v0.5.0`) instead of `latest` for reproducible builds.
510510
* **JWT tokens** - Generate one in the running container:
511511

512512
```bash
@@ -552,7 +552,7 @@ docker run --rm -i \
552552
-e MCP_SERVER_CATALOG_URLS=http://host.docker.internal:4444/servers/UUID_OF_SERVER_1 \
553553
-e MCP_TOOL_CALL_TIMEOUT=120 \
554554
-e MCP_WRAPPER_LOG_LEVEL=DEBUG \
555-
ghcr.io/ibm/mcp-context-forge:0.4.0 \
555+
ghcr.io/ibm/mcp-context-forge:0.5.0 \
556556
python3 -m mcpgateway.wrapper
557557
```
558558

@@ -600,7 +600,7 @@ python3 -m mcpgateway.wrapper
600600
<summary><strong>Expected responses from mcpgateway.wrapper</strong></summary>
601601

602602
```json
603-
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"mcpgateway-wrapper","version":"0.4.0"}}}
603+
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"mcpgateway-wrapper","version":"0.5.0"}}}
604604

605605
# When there's no tools
606606
{"jsonrpc":"2.0","id":2,"result":{"tools":[]}}
@@ -632,7 +632,7 @@ docker run -i --rm \
632632
-e MCP_SERVER_CATALOG_URLS=http://localhost:4444/servers/UUID_OF_SERVER_1 \
633633
-e MCP_AUTH_TOKEN=${MCPGATEWAY_BEARER_TOKEN} \
634634
-e MCP_TOOL_CALL_TIMEOUT=120 \
635-
ghcr.io/ibm/mcp-context-forge:0.4.0 \
635+
ghcr.io/ibm/mcp-context-forge:0.5.0 \
636636
python3 -m mcpgateway.wrapper
637637
```
638638

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## ⚠️ Early Beta Software Notice
88

9-
**Current Version: 0.4.0 (Beta)**
9+
**Current Version: 0.5.0 (Beta)**
1010

1111
MCP Gateway is currently in early beta and should be treated as such until the 1.0 release. While we implement comprehensive security measures and follow best practices, important limitations exist:
1212

0 commit comments

Comments
 (0)