38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
"""Protocol-version registry and comparison helpers.
|
|
|
|
Date-string protocol revisions happen to sort lexicographically, but versions
|
|
are an enumerated set, not an ordered scalar: future identifiers are not
|
|
guaranteed to be date-shaped, and unrecognized peer strings must compare
|
|
conservatively instead of accidentally (e.g. "zzz" > "2025-11-25"). All
|
|
ordering questions go through KNOWN_PROTOCOL_VERSIONS.
|
|
"""
|
|
|
|
from typing import Final
|
|
|
|
from mcp.types import LATEST_PROTOCOL_VERSION
|
|
|
|
KNOWN_PROTOCOL_VERSIONS: Final[tuple[str, ...]] = (
|
|
"2024-11-05",
|
|
"2025-03-26",
|
|
"2025-06-18",
|
|
"2025-11-25",
|
|
"2026-07-28",
|
|
)
|
|
"""Every released protocol revision, oldest to newest."""
|
|
|
|
SUPPORTED_PROTOCOL_VERSIONS: list[str] = ["2024-11-05", "2025-03-26", "2025-06-18", LATEST_PROTOCOL_VERSION]
|
|
"""Protocol revisions this SDK can negotiate."""
|
|
|
|
|
|
def is_version_at_least(version: str, minimum: str) -> bool:
|
|
"""Return True if `version` is a known revision at least as new as `minimum`.
|
|
|
|
Unknown `version` strings return False (treat unrecognized peers
|
|
conservatively). `minimum` must be a member of KNOWN_PROTOCOL_VERSIONS;
|
|
passing anything else is programmer error and raises ValueError.
|
|
"""
|
|
if minimum not in KNOWN_PROTOCOL_VERSIONS:
|
|
raise ValueError(f"minimum must be a known protocol version, got {minimum!r}")
|
|
if version not in KNOWN_PROTOCOL_VERSIONS:
|
|
return False
|
|
return KNOWN_PROTOCOL_VERSIONS.index(version) >= KNOWN_PROTOCOL_VERSIONS.index(minimum)
|