Skip to content

Commit bc192a9

Browse files
Merge branch 'main' into 4106-bug-rbac-issue-non-platform-admin-users-cannot-access-private-tools-despite-platform_admin-role
2 parents 980c934 + 8866dd2 commit bc192a9

File tree

384 files changed

+22541
-44840
lines changed

Some content is hidden

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

384 files changed

+22541
-44840
lines changed

.bumpversion.cfg

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 1.0.0-RC-2
2+
current_version = 1.0.0-RC-3
33
commit = False
44
tag = False
55
sign-tags = True
@@ -24,3 +24,23 @@ replace = version="{new_version}"
2424
[bumpversion:file:pyproject.toml]
2525
search = version = "{current_version}"
2626
replace = version = "{new_version}"
27+
28+
[bumpversion:file:Containerfile.scratch]
29+
search = version="{current_version}"
30+
replace = version="{new_version}"
31+
32+
[bumpversion:file:tools_rust/wrapper/Cargo.toml]
33+
search = version = "{current_version}"
34+
replace = version = "{new_version}"
35+
36+
[bumpversion:file(chart-version):charts/mcp-stack/Chart.yaml]
37+
search = version: {current_version}
38+
replace = version: {new_version}
39+
40+
[bumpversion:file(chart-appversion):charts/mcp-stack/Chart.yaml]
41+
search = appVersion: "{current_version}"
42+
replace = appVersion: "{new_version}"
43+
44+
[bumpversion:file:SECURITY.md]
45+
search = **Current Version: {current_version}**
46+
replace = **Current Version: {new_version}**

.claude/skills/pr-risk-scoring/score_prs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
approvals_csv Optional CSV with columns: pr_number,approvals
1212
"""
1313

14+
# Standard
1415
import csv
1516
import json
1617
import os
@@ -167,7 +168,7 @@ def compute_security_score(files, labels):
167168
return min(score, 5)
168169

169170

170-
PROD_PREFIXES = ("mcpgateway/", "plugins/", "plugins_rust/", "a2a-agents/", "mcp-servers/", "tools_rust/")
171+
PROD_PREFIXES = ("mcpgateway/", "plugins/", "a2a-agents/", "mcp-servers/", "tools_rust/")
171172

172173

173174
def compute_test_score(files):

.devcontainer/devcontainer.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
"dockerfile": "Dockerfile",
55
"context": ".."
66
},
7-
"features": {},
7+
"features": {
8+
"ghcr.io/devcontainers/features/node:1": {
9+
"version": "lts"
10+
}
11+
},
812
"postCreateCommand": ".devcontainer/postCreateCommand.sh",
913
"customizations": {
1014
"vscode": {

.env.example

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,15 @@ OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
872872
# Default: 10000 characters
873873
# MAX_PARAM_LENGTH=10000
874874

875+
# CWE-400: Limits for user-supplied meta_data forwarded to upstream MCP servers.
876+
# Keeps arbitrarily large dicts from amplifying into downstream network/DB load.
877+
# Maximum number of top-level keys in meta_data (default: 16)
878+
# META_MAX_KEYS=16
879+
# Maximum nesting depth in meta_data (default: 2)
880+
# META_MAX_DEPTH=2
881+
# Maximum JSON-encoded byte size of meta_data (default: 4096)
882+
# META_MAX_BYTES=4096
883+
875884
# Regex patterns for dangerous input (JSON array)
876885
# Used to detect and block malicious input patterns
877886
# Default patterns:
@@ -2127,6 +2136,11 @@ OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
21272136
# TOOL_CONCURRENT_LIMIT=10
21282137
# GATEWAY_TOOL_NAME_SEPARATOR=-
21292138

2139+
# Maximum length of response text returned for non-JSON REST API responses
2140+
# Longer responses are truncated to prevent exposing excessive sensitive data
2141+
# Default: 5000 characters, Range: 1000-100000
2142+
# REST_RESPONSE_TEXT_MAX_LENGTH=5000
2143+
21302144
# Prompt Configuration
21312145
# PROMPT_CACHE_SIZE=100
21322146
# MAX_PROMPT_SIZE=102400

.github/CODEOWNERS

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
# All files in the repo
2-
* @crivetimihai
3-
/.github/workflows/ @crivetimihai
2+
* @crivetimihai @brian-hussey
3+
/.github/workflows/ @crivetimihai @brian-hussey
44

55
# Plugin framework
66
/mcpgateway/plugins @araujof @terylt @jonpspri
77

88
# Rust projects
9-
/plugins_rust/ @lucarlig @dima-zakharov
109
/tools_rust/ @lucarlig @dima-zakharov
1110
/mcp-servers/rust/ @lucarlig @dima-zakharov
1211

.github/workflows/dependency-review.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,17 @@ jobs:
9696
RPL-1.5,
9797
OSL-3.0,
9898
CPAL-1.0
99-
allow-dependencies-licenses: "pkg:pypi/pylint-pydantic"
99+
100+
# To whitelist a specific dependency whose license would otherwise
101+
# be denied (e.g. a transitively-pulled GPL package that has been
102+
# legally reviewed and approved), add it to `allow-dependencies-licenses`
103+
# as a comma-separated list of Package URLs (purl spec). Example:
104+
#
105+
# allow-dependencies-licenses: "pkg:pypi/some-package, pkg:npm/another-pkg"
106+
#
107+
# Each entry exempts that one package from the `deny-licenses` check
108+
# above while keeping the policy in force for every other dependency.
109+
# See: https://github.com/actions/dependency-review-action#configuration-options
100110
license-check: true # (default)
101111
# ───────── UX tweaks ─────────
102112
warn-only: false # actually fail the workflow

.github/workflows/lint-web.yml

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,25 @@ jobs:
112112
# -----------------------------------------------------------
113113
# 1️⃣ Node.js Setup
114114
# -----------------------------------------------------------
115-
- name: 📦 Set up Node.js
116-
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
117-
with:
118-
node-version: '20'
115+
- name: 📦 Install Node.js 20
116+
run: |
117+
sudo apt-get update
118+
sudo apt-get install -y ca-certificates curl gnupg
119+
sudo mkdir -p /etc/apt/keyrings
120+
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
121+
| sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
122+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" \
123+
| sudo tee /etc/apt/sources.list.d/nodesource.list > /dev/null
124+
sudo apt-get update
125+
sudo apt-get install -y nodejs
126+
node --version
127+
npm --version
119128
120129
# -----------------------------------------------------------
121130
# 🔧 Configure npm
122131
# -----------------------------------------------------------
123132
- name: 🔧 Upgrade npm to minimum required version
124-
run: npm install -g npm@^11.10.0
133+
run: sudo npm install -g npm@^11.10.0
125134

126135
- name: 🔧 Configure npm registry
127136
run: npm config set registry https://registry.npmjs.org/

.github/workflows/lint.yml

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,19 @@ concurrency:
3333
permissions:
3434
contents: read
3535

36+
# Keep these pins in lockstep with the *_VERSION variables in the Makefile.
37+
# Linters are invoked via `uv tool run <tool>==<pin>` so CI and local runs
38+
# use identical versions regardless of the dev dependency group.
39+
env:
40+
RUFF_VERSION: "0.15.1"
41+
PYLINT_VERSION: "3.3.9"
42+
PYLINT_PYDANTIC_VERSION: "0.3.5"
43+
VULTURE_VERSION: "2.14"
44+
INTERROGATE_VERSION: "1.7.0"
45+
RADON_VERSION: "6.0.1"
46+
YAMLLINT_VERSION: "1.38.0"
47+
TOMLCHECK_VERSION: "0.2.3"
48+
3649
jobs:
3750
# ---------------------------------------------------------------
3851
# Python linters - run on both mcpgateway/ and plugins/
@@ -45,20 +58,15 @@ jobs:
4558
target: [mcpgateway, plugins]
4659
tool:
4760
- id: ruff
48-
setup: pip install ruff
49-
cmd: "ruff check $TARGET"
61+
cmd: "uv tool run ruff==$RUFF_VERSION check $TARGET"
5062
- id: vulture
51-
setup: pip install vulture
52-
cmd: 'vulture $TARGET --min-confidence 80 --exclude "*_pb2.py,*_pb2_grpc.py"'
63+
cmd: 'uv tool run vulture==$VULTURE_VERSION $TARGET --min-confidence 80 --exclude "*_pb2.py,*_pb2_grpc.py"'
5364
- id: pylint
54-
setup: "true"
55-
cmd: "uv run pylint $TARGET --rcfile=.pylintrc.$TARGET --fail-on E --fail-under=10"
65+
cmd: "uv tool run --with-editable . --with pylint-pydantic==$PYLINT_PYDANTIC_VERSION pylint==$PYLINT_VERSION $TARGET --rcfile=.pylintrc.$TARGET --fail-on E --fail-under=10"
5666
- id: interrogate
57-
setup: pip install interrogate
58-
cmd: "interrogate -vv $TARGET --fail-under 100"
67+
cmd: "uv tool run interrogate==$INTERROGATE_VERSION -vv $TARGET --fail-under 100"
5968
- id: radon
60-
setup: pip install radon
61-
cmd: "radon cc $TARGET --min C --show-complexity && radon mi $TARGET --min B"
69+
cmd: "uv tool run radon==$RADON_VERSION cc $TARGET --min C --show-complexity && uv tool run radon==$RADON_VERSION mi $TARGET --min B"
6270

6371
name: "${{ matrix.tool.id }} (${{ matrix.target }})"
6472
runs-on: ubuntu-latest
@@ -75,19 +83,10 @@ jobs:
7583
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
7684
with:
7785
python-version: "3.12"
78-
cache: pip
7986

8087
- name: Set up uv
8188
uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
8289

83-
- name: Install project (editable mode)
84-
run: |
85-
python3 -m pip install --upgrade pip
86-
pip install -e .[dev]
87-
88-
- name: Install tool
89-
run: ${{ matrix.tool.setup }}
90-
9190
- name: Run linter
9291
env:
9392
TARGET: ${{ matrix.target }}
@@ -103,8 +102,8 @@ jobs:
103102
matrix:
104103
include:
105104
- id: yamllint
106-
setup: pip install yamllint
107-
cmd: yamllint -c .yamllint .
105+
setup: "true"
106+
cmd: uv tool run yamllint==$YAMLLINT_VERSION -c .yamllint .
108107

109108
- id: jsonlint
110109
setup: |
@@ -115,13 +114,13 @@ jobs:
115114
xargs -0 -I{} jq empty "{}"
116115
117116
- id: tomllint
118-
setup: pip install tomlcheck
117+
setup: "true"
119118
cmd: |
120119
find . -type f -name '*.toml' \
121120
-not -path './plugin_templates/*' \
122121
-not -path './mcp-servers/templates/*' \
123122
-print0 |
124-
xargs -0 -I{} tomlcheck "{}"
123+
xargs -0 -I{} uv tool run tomlcheck==$TOMLCHECK_VERSION "{}"
125124
126125
name: ${{ matrix.id }}
127126
runs-on: ubuntu-latest
@@ -140,6 +139,9 @@ jobs:
140139
python-version: "3.12"
141140
cache: pip
142141

142+
- name: Set up uv
143+
uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
144+
143145
- name: Install tool
144146
run: ${{ matrix.setup }}
145147

.github/workflows/linting-full.yml

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,26 @@ jobs:
3939
- name: Set up Go
4040
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
4141
with:
42-
go-version: "1.25.8"
42+
go-version: "1.26.2"
4343
cache-dependency-path: |
4444
a2a-agents/go/a2a-echo-agent/go.sum
4545
mcp-servers/go/benchmark-server/go.sum
4646
mcp-servers/go/fast-time-server/go.sum
4747
mcp-servers/go/slow-time-server/go.sum
4848
49-
- name: Set up Node.js
50-
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
51-
with:
52-
node-version: "22"
49+
- name: Install Node.js 22
50+
run: |
51+
sudo apt-get update
52+
sudo apt-get install -y ca-certificates curl gnupg
53+
sudo mkdir -p /etc/apt/keyrings
54+
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
55+
| sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
56+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \
57+
| sudo tee /etc/apt/sources.list.d/nodesource.list > /dev/null
58+
sudo apt-get update
59+
sudo apt-get install -y nodejs
60+
node --version
61+
npm --version
5362
5463
- name: Set up Helm
5564
uses: azure/setup-helm@bf6a7d304bc2fdb57e0331155b7ebf2c504acf0a # v4

.github/workflows/playwright.yml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,22 @@ jobs:
6161
version: "0.9.2"
6262
python-version: "3.12"
6363

64-
- name: 🟢 Set up Node.js
65-
uses: actions/setup-node@v4
66-
with:
67-
node-version: "22"
68-
cache: "npm"
64+
- name: 🟢 Install Node.js 22
65+
run: |
66+
sudo apt-get update
67+
sudo apt-get install -y ca-certificates curl gnupg
68+
sudo mkdir -p /etc/apt/keyrings
69+
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
70+
| sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
71+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \
72+
| sudo tee /etc/apt/sources.list.d/nodesource.list > /dev/null
73+
sudo apt-get update
74+
sudo apt-get install -y nodejs
75+
node --version
76+
npm --version
77+
78+
- name: 🔧 Upgrade npm to minimum required version
79+
run: sudo npm install -g npm@^11.10.0
6980

7081
- name: 📦 Install gateway dependencies
7182
run: |

0 commit comments

Comments
 (0)