Document PyPI+uvx deployment pattern for Python MCP servers#160
Closed
bryan-anthropic wants to merge 2 commits intomodelcontextprotocol:mainfrom
Closed
Document PyPI+uvx deployment pattern for Python MCP servers#160bryan-anthropic wants to merge 2 commits intomodelcontextprotocol:mainfrom
bryan-anthropic wants to merge 2 commits intomodelcontextprotocol:mainfrom
Conversation
Add comprehensive documentation for: - Variable substitution patterns for cross-platform portability - Four-phase testing approach (dev, clean environment, cross-platform, integration) - Common portability mistakes and solutions - Error message best practices with actionable examples These additions help developers create more robust and maintainable MCPB bundles. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit documents an alternative deployment pattern that has been in production use (e.g., Braze MCP Server) but was previously undocumented in the MCPB specification. Changes: 1. README.md: - Add comprehensive section on PyPI-based deployment - Document when to use PyPI vs traditional bundling - Include comparison table with trade-offs - Reference Braze MCP Server as production example 2. MANIFEST.md: - Add Python PyPI+uvx configuration example - Document uvx command usage - Link to README for detailed comparison 3. New example: examples/pypi-python/ - Complete working example of PyPI-based bundle - Demonstrates uvx command configuration - Shows pyproject.toml with [project.scripts] entry point - Includes comprehensive README with testing instructions 4. Zscaler MCP fix documentation: - Document correct manifest configuration for Zscaler - Show how to fix command: "python" → "uvx" - Verify package published at pypi.org/project/zscaler-mcp/ This pattern enables: - Smaller bundle sizes (< 1 MB vs 50+ MB) - Automatic updates via @latest tag - Modern Python packaging alignment Trade-offs: - Requires users to install 'uv' tool - Needs internet connection at first launch 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR documents the PyPI+uvx deployment pattern for Python MCP servers, which has been in production use (e.g., Braze MCP Server approved Oct 2025) but was previously undocumented in the MCPB specification.
Problem Statement
During MCP server reviews, we identified that:
command: "uvx"with PyPI deploymentcommand: "python"+ bundled dependenciesThis created confusion for developers choosing between deployment approaches.
Changes
1. README.md
2. MANIFEST.md
uvxcommand usage alongside traditionalpythoncommand3. New Example:
examples/pypi-python/uvxcommand configuration in manifest.json[project.scripts]entry pointPyPI Deployment Pattern Overview
Manifest configuration:
{ "server": { "type": "python", "entry_point": "src/package/main.py", "mcp_config": { "command": "uvx", "args": ["--native-tls", "package-name@latest"], "env": { "API_KEY": "${user_config.api_key}" } } } }Benefits:
@latesttagTrade-offs:
uvtoolProduction Usage
Braze MCP Server has been using this pattern successfully:
braze-mcp-serverTesting
Files Changed
For Reviewers
This PR does NOT change:
It ADDS:
Related Issues
This addresses confusion seen in: