mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-21 00:21:49 +00:00
77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
import argparse
|
|
import importlib
|
|
import importlib.metadata
|
|
import sys
|
|
from typing import Final
|
|
|
|
MINIMUM_MCP_VERSION: Final[tuple[int, int, int]] = (2, 2, 0)
|
|
|
|
IMPORTED_MODULES: Final[tuple[str, ...]] = (
|
|
"litellm",
|
|
"litellm.experimental_mcp_client",
|
|
"litellm.experimental_mcp_client.client",
|
|
"litellm.proxy._experimental.mcp_server.server",
|
|
"litellm.proxy._experimental.mcp_server.mcp_server_manager",
|
|
"litellm.proxy._experimental.mcp_server.rest_endpoints",
|
|
)
|
|
|
|
|
|
def _version_tuple(distribution: str) -> tuple[int, ...]:
|
|
return tuple(int(part) for part in importlib.metadata.version(distribution).split(".") if part.isdigit())
|
|
|
|
|
|
def main() -> int:
|
|
parser: Final = argparse.ArgumentParser()
|
|
parser.add_argument("--extra", choices=("mcp", "proxy"), default="proxy")
|
|
extra: Final = parser.parse_args().extra
|
|
for module_name in IMPORTED_MODULES if extra == "proxy" else IMPORTED_MODULES[:3]:
|
|
try:
|
|
importlib.import_module(module_name)
|
|
except Exception as exc:
|
|
sys.stderr.write(f"failed to import {module_name}: {exc}\n")
|
|
return 1
|
|
|
|
mcp_version: Final = _version_tuple("mcp")
|
|
if mcp_version < MINIMUM_MCP_VERSION:
|
|
sys.stderr.write(f"mcp {importlib.metadata.version('mcp')} below floor 2.2.0\n")
|
|
return 1
|
|
|
|
from mcp_types.version import HANDSHAKE_PROTOCOL_VERSIONS
|
|
|
|
for required in ("2024-11-05", "2025-06-18"):
|
|
if required not in HANDSHAKE_PROTOCOL_VERSIONS:
|
|
sys.stderr.write(f"HANDSHAKE_PROTOCOL_VERSIONS missing {required}\n")
|
|
return 1
|
|
|
|
if extra == "proxy":
|
|
scope: Final = {
|
|
"type": "http",
|
|
"method": "POST",
|
|
"path": "/mcp",
|
|
"headers": [(b"mcp-protocol-version", b"2026-07-28")],
|
|
}
|
|
mcp_server: Final = sys.modules["litellm.proxy._experimental.mcp_server.server"]
|
|
if mcp_server.unsupported_protocol_version(scope) != "2026-07-28":
|
|
sys.stderr.write("unsupported_protocol_version accepted a modern-only version\n")
|
|
return 1
|
|
if (
|
|
mcp_server.unsupported_protocol_version(dict(scope, headers=[(b"mcp-protocol-version", b"2025-06-18")]))
|
|
is not None
|
|
):
|
|
sys.stderr.write("unsupported_protocol_version rejected a handshake version\n")
|
|
return 1
|
|
|
|
sys.stdout.write(
|
|
"python {} mcp {} httpx2 {} pydantic {} litellm {}\n".format(
|
|
sys.version.split()[0],
|
|
importlib.metadata.version("mcp"),
|
|
importlib.metadata.version("httpx2"),
|
|
importlib.metadata.version("pydantic"),
|
|
importlib.metadata.version("litellm"),
|
|
)
|
|
)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|