From 9fb1074873993a7e2a9f8db0057f085811f49988 Mon Sep 17 00:00:00 2001 From: Alex Hoffer Date: Mon, 10 Aug 2026 11:55:59 -0700 Subject: [PATCH 1/3] Pin mcp SDK below 2.0 and release 0.1.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mcp 2.0.0 removed the low-level Server.list_tools/call_tool decorators this server registers its tools with, so uvx mcp-server-plaid now dies at startup with AttributeError and clients report only "connection closed". uvx re-resolves on every launch, so working installs broke with no local change. Constrain the dependency to <2 and bump to 0.1.1 so the fix can actually be published — PyPI already has 0.1.0, so the formal release job cannot re-upload under the current version. Co-Authored-By: Claude Opus 5 (1M context) --- sandbox/pyproject.toml | 4 ++-- sandbox/src/mcp_server_plaid/server.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sandbox/pyproject.toml b/sandbox/pyproject.toml index 2d0a5e7..d11de2a 100644 --- a/sandbox/pyproject.toml +++ b/sandbox/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "mcp-server-plaid" -version = "0.1.0" +version = "0.1.1" description = "Model Context Protocol (MCP) server to build fast integration testing with Plaid Sandbox data." readme = "README.md" requires-python = ">=3.11" @@ -14,7 +14,7 @@ authors = [ ] dependencies = [ "httpx", - "mcp", + "mcp>=1.6,<2", "websockets", "plaid-python" ] diff --git a/sandbox/src/mcp_server_plaid/server.py b/sandbox/src/mcp_server_plaid/server.py index 3ea21af..6ee1e49 100644 --- a/sandbox/src/mcp_server_plaid/server.py +++ b/sandbox/src/mcp_server_plaid/server.py @@ -29,7 +29,7 @@ logger = logging.getLogger("plaid-mcp-server") # Constants -__version__ = "0.1.0" +__version__ = "0.1.1" REQUEST_TIMEOUT = 30.0 From 5ccaaa64be6dfc8ce093ef20461dfc4f0ebff951 Mon Sep 17 00:00:00 2001 From: Alex Hoffer Date: Mon, 10 Aug 2026 12:00:40 -0700 Subject: [PATCH 2/3] Read version from distribution metadata The version lived in both pyproject.toml and server.py, but the publish workflow rewrites only pyproject.toml, so every dev release advertised a stale version over the MCP handshake. Read it from the installed distribution instead, falling back when there is no metadata to read. Co-Authored-By: Claude Opus 5 (1M context) --- sandbox/src/mcp_server_plaid/server.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sandbox/src/mcp_server_plaid/server.py b/sandbox/src/mcp_server_plaid/server.py index 6ee1e49..2cf34b7 100644 --- a/sandbox/src/mcp_server_plaid/server.py +++ b/sandbox/src/mcp_server_plaid/server.py @@ -8,6 +8,7 @@ import asyncio import logging import sys +from importlib.metadata import PackageNotFoundError, version from typing import Any, Dict, List import click @@ -29,7 +30,13 @@ logger = logging.getLogger("plaid-mcp-server") # Constants -__version__ = "0.1.1" +try: + # Read from installed distribution metadata so dev releases, which stamp a + # generated version into pyproject.toml at publish time, report accurately. + __version__ = version("mcp-server-plaid") +except PackageNotFoundError: + __version__ = "0.0.0+unknown" + REQUEST_TIMEOUT = 30.0 From b3a1fff8db56dbf8950b5cf9aa01519b9a002c11 Mon Sep 17 00:00:00 2001 From: Alex Hoffer Date: Mon, 10 Aug 2026 12:03:57 -0700 Subject: [PATCH 3/3] Warn when distribution metadata is missing Falling back to an unknown version silently made a broken or renamed distribution look identical to running from a source tree. Co-Authored-By: Claude Opus 5 (1M context) --- sandbox/src/mcp_server_plaid/server.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sandbox/src/mcp_server_plaid/server.py b/sandbox/src/mcp_server_plaid/server.py index 2cf34b7..18f301a 100644 --- a/sandbox/src/mcp_server_plaid/server.py +++ b/sandbox/src/mcp_server_plaid/server.py @@ -29,14 +29,18 @@ ) logger = logging.getLogger("plaid-mcp-server") -# Constants +# Read the version from distribution metadata rather than a literal: the publish +# workflow stamps a generated version into pyproject.toml, which a literal here +# would not track. try: - # Read from installed distribution metadata so dev releases, which stamp a - # generated version into pyproject.toml at publish time, report accurately. __version__ = version("mcp-server-plaid") except PackageNotFoundError: + logger.warning( + "No mcp-server-plaid distribution metadata found; reporting version as unknown" + ) __version__ = "0.0.0+unknown" +# Constants REQUEST_TIMEOUT = 30.0