Skip to content

Commit a3b5ccc

Browse files
authored
Release 0 9 0 (#1403)
* Update dependencies Signed-off-by: Mihai Criveti <[email protected]> * Bump version to 0.9.0 Signed-off-by: Mihai Criveti <[email protected]> * Bump version to 0.9.0 Signed-off-by: Mihai Criveti <[email protected]> --------- Signed-off-by: Mihai Criveti <[email protected]>
1 parent 4dc3014 commit a3b5ccc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+588
-577
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.8.0
2+
current_version = 0.9.0
33
commit = False
44
tag = False
55
sign-tags = True

.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.8.0`. It assumes the CI build has already pushed an image
7+
# like `v0.9.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.8.0`
12+
# ➤ Result: Image re-tagged as `ghcr.io/OWNER/REPO:v0.9.0`
1313
#
1414
# ======================================================================
1515

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

CHANGELOG.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
---
66

7-
## [0.9.0] - 2025-11-05 - REST Passthrough, Ed25519 Certificate Signing, Multi-Tenancy Fixes & Platform Enhancements
7+
## [0.9.0] - 2025-11-09 - REST Passthrough, Ed25519 Certificate Signing, Multi-Tenancy Fixes & Platform Enhancements
88

99
### Overview
1010

@@ -431,9 +431,12 @@ docker compose up -d
431431

432432
**Multi-Tenancy & RBAC:**
433433
- Closes #969 - Backend Multi-Tenancy Issues - Critical bugs and missing features
434+
- Closes #967 - UI Gaps in Multi-Tenancy Support - Visibility fields missing for most resource types
434435
- Closes #959 - Unable to Re-add Team Member Due to Unique Constraint
435436
- Closes #958 - Incomplete Visibility Implementation
437+
- Closes #946 - Alembic migrations fails in docker compose setup
436438
- Closes #945 - Scoped uniqueness for prompts, resources, and A2A agents
439+
- Closes #926 - Bootstrap fails to assign platform_admin role due to foreign key constraint violation
437440
- Closes #1180 - Prompt editing to include team_id in form data
438441
- Closes #1184 - Prompt and resource endpoints to use unique IDs instead of name/URI
439442
- Closes #1222 - Already addressed as part of #945
@@ -444,6 +447,9 @@ docker compose up -d
444447
- Closes #1254 - JWT jti mismatch between token and database record
445448
- Closes #1262 - JWT token follows default variable payload expiry instead of UI
446449
- Closes #1261 - API Token Expiry Issue: UI Configuration overridden by default env Variable
450+
- Closes #1111 - Support application/x-www-form-urlencoded Requests in MCP Gateway UI for OAuth2 / Keycloak Integration
451+
- Closes #1094 - Creating an MCP OAUTH2 server fails if using API
452+
- Closes #1092 - After issue 1078 change, how to add X-Upstream-Authorization header when clicking Authorize in admin UI
447453
- Closes #1048 - Login issue - Serving over HTTP requires SECURE_COOKIES=false
448454
- Closes #1101 - Login issue with v0.7.0
449455
- Closes #1117 - Login not working with 0.7.0 version
@@ -460,6 +466,7 @@ docker compose up -d
460466
**Developer Tools & Operations:**
461467
- Closes #1197 - Support Bundle Generation - Automated Diagnostics Collection
462468
- Closes #1200 - In built MCP client - LLM Chat service for virtual servers
469+
- Closes #1239 - LLMChat Multi-Worker: Add Documentation and Integration Tests
463470
- Closes #1202 - LLM Chat Interface with MCP Enabled Tool Orchestration
464471
- Closes #1228 - Show system statistics in metrics page
465472
- Closes #1225 - Production-Scale Load Data Generator for Multi-Tenant Testing
@@ -470,28 +477,35 @@ docker compose up -d
470477
- Closes #1271 - Consolidated linting configuration in pyproject.toml
471478

472479
**Plugin Framework:**
480+
- Closes #1249 - Rust-Powered PII Filter Plugin - 5-10x Performance Improvement
473481
- Closes #1196 - Plugin client server mTLS support
474482
- Closes #1137 - Add missing hooks to OPA plugin
475483
- Closes #1198 - Complete OPA plugin hook implementation
476484

477485
**Platform & Protocol:**
486+
- Closes #1381 - Resource view error - mime type handling for resource added via mcp server
487+
- Closes #1348 - Add support for IBM Watsonx.ai LLM provider
478488
- Closes #1258 - MCP Tool outputSchema Field is Stripped During Discovery
479489
- Closes #1188 - Allow multiple StreamableHTTP content
480490
- Closes #1138 - Support for container builds for s390x
481491

482492
**Performance Optimizations:**
483493
- Closes #1294 - orjson JSON Serialization for 5-6x faster JSON encoding/decoding
494+
- Closes #1292 - Brotli/Zstd/GZip Response Compression reducing bandwidth by 30-70%
484495

485496
**Bug Fixes:**
497+
- Closes #1336 - Add toggles to password/sensitive textboxes to mask/unmask the input value
486498
- Closes #1098 - Unable to see request payload being sent
487499
- Closes #1024 - plugin tool_prefetch hook cannot access PASSTHROUGH_HEADERS, tags
500+
- Closes #1020 - Edit Button Functionality - A2A
488501
- Closes #861 - Passthrough header parameters not persisted to database
489502
- Closes #1178 - Header overlaps with modals in UI
490503
- Closes #922 - IFraming the admin UI is not working
491504
- Closes #625 - Gateway unable to register gateway or call tools on MacOS
492505
- Closes #1230 - pyproject.toml conflicting dependencies with uv
493506
- Closes #448 - MCP server with custom base path "/api" not working
494507
- Closes #835 - Adding Custom annotation for tools
508+
- Closes #409 - Add configurable limits for data cleaning / XSS prevention in .env.example and helm
495509

496510
**Documentation:**
497511
- Closes #1159 - Several minor quirks in main README.md

Containerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ FROM rust-builder-base AS rust-builder
5151
FROM registry.access.redhat.com/ubi10-minimal:10.0-1758699349
5252
LABEL maintainer="Mihai Criveti" \
5353
name="mcp/mcpgateway" \
54-
version="0.8.0" \
54+
version="0.9.0" \
5555
description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway"
5656

5757
ARG PYTHON_VERSION=3.12

Containerfile.lite

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ LABEL maintainer="Mihai Criveti" \
294294
org.opencontainers.image.title="mcp/mcpgateway" \
295295
org.opencontainers.image.description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway" \
296296
org.opencontainers.image.licenses="Apache-2.0" \
297-
org.opencontainers.image.version="0.8.0"
297+
org.opencontainers.image.version="0.9.0"
298298

299299
# ----------------------------------------------------------------------------
300300
# Copy the entire prepared root filesystem from the builder stage

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3073,7 +3073,7 @@ MINIKUBE_ADDONS ?= ingress ingress-dns metrics-server dashboard registry regist
30733073
# OCI image tag to preload into the cluster.
30743074
# - By default we point to the *local* image built via `make docker-prod`, e.g.
30753075
# mcpgateway/mcpgateway:latest. Override with IMAGE=<repo:tag> to use a
3076-
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.8.0).
3076+
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.9.0).
30773077
TAG ?= latest # override with TAG=<ver>
30783078
IMAGE ?= $(IMG):$(TAG) # or IMAGE=ghcr.io/ibm/mcp-context-forge:$(TAG)
30793079

@@ -3708,7 +3708,7 @@ devpi-unconfigure-pip:
37083708

37093709
# ─────────────────────────────────────────────────────────────────────────────
37103710
# 📦 Version helper (defaults to the version in pyproject.toml)
3711-
# override on the CLI: make VER=0.8.0 devpi-delete
3711+
# override on the CLI: make VER=0.9.0 devpi-delete
37123712
# ─────────────────────────────────────────────────────────────────────────────
37133713
VER ?= $(shell python3 -c "import tomllib, pathlib; \
37143714
print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])" \
@@ -4905,7 +4905,7 @@ MIGRATION_TEST_DIR := tests/migration
49054905
MIGRATION_REPORTS_DIR := $(MIGRATION_TEST_DIR)/reports
49064906

49074907
# Get supported versions from version config (n-2 policy)
4908-
MIGRATION_VERSIONS := $(shell cd $(MIGRATION_TEST_DIR) && python3 -c "from version_config import get_supported_versions; print(' '.join(get_supported_versions()))" 2>/dev/null || echo "0.5.0 0.8.0 latest")
4908+
MIGRATION_VERSIONS := $(shell cd $(MIGRATION_TEST_DIR) && python3 -c "from version_config import get_supported_versions; print(' '.join(get_supported_versions()))" 2>/dev/null || echo "0.5.0 0.8.0 0.9.0 latest")
49094909

49104910
.PHONY: migration-test-all migration-test-sqlite migration-test-postgres migration-test-performance \
49114911
migration-setup migration-cleanup migration-debug migration-status

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -486,15 +486,15 @@ docker run -d --name mcpgateway \
486486
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
487487
-e DATABASE_URL=sqlite:///./mcp.db \
488488
-e SECURE_COOKIES=false \
489-
ghcr.io/ibm/mcp-context-forge:0.8.0
489+
ghcr.io/ibm/mcp-context-forge:0.9.0
490490

491491
# Note: when not running over SSL, use SECURE_COOKIES=false to prevent the browser denying access.
492492

493493
# Tail logs (Ctrl+C to quit)
494494
docker logs -f mcpgateway
495495

496496
# Generating an API key
497-
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.8.0 \
497+
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.9.0 \
498498
python3 -m mcpgateway.utils.create_jwt_token --username [email protected] --exp 0 --secret my-test-key
499499
```
500500

@@ -525,7 +525,7 @@ docker run -d --name mcpgateway \
525525
526526
-e PLATFORM_ADMIN_PASSWORD=changeme \
527527
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
528-
ghcr.io/ibm/mcp-context-forge:0.8.0
528+
ghcr.io/ibm/mcp-context-forge:0.9.0
529529
```
530530

531531
SQLite now lives on the host at `./data/mcp.db`.
@@ -552,7 +552,7 @@ docker run -d --name mcpgateway \
552552
-e PLATFORM_ADMIN_PASSWORD=changeme \
553553
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
554554
-v $(pwd)/data:/data \
555-
ghcr.io/ibm/mcp-context-forge:0.8.0
555+
ghcr.io/ibm/mcp-context-forge:0.9.0
556556
```
557557

558558
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.
@@ -568,7 +568,7 @@ podman run -d --name mcpgateway \
568568
-p 4444:4444 \
569569
-e HOST=0.0.0.0 \
570570
-e DATABASE_URL=sqlite:///./mcp.db \
571-
ghcr.io/ibm/mcp-context-forge:0.8.0
571+
ghcr.io/ibm/mcp-context-forge:0.9.0
572572
```
573573

574574
#### 2 - Persist SQLite
@@ -587,7 +587,7 @@ podman run -d --name mcpgateway \
587587
-p 4444:4444 \
588588
-v $(pwd)/data:/data \
589589
-e DATABASE_URL=sqlite:////data/mcp.db \
590-
ghcr.io/ibm/mcp-context-forge:0.8.0
590+
ghcr.io/ibm/mcp-context-forge:0.9.0
591591
```
592592

593593
#### 3 - Host networking (rootless)
@@ -605,7 +605,7 @@ podman run -d --name mcpgateway \
605605
--network=host \
606606
-v $(pwd)/data:/data \
607607
-e DATABASE_URL=sqlite:////data/mcp.db \
608-
ghcr.io/ibm/mcp-context-forge:0.8.0
608+
ghcr.io/ibm/mcp-context-forge:0.9.0
609609
```
610610

611611
---
@@ -614,7 +614,7 @@ podman run -d --name mcpgateway \
614614
<summary><strong>✏️ Docker/Podman tips</strong></summary>
615615

616616
* **.env files** - Put all the `-e FOO=` lines into a file and replace them with `--env-file .env`. See the provided [.env.example](https://github.com/IBM/mcp-context-forge/blob/main/.env.example) for reference.
617-
* **Pinned tags** - Use an explicit version (e.g. `v0.8.0`) instead of `latest` for reproducible builds.
617+
* **Pinned tags** - Use an explicit version (e.g. `v0.9.0`) instead of `latest` for reproducible builds.
618618
* **JWT tokens** - Generate one in the running container:
619619

620620
```bash
@@ -660,7 +660,7 @@ docker run --rm -i \
660660
-e MCP_SERVER_URL=http://host.docker.internal:4444/servers/UUID_OF_SERVER_1/mcp \
661661
-e MCP_TOOL_CALL_TIMEOUT=120 \
662662
-e MCP_WRAPPER_LOG_LEVEL=DEBUG \
663-
ghcr.io/ibm/mcp-context-forge:0.8.0 \
663+
ghcr.io/ibm/mcp-context-forge:0.9.0 \
664664
python3 -m mcpgateway.wrapper
665665
```
666666

@@ -708,7 +708,7 @@ python3 -m mcpgateway.wrapper
708708
<summary><strong>Expected responses from mcpgateway.wrapper</strong></summary>
709709

710710
```json
711-
{"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.8.0"}}}
711+
{"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.9.0"}}}
712712

713713
# When there's no tools
714714
{"jsonrpc":"2.0","id":2,"result":{"tools":[]}}
@@ -742,7 +742,7 @@ docker run -i --rm \
742742
-e MCP_SERVER_URL=http://localhost:4444/servers/UUID_OF_SERVER_1/mcp \
743743
-e MCP_AUTH=${MCP_AUTH} \
744744
-e MCP_TOOL_CALL_TIMEOUT=120 \
745-
ghcr.io/ibm/mcp-context-forge:0.8.0 \
745+
ghcr.io/ibm/mcp-context-forge:0.9.0 \
746746
python3 -m mcpgateway.wrapper
747747
```
748748

@@ -1689,7 +1689,7 @@ MCP Gateway includes **vendor-agnostic OpenTelemetry support** for distributed t
16891689
| ------------------------------- | ---------------------------------------------- | --------------------- | ------------------------------------------ |
16901690
| `OTEL_ENABLE_OBSERVABILITY` | Master switch for observability | `true` | `true`, `false` |
16911691
| `OTEL_SERVICE_NAME` | Service identifier in traces | `mcp-gateway` | string |
1692-
| `OTEL_SERVICE_VERSION` | Service version in traces | `0.8.0` | string |
1692+
| `OTEL_SERVICE_VERSION` | Service version in traces | `0.9.0` | string |
16931693
| `OTEL_DEPLOYMENT_ENVIRONMENT` | Environment tag (dev/staging/prod) | `development` | string |
16941694
| `OTEL_TRACES_EXPORTER` | Trace exporter backend | `otlp` | `otlp`, `jaeger`, `zipkin`, `console`, `none` |
16951695
| `OTEL_RESOURCE_ATTRIBUTES` | Custom resource attributes | (empty) | `key=value,key2=value2` |

SECURITY.md

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

33
## ⚠️ Beta Software Notice
44

5-
**Current Version: 0.8.0 (Beta)**
5+
**Current Version: 0.9.0 (Beta)**
66

77
MCP Gateway is currently in 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:
88

charts/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ Below is a minimal example. Copy the default file and adjust for your environmen
247247
mcpContextForge:
248248
image:
249249
repository: ghcr.io/ibm/mcp-context-forge
250-
tag: 0.8.0
250+
tag: 0.9.0
251251
ingress:
252252
enabled: true
253253
host: gateway.local # replace with real DNS
@@ -630,7 +630,7 @@ For every setting see the [full annotated `values.yaml`](https://github.com/IBM/
630630
* 💾 Stateful storage - PV + PVC for Postgres (`/var/lib/postgresql/data`), storage class selectable.
631631
* 🌐 Networking & access - ClusterIP services, optional NGINX Ingress, and `NOTES.txt` with port-forward plus safe secret-fetch commands (password, bearer token, `JWT_SECRET_KEY`).
632632
* 📈 Replicas & availability - Gateway (3) and Fast-Time-Server (2) provide basic HA; stateful components run single-instance.
633-
* 📦 Helm best-practice layout - Clear separation of Deployments, Services, ConfigMaps, Secrets, PVC/PV and Ingress; chart version 0.8.0.
633+
* 📦 Helm best-practice layout - Clear separation of Deployments, Services, ConfigMaps, Secrets, PVC/PV and Ingress; chart version 0.9.0.
634634
* ⚙️ Horizontal Pod Autoscaler (HPA) support for mcpgateway
635635

636636
---

charts/mcp-stack/CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ When making changes:
262262
Update both `version` and `appVersion` in `Chart.yaml`:
263263

264264
```yaml
265-
version: 0.8.0 # Chart version
266-
appVersion: "0.8.0" # Application version
265+
version: 0.9.0 # Chart version
266+
appVersion: "0.9.0" # Application version
267267
```
268268
269269
### Release Checklist

0 commit comments

Comments
 (0)