Skip to content

Commit 67ad07e

Browse files
authored
v0.8.0 tag (#1182)
* Tag 0.8.0 Signed-off-by: Mihai Criveti <[email protected]> * Tag 0.8.0 Signed-off-by: Mihai Criveti <[email protected]> --------- Signed-off-by: Mihai Criveti <[email protected]>
1 parent 912d9e4 commit 67ad07e

Some content is hidden

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

69 files changed

+715
-609
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.7.0
2+
current_version = 0.8.0
33
commit = False
44
tag = False
55
sign-tags = True

.env.example

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ APP_ROOT_PATH=
3434
DOCS_ALLOW_BASIC_AUTH=false
3535

3636
# Database Configuration
37-
# Optimized for v0.7.0 multitenancy with enhanced connection pooling and timeouts
38-
3937
# SQLite (default) - good for development and small deployments
4038
# macOS note: If you see "sqlite3.OperationalError: disk I/O error" on macOS when running
4139
# `make serve`, move the DB to a safe APFS path (avoid iCloud/Dropbox/OneDrive/Google Drive,
@@ -51,7 +49,7 @@ DATABASE_URL=sqlite:///./mcp.db
5149
# For localhost: mysql+pymysql://mysql:changeme@localhost:3306/mcp
5250
# DATABASE_URL=mysql+pymysql://mysql:changeme@localhost:3306/mcp
5351

54-
# Database Connection Pool Configuration (optimized for v0.7.0 multitenancy)
52+
# Database Connection Pool Configuration
5553
# Maximum number of persistent connections (default: 200, optimized for SQLite)
5654
DB_POOL_SIZE=200
5755
# Additional connections beyond pool_size (default: 10, reduced for SQLite)
@@ -375,7 +373,7 @@ MCPGATEWAY_A2A_METRICS_ENABLED=true
375373
# MCP Server Catalog Configuration
376374
#####################################
377375

378-
# Enable MCP server catalog feature (NEW in v0.7.0)
376+
# Enable MCP server catalog feature
379377
# Allows defining a catalog of pre-configured MCP servers in a YAML file
380378
# for easy discovery and management via the Admin UI
381379
# Options: true (default), false

.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" "0.5.0" "v0.5.0" "0.6.0" "v0.6.0" "0.7.0" "v0.7.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" "0.6.0" "v0.6.0" "0.7.0" "v0.7.0" "0.8.0" "v0.8.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.7.0`. It assumes the CI build has already pushed an image
7+
# like `v0.8.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.7.0`
12+
# ➤ Result: Image re-tagged as `ghcr.io/OWNER/REPO:v0.8.0`
1313
#
1414
# ======================================================================
1515

@@ -25,7 +25,7 @@ on:
2525
workflow_dispatch:
2626
inputs:
2727
tag:
28-
description: 'Release tag (e.g., v0.7.0)'
28+
description: 'Release tag (e.g., v0.8.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.7.0 to trigger
5+
types: [published] # tag repo, ex: v0.8.0 to trigger
66
permissions:
77
contents: read
88
packages: write

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/ubi10-minimal:10.0-1755721767
22
LABEL maintainer="Mihai Criveti" \
33
name="mcp/mcpgateway" \
4-
version="0.7.0" \
4+
version="0.8.0" \
55
description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway"
66

77
ARG PYTHON_VERSION=3.12

Containerfile.lite

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ LABEL maintainer="Mihai Criveti" \
218218
org.opencontainers.image.title="mcp/mcpgateway" \
219219
org.opencontainers.image.description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway" \
220220
org.opencontainers.image.licenses="Apache-2.0" \
221-
org.opencontainers.image.version="0.7.0"
221+
org.opencontainers.image.version="0.8.0"
222222

223223
# ----------------------------------------------------------------------------
224224
# 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
@@ -2748,7 +2748,7 @@ MINIKUBE_ADDONS ?= ingress ingress-dns metrics-server dashboard registry regist
27482748
# OCI image tag to preload into the cluster.
27492749
# - By default we point to the *local* image built via `make docker-prod`, e.g.
27502750
# mcpgateway/mcpgateway:latest. Override with IMAGE=<repo:tag> to use a
2751-
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.7.0).
2751+
# remote registry (e.g. ghcr.io/ibm/mcp-context-forge:v0.8.0).
27522752
TAG ?= latest # override with TAG=<ver>
27532753
IMAGE ?= $(IMG):$(TAG) # or IMAGE=ghcr.io/ibm/mcp-context-forge:$(TAG)
27542754

@@ -3383,7 +3383,7 @@ devpi-unconfigure-pip:
33833383

33843384
# ─────────────────────────────────────────────────────────────────────────────
33853385
# 📦 Version helper (defaults to the version in pyproject.toml)
3386-
# override on the CLI: make VER=0.7.0 devpi-delete
3386+
# override on the CLI: make VER=0.8.0 devpi-delete
33873387
# ─────────────────────────────────────────────────────────────────────────────
33883388
VER ?= $(shell python3 -c "import tomllib, pathlib; \
33893389
print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])" \
@@ -4577,7 +4577,7 @@ MIGRATION_TEST_DIR := tests/migration
45774577
MIGRATION_REPORTS_DIR := $(MIGRATION_TEST_DIR)/reports
45784578

45794579
# Get supported versions from version config (n-2 policy)
4580-
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.7.0 latest")
4580+
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")
45814581

45824582
.PHONY: migration-test-all migration-test-sqlite migration-test-postgres migration-test-performance \
45834583
migration-setup migration-cleanup migration-debug migration-status

README.md

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,7 @@ ContextForge MCP Gateway is a feature-rich gateway, proxy and MCP Registry that
123123

124124
## 🚀 Overview & Goals
125125

126-
**ContextForge** 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.
127-
128-
**⚠️ Caution**: The current release (0.7.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.
126+
**ContextForge** is a gateway, registry, and proxy that sits in front of any [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server, A2A server or REST API-exposing a unified endpoint for all your AI clients. See the [project roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/) for more details.
129127

130128
It currently supports:
131129

@@ -142,9 +140,9 @@ It currently supports:
142140

143141
For a list of upcoming features, check out the [ContextForge Roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/)
144142

145-
> Note on Multi‑Tenancy (v0.7.0): A comprehensive multi‑tenant architecture with email authentication, teams, RBAC, and resource visibility is landing in v0.7.0. See the [Migration Guide](https://github.com/IBM/mcp-context-forge/blob/main/MIGRATION-0.7.0.md) and [Changelog](https://github.com/IBM/mcp-context-forge/blob/main/CHANGELOG.md) for details.
143+
> Note on Multi‑Tenancy (v0.7.0): A comprehensive multi‑tenant architecture with email authentication, teams, RBAC, and resource visibility is available since v0.7.0. If upgrading from an older version, see the [Migration Guide](https://github.com/IBM/mcp-context-forge/blob/main/MIGRATION-0.7.0.md) and [Changelog](https://github.com/IBM/mcp-context-forge/blob/main/CHANGELOG.md) for details.
146144
147-
**⚠️ Important**: MCP Gateway is not a standalone product - it is an open source component with **NO OFFICIAL SUPPORT** from IBM or its affiliates that can be integrated into your own solution architecture. If you choose to use it, you are responsible for evaluating its fit, securing the deployment, and managing its lifecycle. See [SECURITY.md](./SECURITY.md) for more details.
145+
**⚠️ Important**: See [SECURITY.md](./SECURITY.md) for more details.
148146

149147
---
150148

@@ -484,13 +482,13 @@ docker run -d --name mcpgateway \
484482
-e PLATFORM_ADMIN_PASSWORD=changeme \
485483
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
486484
-e DATABASE_URL=sqlite:///./mcp.db \
487-
ghcr.io/ibm/mcp-context-forge:0.7.0
485+
ghcr.io/ibm/mcp-context-forge:0.8.0
488486

489487
# Tail logs (Ctrl+C to quit)
490488
docker logs -f mcpgateway
491489

492490
# Generating an API key
493-
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.7.0 \
491+
docker run --rm -it ghcr.io/ibm/mcp-context-forge:0.8.0 \
494492
python3 -m mcpgateway.utils.create_jwt_token --username [email protected] --exp 0 --secret my-test-key
495493
```
496494

@@ -521,7 +519,7 @@ docker run -d --name mcpgateway \
521519
522520
-e PLATFORM_ADMIN_PASSWORD=changeme \
523521
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
524-
ghcr.io/ibm/mcp-context-forge:0.7.0
522+
ghcr.io/ibm/mcp-context-forge:0.8.0
525523
```
526524

527525
SQLite now lives on the host at `./data/mcp.db`.
@@ -548,7 +546,7 @@ docker run -d --name mcpgateway \
548546
-e PLATFORM_ADMIN_PASSWORD=changeme \
549547
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
550548
-v $(pwd)/data:/data \
551-
ghcr.io/ibm/mcp-context-forge:0.7.0
549+
ghcr.io/ibm/mcp-context-forge:0.8.0
552550
```
553551

554552
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.
@@ -564,7 +562,7 @@ podman run -d --name mcpgateway \
564562
-p 4444:4444 \
565563
-e HOST=0.0.0.0 \
566564
-e DATABASE_URL=sqlite:///./mcp.db \
567-
ghcr.io/ibm/mcp-context-forge:0.7.0
565+
ghcr.io/ibm/mcp-context-forge:0.8.0
568566
```
569567

570568
#### 2 - Persist SQLite
@@ -583,7 +581,7 @@ podman run -d --name mcpgateway \
583581
-p 4444:4444 \
584582
-v $(pwd)/data:/data \
585583
-e DATABASE_URL=sqlite:////data/mcp.db \
586-
ghcr.io/ibm/mcp-context-forge:0.7.0
584+
ghcr.io/ibm/mcp-context-forge:0.8.0
587585
```
588586

589587
#### 3 - Host networking (rootless)
@@ -601,7 +599,7 @@ podman run -d --name mcpgateway \
601599
--network=host \
602600
-v $(pwd)/data:/data \
603601
-e DATABASE_URL=sqlite:////data/mcp.db \
604-
ghcr.io/ibm/mcp-context-forge:0.7.0
602+
ghcr.io/ibm/mcp-context-forge:0.8.0
605603
```
606604

607605
---
@@ -610,7 +608,7 @@ podman run -d --name mcpgateway \
610608
<summary><strong>✏️ Docker/Podman tips</strong></summary>
611609

612610
* **.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.
613-
* **Pinned tags** - Use an explicit version (e.g. `v0.7.0`) instead of `latest` for reproducible builds.
611+
* **Pinned tags** - Use an explicit version (e.g. `v0.8.0`) instead of `latest` for reproducible builds.
614612
* **JWT tokens** - Generate one in the running container:
615613

616614
```bash
@@ -656,7 +654,7 @@ docker run --rm -i \
656654
-e MCP_SERVER_URL=http://host.docker.internal:4444/servers/UUID_OF_SERVER_1/mcp \
657655
-e MCP_TOOL_CALL_TIMEOUT=120 \
658656
-e MCP_WRAPPER_LOG_LEVEL=DEBUG \
659-
ghcr.io/ibm/mcp-context-forge:0.7.0 \
657+
ghcr.io/ibm/mcp-context-forge:0.8.0 \
660658
python3 -m mcpgateway.wrapper
661659
```
662660

@@ -704,7 +702,7 @@ python3 -m mcpgateway.wrapper
704702
<summary><strong>Expected responses from mcpgateway.wrapper</strong></summary>
705703

706704
```json
707-
{"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.7.0"}}}
705+
{"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"}}}
708706

709707
# When there's no tools
710708
{"jsonrpc":"2.0","id":2,"result":{"tools":[]}}
@@ -738,7 +736,7 @@ docker run -i --rm \
738736
-e MCP_SERVER_URL=http://localhost:4444/servers/UUID_OF_SERVER_1/mcp \
739737
-e MCP_AUTH=${MCP_AUTH} \
740738
-e MCP_TOOL_CALL_TIMEOUT=120 \
741-
ghcr.io/ibm/mcp-context-forge:0.7.0 \
739+
ghcr.io/ibm/mcp-context-forge:0.8.0 \
742740
python3 -m mcpgateway.wrapper
743741
```
744742

@@ -1422,7 +1420,7 @@ MCP Gateway includes **vendor-agnostic OpenTelemetry support** for distributed t
14221420
| ------------------------------- | ---------------------------------------------- | --------------------- | ------------------------------------------ |
14231421
| `OTEL_ENABLE_OBSERVABILITY` | Master switch for observability | `true` | `true`, `false` |
14241422
| `OTEL_SERVICE_NAME` | Service identifier in traces | `mcp-gateway` | string |
1425-
| `OTEL_SERVICE_VERSION` | Service version in traces | `0.7.0` | string |
1423+
| `OTEL_SERVICE_VERSION` | Service version in traces | `0.8.0` | string |
14261424
| `OTEL_DEPLOYMENT_ENVIRONMENT` | Environment tag (dev/staging/prod) | `development` | string |
14271425
| `OTEL_TRACES_EXPORTER` | Trace exporter backend | `otlp` | `otlp`, `jaeger`, `zipkin`, `console`, `none` |
14281426
| `OTEL_RESOURCE_ATTRIBUTES` | Custom resource attributes | (empty) | `key=value,key2=value2` |

SECURITY.md

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
# 🔐 Security Policy
22

3-
**⚠️ Important**: MCP Gateway is an **OPEN SOURCE PROJECT** provided "as-is" with **NO OFFICIAL SUPPORT** from IBM or its affiliates. Community contributions and best-effort maintenance are provided by project maintainers and contributors.
3+
## ⚠️ Beta Software Notice
44

5-
**⚠️ Important**: MCP Gateway is not a standalone product - it is an open source component that can be integrated into your own solution architecture. If you choose to use it, you are responsible for evaluating its fit, securing the deployment, and managing its lifecycle.
5+
**Current Version: 0.8.0 (Beta)**
66

7-
## ⚠️ Early Beta Software Notice
8-
9-
**Current Version: 0.7.0 (Beta)**
10-
11-
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:
7+
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:
128

139
### Admin UI is Development-Only
1410

@@ -59,16 +55,8 @@ For production deployments:
5955

6056
### Multi-Tenancy Considerations
6157

62-
**MCP Gateway is not yet multi-tenant ready**. If you're building a platform that serves multiple users or teams, you must implement the following in your own application layer:
63-
64-
- **User isolation and data segregation** - ensure users cannot access each other's configurations
65-
- **Role-Based Access Control (RBAC)** - manage permissions per user/team/organization
66-
- **Resource cleanup and lifecycle management** - handle orphaned resources and quota enforcement
67-
- **Additional input validation** - enforce tenant-specific business rules and limits
68-
- **Audit logging** - track actions per user for compliance and security
69-
- **Team and organization management** - handle user groups and hierarchies
58+
Please review https://ibm.github.io/mcp-context-forge/architecture/multitenancy/
7059

71-
MCP Gateway should be deployed as a **single-tenant component** within your larger multi-tenant architecture. Many enterprise features including native RBAC, team management, and tenant isolation are planned - see our [Roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/) for upcoming releases.
7260

7361
### General Beta Limitations
7462

0 commit comments

Comments
 (0)