Skip to content

Commit 1a164f0

Browse files
authored
Merge branch 'main' into fix-basic-auth-gateways
2 parents efe2a90 + 321714b commit 1a164f0

File tree

21 files changed

+1752
-1281
lines changed

21 files changed

+1752
-1281
lines changed

.bumpversion.cfg

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
11
[bumpversion]
2-
current_version = 0.1.0
3-
commit = False
4-
tag = False
5-
sign-tags = True
6-
tag_name = v{new_version} # tag format (only used if you flip tag=True later)
7-
8-
# SemVer parsing/serialising
9-
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
2+
current_version = 0.1.1
3+
commit = False
4+
tag = False
5+
sign-tags = True
6+
tag_name = v{new_version} # tag format (only used if you flip tag=True later)
7+
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
108
serialize =
119
{major}.{minor}.{patch}
1210

1311
[bumpversion:file:mcpgateway/__init__.py]
14-
search = __version__ = "{current_version}"
12+
search = __version__ = "{current_version}"
1513
replace = __version__ = "{new_version}"
1614

1715
[bumpversion:file:Containerfile]
18-
search = version="{current_version}"
16+
search = version="{current_version}"
1917
replace = version="{new_version}"
2018

2119
[bumpversion:file:Containerfile.lite]
22-
search = version="{current_version}"
20+
search = version="{current_version}"
2321
replace = version="{new_version}"
2422

2523
[bumpversion:file:pyproject.toml]
26-
search = version = "{current_version}"
24+
search = version = "{current_version}"
2725
replace = version = "{new_version}"

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@
2525
},
2626
"remoteEnv": {
2727
"MCPGATEWAY_DEV_MODE": "true",
28-
"VENV_DIR": "/Users/mg/.venv/mcpgateway"
28+
"VENV_DIR": "$HOME/.venv/mcpgateway"
2929
}
3030
}

.devcontainer/postCreateCommand.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fi
1111
make install-dev
1212

1313
# Run tests to verify setup
14-
make test
14+
# make test
1515

1616
echo "Devcontainer setup complete."
1717

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

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

.github/workflows/python-package.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ jobs:
2929
with:
3030
python-version: ${{ matrix.python-version }}
3131

32-
# 3️⃣ Install build front-end; Keep pip current
32+
# 3️⃣ Install build front-end; Keep pip current; bootstrap venv
3333
- name: Install build tool
3434
run: |
3535
python3 -m pip install --upgrade pip
3636
python3 -m pip install build # PyPA-endorsed PEP 517 builder
3737
38+
- name: Bootstrap project venv
39+
run: make venv
40+
3841
# 4️⃣ Invoke the Makefile 'dist' target (creates ./dist/*.whl & *.tar.gz)
3942
- name: Build distributions
4043
run: make dist # Uses the Makefile's `dist` rule

CHANGELOG.md

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

99
## [0.2.0] - 2025-06-15 (pending)
1010

11+
12+
## [0.1.1] - 2025‑06-14
13+
1114
### Added
1215

16+
* Added mcpgateway/translate.py (initial version) to convert stdio -> SSE
1317
* Moved mcpgateway-wrapper to mcpgateway/wrapper.py so it can run as a Python module (python3 -m mcpgateway.wrapper)
1418
* Integrated version into UI. API and separate /version endpoint also available.
1519
* Added /ready endpoint
20+
* Multiple new Makefile and packaging targets for maintaing the release
21+
* New helm charts and associated documentation
1622

1723
### Fixed
1824

Containerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
FROM registry.access.redhat.com/ubi9-minimal:9.6-1747218906
1+
FROM registry.access.redhat.com/ubi9-minimal:9.6-1749489516
22
LABEL maintainer="Mihai Criveti" \
33
name="mcp/mcpgateway" \
4-
version="0.1.0" \
4+
version="0.1.1" \
55
description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway"
66

77
ARG PYTHON_VERSION=3.11

Containerfile.lite

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ ARG PYTHON_VERSION=3.11 # Python major.minor series to track
2424
###########################
2525
# Base image for copying into scratch
2626
###########################
27-
FROM registry.access.redhat.com/ubi9/ubi-micro:9.6-1747318857 AS base
27+
FROM registry.access.redhat.com/ubi9/ubi-micro:9.6-1749632992 AS base
2828

2929
###########################
3030
# Builder stage
3131
###########################
32-
FROM registry.access.redhat.com/ubi9/ubi:9.6-1747219013 AS builder
32+
FROM registry.access.redhat.com/ubi9/ubi:9.6-1749542372 AS builder
3333
SHELL ["/bin/bash", "-c"]
3434

3535
ARG PYTHON_VERSION
@@ -106,7 +106,7 @@ LABEL maintainer="Mihai Criveti" \
106106
org.opencontainers.image.title="mcp/mcpgateway" \
107107
org.opencontainers.image.description="MCP Gateway: An enterprise-ready Model Context Protocol Gateway" \
108108
org.opencontainers.image.licenses="Apache-2.0" \
109-
org.opencontainers.image.version="0.1.0"
109+
org.opencontainers.image.version="0.1.1"
110110

111111
# ----------------------------------------------------------------------------
112112
# Copy the entire prepared root filesystem from the builder stage

Makefile

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ check-env:
125125
# help: serve-ssl - Run Gunicorn behind HTTPS on :4444 (uses ./certs)
126126
# help: dev - Run fast-reload dev server (uvicorn)
127127
# help: run - Execute helper script ./run.sh
128+
# help: smoketest - Run smoketest.py --verbose (build container, add MCP server, test endpoints)
128129
# help: test - Run unit tests with pytest
129130
# help: test-curl - Smoke-test API endpoints with curl script
130131
# help: pytest-examples - Run README / examples through pytest-examples
@@ -159,6 +160,11 @@ certs: ## Generate ./certs/cert.pem & ./certs/key.pem
159160
chmod 640 certs/key.pem
160161

161162
## --- Testing -----------------------------------------------------------------
163+
smoketest:
164+
@echo "🚀 Running smoketest…"
165+
@./smoketest.py --verbose || { echo "❌ Smoketest failed!"; exit 1; }
166+
@echo "✅ Smoketest passed!"
167+
162168
test:
163169
@echo "🧪 Running tests..."
164170
@test -d "$(VENV_DIR)" || make venv
@@ -774,33 +780,46 @@ containerfile-update:
774780
# help: verify - Build + twine + check-manifest + pyroma (no upload)
775781
# help: publish - Verify, then upload to PyPI (needs TWINE_* creds)
776782
# =============================================================================
777-
.PHONY: dist wheel sdist verify publish
778-
779-
dist: clean ## Build wheel + sdist
780-
python3 -m build
781-
@echo "🛠 Wheel & sdist written to ./dist"
782-
783-
wheel: ## Build wheel only
784-
python3 -m build -w
785-
@echo "🛠 Wheel written to ./dist"
786-
787-
sdist: ## Build source distribution only
788-
python3 -m build -s
789-
@echo "🛠 Source distribution written to ./dist"
783+
.PHONY: dist wheel sdist verify publish publish-testpypi
784+
785+
dist: clean ## Build wheel + sdist into ./dist
786+
@test -d "$(VENV_DIR)" || $(MAKE) --no-print-directory venv
787+
@/bin/bash -eu -c "\
788+
source $(VENV_DIR)/bin/activate && \
789+
python3 -m pip install --quiet --upgrade pip build && \
790+
python3 -m build"
791+
@echo '🛠 Wheel & sdist written to ./dist'
792+
793+
wheel: ## Build wheel only
794+
@test -d "$(VENV_DIR)" || $(MAKE) --no-print-directory venv
795+
@/bin/bash -eu -c "\
796+
source $(VENV_DIR)/bin/activate && \
797+
python3 -m pip install --quiet --upgrade pip build && \
798+
python3 -m build -w"
799+
@echo '🛠 Wheel written to ./dist'
800+
801+
sdist: ## Build source distribution only
802+
@test -d "$(VENV_DIR)" || $(MAKE) --no-print-directory venv
803+
@/bin/bash -eu -c "\
804+
source $(VENV_DIR)/bin/activate && \
805+
python3 -m pip install --quiet --upgrade pip build && \
806+
python3 -m build -s"
807+
@echo '🛠 Source distribution written to ./dist'
790808

791809
verify: dist ## Build, run metadata & manifest checks
792-
twine check dist/* # metadata sanity
793-
check-manifest # sdist completeness
794-
pyroma -d . # metadata quality score
810+
@/bin/bash -c "source $(VENV_DIR)/bin/activate && \
811+
twine check dist/* && \
812+
check-manifest && \
813+
pyroma -d ."
795814
@echo "✅ Package verified – ready to publish."
796815

797816
publish: verify ## Verify, then upload to PyPI
798-
twine upload dist/* # creds via env vars or ~/.pypirc
817+
@/bin/bash -c "source $(VENV_DIR)/bin/activate && twine upload dist/*"
799818
@echo "🚀 Upload finished – check https://pypi.org/project/$(PROJECT_NAME)/"
800819

801-
publish-testpypi: verify ## Verify, then upload to TestPyPI
802-
twine upload --repository testpypi dist/* # creds via env vars or ~/.pypirc
803-
@echo "🚀 Upload finished – check https://pypi.org/project/$(PROJECT_NAME)/"
820+
publish-testpypi: verify ## Verify, then upload to TestPyPI
821+
@/bin/bash -c "source $(VENV_DIR)/bin/activate && twine upload --repository testpypi dist/*"
822+
@echo "🚀 Upload finished – check https://test.pypi.org/project/$(PROJECT_NAME)/"
804823

805824
# =============================================================================
806825
# 🦭 PODMAN CONTAINER BUILD & RUN
@@ -1620,7 +1639,7 @@ local-pypi-debug:
16201639
# help: devpi-clean - Full cycle: build → upload → install locally
16211640
# help: devpi-status - Show devpi server status
16221641
# help: devpi-web - Open devpi web interface
1623-
# help: devpi-delete - Delete mcpgateway==<ver> from devpi index
1642+
# help: devpi-delete - Delete mcp-contextforge-gateway==<ver> from devpi index
16241643

16251644

16261645
.PHONY: devpi-install devpi-init devpi-start devpi-stop devpi-setup-user devpi-upload \
@@ -1738,21 +1757,21 @@ devpi-upload: dist devpi-setup-user ## Build wheel/sdist, then upload
17381757
@echo "🌐 Browse packages: $(DEVPI_URL)/$(DEVPI_INDEX)"
17391758

17401759
devpi-test:
1741-
@echo "📥 Installing package from devpi..."
1760+
@echo "📥 Installing package mcp-contextforge-gateway from devpi..."
17421761
@if ! curl -s $(DEVPI_URL) >/dev/null 2>&1; then \
17431762
echo "❌ DevPi server not running. Run 'make devpi-start' first."; \
17441763
exit 1; \
17451764
fi
17461765
@/bin/bash -c "source $(VENV_DIR)/bin/activate && \
17471766
pip install --index-url $(DEVPI_URL)/$(DEVPI_INDEX)/+simple/ \
17481767
--extra-index-url https://pypi.org/simple/ \
1749-
--force-reinstall $(PROJECT_NAME)"
1750-
@echo "✅ Installed $(PROJECT_NAME) from devpi"
1768+
--force-reinstall mcp-contextforge-gateway"
1769+
@echo "✅ Installed mcp-contextforge-gateway from devpi"
17511770

17521771
devpi-clean: clean dist devpi-upload devpi-test
17531772
@echo "🎉 Full devpi cycle complete!"
17541773
@echo "📊 Package info:"
1755-
@/bin/bash -c "source $(VENV_DIR)/bin/activate && pip show $(PROJECT_NAME)"
1774+
@/bin/bash -c "source $(VENV_DIR)/bin/activate && pip show mcp-contextforge-gateway"
17561775

17571776
devpi-status:
17581777
@echo "🔍 DevPi server status:"
@@ -1848,11 +1867,11 @@ VER ?= $(shell python -c "import tomllib, pathlib; \
18481867
print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])" \
18491868
2>/dev/null || echo 0.0.0)
18501869

1851-
devpi-delete: devpi-setup-user ## Delete mcpgateway==$(VER) from index
1852-
@echo "🗑️ Removing mcpgateway==$(VER) from $(DEVPI_INDEX)"
1870+
devpi-delete: devpi-setup-user ## Delete mcp-contextforge-gateway==$(VER) from index
1871+
@echo "🗑️ Removing mcp-contextforge-gateway==$(VER) from $(DEVPI_INDEX)"
18531872
@/bin/bash -c "source $(VENV_DIR)/bin/activate && \
18541873
devpi use $(DEVPI_INDEX) && \
1855-
devpi remove -y mcpgateway==$(VER) || true"
1874+
devpi remove -y mcp-contextforge-gateway==$(VER) || true"
18561875
@echo "✅ Delete complete (if it existed)"
18571876

18581877

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ It supports:
3737

3838
![MCP Gateway Architecture](https://ibm.github.io/mcp-context-forge/images/mcpgateway.svg)
3939

40+
For a list of upcoming features, check out the [ContextForge MCP Gateway Roadmap](https://ibm.github.io/mcp-context-forge/architecture/roadmap/)
41+
4042
---
4143

4244
<details>
@@ -203,7 +205,7 @@ You can now access the UI at [http://localhost:4444/admin](http://localhost:4444
203205

204206
> 💡 You can also use `--env-file .env` if you have a config file already. See the provided [.env.example](.env.example)
205207
> 💡 To access local tools, consider using `--network=host`
206-
> 💡 Consider using a stable / release version of the image, ex: `ghcr.io/ibm/mcp-context-forge:v0.1.0`
208+
> 💡 Consider using a stable / release version of the image, ex: `ghcr.io/ibm/mcp-context-forge:v0.1.1`
207209
208210
### Optional: Mount a local volume for persistent SQLite storage
209211

@@ -305,7 +307,7 @@ uv run --directory . -m mcpgateway.wrapper
305307
<summary><strong>Expected responses from mcpgateway.wrapper</strong></summary>
306308

307309
```json
308-
{"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.1.0"}}}
310+
{"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.1.1"}}}
309311

310312
# When there's no tools
311313
{"jsonrpc":"2.0","id":2,"result":{"tools":[]}}

0 commit comments

Comments
 (0)