Skip to content

sitbon/magg

v1.1.0 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

Published 29d MCP Developer Tools
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

aggregator ai docker fastmcp json-rpc llm
+9 more
mcp mcp-sdk mcp-server mcp-servers modelcontextprotocol proxy pydantic pydantic-v2 python

Affected surfaces

auth rbac

Summary

AI summary

Broad release touches config_reload.py, sampling.py, pyproject.toml, and reload.py.

Full changelog

Changes

Release v1.1.0

Date: Sat Jun 27 16:42:41 2026 -0700

Bump version to 1.1.0 and mark Production/Stable

Date: Sat Jun 27 16:33:50 2026 -0700

Defer annotations in reload.py to support Python 3.12/3.13

Date: Sat Jun 27 16:15:27 2026 -0700

The unquoted ConfigManager parameter annotation is a TYPE_CHECKING-only
name, so it raised NameError at import on 3.12/3.13, which evaluate
annotations eagerly. 3.14 defers annotation evaluation by default, so it
passed there. from future import annotations makes all annotations
lazy strings on every version.

Fix example imports and control sdist build contents

Date: Sat Jun 27 16:07:48 2026 -0700

  • config_reload.py: fix the broken MaggServer import and drop the
    sys.path hack (magg is an installed dependency)
  • sampling.py: remove the stale PEP 723 script header
  • pyproject.toml: delete the inert Poetry packages/include keys and add a
    hatchling sdist allowlist, so the source distribution ships the package,
    tests, examples, docs, and scripts but not IDE/build/dev files

Adopt ruff for formatting and linting

Date: Sat Jun 27 15:47:24 2026 -0700

  • Add ruff dev-dep and config (line-length 120, lint F+I)
  • Format the codebase with ruff format
  • Remove unused imports and dead local variables it surfaced
  • reload.py: use a TYPE_CHECKING import for ConfigManager instead of a
    function-level import; drop a redundant config load; rename a loop
    variable that shadowed the dataclasses field import
  • Delete scripts/fix_whitespace.py (ruff format handles whitespace)

Fix proxy tool-call result handling for FastMCP 3.x

Date: Sat Jun 27 14:51:16 2026 -0700

client.call_tool() returns a CallToolResult in 3.x, not an iterable
list, so the proxy 'call' action raised "'CallToolResult' object is
not iterable". Iterate result.content, and add the missing test
coverage for the proxy call path. Found while evaluating PR #10.

Co-authored-by: Leon135 [email protected]

Pin Alpine base image to 3.24

Date: Sat Jun 27 14:38:30 2026 -0700

Avoids surprise base changes from the floating alpine:latest and makes
builds reproducible. 3.24 is the current stable series (what :latest
already resolved to); bump the series manually as needed.

Harden URL host checks, add workflow permissions, tidy discovery module

Date: Sat Jun 27 14:23:48 2026 -0700

  • py/incomplete-url-substring-sanitization: parse the URL host and
    compare it exactly (handling www/subdomains) instead of substring-
    matching the whole URL (discovery/search.py, discovery/metadata.py)
  • actions/missing-workflow-permissions: add least-privilege
    contents: read to test.yml and publish.yml
  • discovery: drop unused imports and convert static-able methods to
    classmethods

Scope the uv setup cache per Python version in CI

Date: Sat Jun 27 13:57:46 2026 -0700

The test matrix jobs shared one setup-uv cache key (derived from
uv.lock, not the Python version), so they raced to save it and all
but one logged a cache-reservation warning. cache-suffix gives each
version its own key.

Update CI/Docker workflows and add Python 3.14 to image builds

Date: Sat Jun 27 13:43:28 2026 -0700

  • Bump GitHub Actions to latest; pin behavior-sensitive ones exact
    ([email protected], [email protected], [email protected])
  • Add 3.14 to all docker build/test/push matrices and make it the
    default for the unsuffixed dev/prod image tags (verified on Alpine)
  • Correct the workflows readme: drop the unpublished -pre image claims
  • Use SPDX AGPL-3.0-or-later for the image license label
  • Remove dead/redundant commented-out workflow config

Migrate to FastMCP 3.x and add Python 3.14 support

Date: Sat Jun 27 12:51:01 2026 -0700

  • Auth: BearerAuthProvider -> JWTVerifier (3.x removed the old class)
  • Proxy: drop removed tool_serializer; get_tools -> list_tools
  • Mount: as_proxy -> create_proxy, prefix -> namespace
  • Transports: add NoValidateNpxStdioTransport (3.x validates npx at construction)
  • Deps: require fastmcp>=3.4,<4, add explicit mcp dependency, regenerate lock
  • CI: test on 3.12/3.13/3.14, fix test path filter and pin per-version Python

Installation

uv add magg==1.1.0

Breaking Changes

  • fastmcp: BearerAuthProvider removed; must use JWTVerifier
  • fastmcp: tool_serializer attribute removed
  • fastmcp: get_tools renamed to list_tools
  • fastmcp: as_proxy mount option renamed to create_proxy and prefix to namespace

Security Fixes

  • py/incomplete-url-substring-sanitization: parse URL host exactly, preventing substring‑based bypass attacks

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track sitbon/magg

Get notified when new releases ship.

Sign up free

About sitbon/magg

Magg: A meta-MCP server that acts as a universal hub, allowing LLMs to autonomously discover, install, and orchestrate multiple MCP servers - essentially giving AI assistants the power to extend their own capabilities on-demand.

All releases →

Beta — feedback welcome: [email protected]