[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-sparfenyuk--mcp-proxy":3,"tool-sparfenyuk--mcp-proxy":64},[4,23,32,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":22},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,2,"2026-04-05T10:45:23",[13,14,15,16,17,18,19,20,21],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架","音频","ready",{"id":24,"name":25,"github_repo":26,"description_zh":27,"stars":28,"difficulty_score":29,"last_commit_at":30,"category_tags":31,"status":22},2181,"OpenHands","OpenHands\u002FOpenHands","OpenHands 是一个专注于 AI 驱动开发的开源平台，旨在让智能体（Agent）像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点，通过自动化流程显著提升开发速度。\n\n无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员，还是需要快速原型验证的技术团队，都能从中受益。OpenHands 提供了灵活多样的使用方式：既可以通过命令行（CLI）或本地图形界面在个人电脑上轻松上手，体验类似 Devin 的流畅交互；也能利用其强大的 Python SDK 自定义智能体逻辑，甚至在云端大规模部署上千个智能体并行工作。\n\n其核心技术亮点在于模块化的软件智能体 SDK，这不仅构成了平台的引擎，还支持高度可组合的开发模式。此外，OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩，证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能，支持与 Slack、Jira 等工具集成，并提供细粒度的权限管理，适合从个人开发者到大型企业的各类用户场景。",70612,3,"2026-04-05T11:12:22",[19,17,20,16],{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":10,"last_commit_at":38,"category_tags":39,"status":22},3074,"gpt4free","xtekky\u002Fgpt4free","gpt4free 是一个由社区驱动的开源项目，旨在聚合多种可访问的大型语言模型（LLM）和媒体生成接口，让用户能更灵活、便捷地使用前沿 AI 能力。它解决了直接调用各类模型时面临的接口分散、门槛高或成本昂贵等痛点，通过统一的标准将不同提供商的资源整合在一起。\n\n无论是希望快速集成 AI 功能的开发者、需要多模型对比测试的研究人员，还是想免费体验最新技术的普通用户，都能从中受益。gpt4free 提供了丰富的使用方式：既包含易于上手的 Python 和 JavaScript 客户端库，也支持部署本地图形界面（GUI），更提供了兼容 OpenAI 标准的 REST API，方便无缝替换现有应用后端。\n\n其技术亮点在于强大的多提供商支持架构，能够动态调度包括 Opus、Gemini、DeepSeek 等多种主流模型资源，并支持 Docker 一键部署及本地推理。项目秉持社区优先原则，在降低使用门槛的同时，也为贡献者提供了扩展新接口的便利框架，是探索和利用多样化 AI 资源的实用工具。",65970,"2026-04-04T01:02:03",[16,19,17],{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":22},51,"gstack","garrytan\u002Fgstack","gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置，旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战，gstack 提供了一套标准化解决方案，帮助开发者实现堪比二十人团队的高效产出。\n\n这套配置特别适合希望提升交付效率的创始人、技术负责人，以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具，涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令（如 `\u002Freview` 进行代码审查、`\u002Fqa` 执行测试、`\u002Fplan-ceo-review` 规划功能），即可自动化处理从需求分析到部署上线的全链路任务。\n\n所有操作基于 Markdown 和斜杠命令，无需复杂配置，完全免费且遵循 MIT 协议。gstack 不仅是一套工具集，更是一种现代化的软件工厂实践，让单人开发者也能拥有严谨的工程流程。",64604,"2026-04-05T23:10:16",[17,16],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":22},193,"meilisearch","meilisearch\u002Fmeilisearch","Meilisearch 是一个开源的极速搜索服务，专为现代应用和网站打造，开箱即用。它能帮助开发者快速集成高质量的搜索功能，无需复杂的配置或额外的数据预处理。传统搜索方案往往需要大量调优才能实现准确结果，而 Meilisearch 内置了拼写容错、同义词识别、即时响应等实用特性，并支持 AI 驱动的混合搜索（结合关键词与语义理解），显著提升用户查找信息的体验。\n\nMeilisearch 特别适合 Web 开发者、产品团队或初创公司使用，尤其适用于需要快速上线搜索功能的场景，如电商网站、内容平台或 SaaS 应用。它提供简洁的 RESTful API 和多种语言 SDK，部署简单，资源占用低，本地开发或生产环境均可轻松运行。对于希望在不依赖大型云服务的前提下，为用户提供流畅、智能搜索体验的团队来说，Meilisearch 是一个高效且友好的选择。",56972,"2026-04-05T22:34:33",[13,17,14,20,16,18],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":22},4022,"awesome-claude-skills","ComposioHQ\u002Fawesome-claude-skills","awesome-claude-skills 是一个精心整理的开源资源库，旨在帮助用户挖掘和扩展 Claude AI 的潜力。它不仅仅是一份列表，更提供了实用的“技能（Skills）”模块，让 Claude 从单纯的文本生成助手，进化为能执行复杂工作流的智能代理。\n\n许多用户在使用 AI 时，常受限于其无法直接操作外部软件或处理特定格式文件的痛点。awesome-claude-skills 通过预设的工作流解决了这一问题：它不仅能教会 Claude 专业地处理 Word、PDF 等文档，进行代码开发与数据分析，还能借助 Composio 插件连接 Slack、邮箱及数百种常用应用，实现发送邮件、创建任务等自动化操作。这使得重复性任务变得标准化且可复用，极大提升了工作效率。\n\n无论是希望优化日常办公流程的普通用户、需要处理复杂文档的研究人员，还是寻求将 AI 深度集成到开发管线中的开发者，都能从中找到适合的解决方案。其独特的技术亮点在于“技能”的可定制性与强大的应用连接能力，让用户无需编写复杂代码，即可通过简单的配置让 Claude 具备跨平台执行真实任务的能力。如果你希望让 Claude",51312,"2026-04-05T19:04:23",[17,16],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":78,"owner_twitter":78,"owner_website":78,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":10,"env_os":94,"env_gpu":94,"env_ram":94,"env_deps":95,"category_tags":98,"github_topics":99,"view_count":105,"oss_zip_url":78,"oss_zip_packed_at":78,"status":22,"created_at":106,"updated_at":107,"faqs":108,"releases":137},466,"sparfenyuk\u002Fmcp-proxy","mcp-proxy","A bridge between Streamable HTTP and stdio MCP transports","mcp-proxy 是一个用于在不同通信协议之间搭建桥梁的轻量级工具，主要解决客户端与服务器之间因传输协议不兼容导致的连接问题。它支持两种核心模式：将标准输入输出（stdio）转换为可流式传输的 HTTP\u002FSSE 协议，或将 SSE 流式数据转换回 stdio 格式。这种双向转换能力让原本仅支持命令行交互的程序能通过现代 Web 技术（如 Server-Sent Events）与远程服务通信，反之亦然。\n\n对于需要对接旧系统与新接口的开发者或研究人员来说，这个工具特别实用。例如当本地开发的 CLI 工具需要接入基于 SSE 的云端服务时，mcp-proxy 可以自动处理协议适配、身份验证（支持 OAuth2 认证）和数据格式转换。其技术亮点在于对 Streamable HTTP 和 SSE 两种流式传输协议的深度兼容，以及通过环境变量和命令行参数实现的灵活配置。\n\n工具提供多种部署方式（Python 包、Docker 容器、GitHub 源码），既适合嵌入到自动化流程中，也能作为独立服务运行。典型应用场景包括构建桌面客户端与云端 AI 模型的通信链路、测试混合架构系统的协议兼容性等。","# mcp-proxy\n\n![GitHub License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fsparfenyuk\u002Fmcp-proxy)\n![PyPI - Python Version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fmcp-proxy)\n![PyPI - Downloads](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fmcp-proxy)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fsparfenyuk\u002Fmcp-proxy\u002Fgraph\u002Fbadge.svg?token=31VV9L7AZQ)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fsparfenyuk\u002Fmcp-proxy)\n\n- [mcp-proxy](#mcp-proxy)\n  - [About](#about)\n  - [1. stdio to SSE\u002FStreamableHTTP](#1-stdio-to-ssestreamablehttp)\n    - [1.1 Configuration](#11-configuration)\n    - [1.2 Example usage](#12-example-usage)\n  - [2. SSE to stdio](#2-sse-to-stdio)\n    - [2.1 Configuration](#21-configuration)\n    - [2.2 Example usage](#22-example-usage)\n  - [Named Servers](#named-servers)\n  - [Installation](#installation)\n    - [Installing via PyPI](#installing-via-pypi)\n    - [Installing via Github repository (latest)](#installing-via-github-repository-latest)\n    - [Installing as container](#installing-as-container)\n    - [Troubleshooting](#troubleshooting)\n  - [Extending the container image](#extending-the-container-image)\n  - [Docker Compose Setup](#docker-compose-setup)\n  - [Command line arguments](#command-line-arguments)\n    - [Example config file](#example-config-file)\n  - [Testing](#testing)\n\n## About\n\nThe `mcp-proxy` is a tool that lets you switch between server transports. There are two supported modes:\n\n1. stdio to SSE\u002FStreamableHTTP\n2. SSE to stdio\n\n## 1. stdio to SSE\u002FStreamableHTTP\n\nRun a proxy server from stdio that connects to a remote SSE server.\n\nThis mode allows clients like Claude Desktop to communicate to a remote server over SSE even though it is not supported\nnatively.\n\n```mermaid\ngraph LR\n    A[\"Claude Desktop\"] \u003C--> |stdio| B[\"mcp-proxy\"]\n    B \u003C--> |SSE| C[\"External MCP Server\"]\n\n    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px\n    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px\n    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px\n```\n\n### 1.1 Configuration\n\nThis mode requires providing the URL of the MCP Server's SSE endpoint as the program’s first argument. If the server uses Streamable HTTP transport, make sure to enforce it on the `mcp-proxy` side by passing `--transport=streamablehttp`.\n\nArguments\n\n| Name             | Required | Description                                                                                                       | Example                                       |\n| ---------------- | -------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |\n| `command_or_url` | Yes      | The MCP server SSE endpoint to connect to                                                                         | http:\u002F\u002Fexample.io\u002Fsse                         |\n| `--headers`      | No       | Headers to use for the MCP server SSE connection                                                                  | Authorization 'Bearer my-secret-access-token' |\n| `--transport`    | No       | Decides which transport protocol to use when connecting to an MCP server. Can be either 'sse' or 'streamablehttp' | streamablehttp                                |\n| `--client-id`    | No       | OAuth2 client ID for authentication                                                                               | your_client_id                                |\n| `--client-secret`| No       | OAuth2 client secret for authentication                                                                           | your_client_secret                            |\n| `--token-url`    | No       | OAuth2 token endpoint URL for authentication                                                                      | https:\u002F\u002Fauth.example.com\u002Foauth\u002Ftoken          |\n\nEnvironment Variables\n\n| Name               | Required | Description                                                                  | Example    |\n| ------------------ | -------- | ---------------------------------------------------------------------------- | ---------- |\n| `API_ACCESS_TOKEN` | No       | Can be used instead of `--headers Authorization 'Bearer \u003CAPI_ACCESS_TOKEN>'` | YOUR_TOKEN |\n\n### 1.2 Example usage\n\n`mcp-proxy` is supposed to be started by the MCP Client, so the configuration must be done accordingly.\n\nFor Claude Desktop, the configuration entry can look like this:\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-proxy\": {\n      \"command\": \"mcp-proxy\",\n      \"args\": [\n        \"http:\u002F\u002Fexample.io\u002Fsse\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"access-token\"\n      }\n    }\n  }\n}\n```\n\n## 2. SSE to stdio\n\nRun a proxy server exposing a SSE server that connects to a local stdio server.\n\nThis allows remote connections to the local stdio server. The `mcp-proxy` opens a port to listen for SSE requests,\nspawns a local stdio server that handles MCP requests.\n\n```mermaid\ngraph LR\n    A[\"LLM Client\"] \u003C-->|SSE| B[\"mcp-proxy\"]\n    B \u003C-->|stdio| C[\"Local MCP Server\"]\n\n    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px\n    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px\n    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px\n```\n\n### 2.1 Configuration\n\nThis mode requires the `--sse-port` argument to be set. The `--sse-host` argument can be set to specify the host IP\naddress that the SSE server will listen on. Additional environment variables can be passed to the local stdio server\nusing the `--env` argument. The command line arguments for the local stdio server must be passed after the `--`\nseparator.\n\nArguments\n\n| Name                                 | Required                   | Description                                                                                   | Example                                     |\n| ------------------------------------ | -------------------------- | --------------------------------------------------------------------------------------------- | ------------------------------------------- |\n| `command_or_url`                     | Yes                        | The command to spawn the MCP stdio server                                                     | uvx mcp-server-fetch                        |\n| `--port`                             | No, random available       | The MCP server port to listen on                                                              | 8080                                        |\n| `--host`                             | No, `127.0.0.1` by default | The host IP address that the MCP server will listen on                                        | 0.0.0.0                                     |\n| `--env`                              | No                         | Additional environment variables to pass to the MCP stdio server. Can be used multiple times. | FOO BAR                                     |\n| `--cwd`                              | No                         | The working directory to pass to the MCP stdio server process.                                | \u002Ftmp                                        |\n| `--pass-environment`                 | No                         | Pass through all environment variables when spawning the server                               | --no-pass-environment                       |\n| `--allow-origin`                     | No                         | Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed.   | --allow-origin \"\\*\"                         |\n| `--expose-header`                    | No                         | Headers added to `Access-Control-Expose-Headers`. Can be used multiple times. Defaults to `mcp-session-id`. | --expose-header Custom-Header              |\n| `--stateless`                        | No                         | Enable stateless mode for streamable http transports. Default is False                        | --no-stateless                              |\n| `--named-server NAME COMMAND_STRING` | No                         | Defines a named stdio server.                                                                 | --named-server fetch 'uvx mcp-server-fetch' |\n| `--named-server-config FILE_PATH`    | No                         | Path to a JSON file defining named stdio servers.                                             | --named-server-config \u002Fpath\u002Fto\u002Fservers.json |\n| `--sse-port` (deprecated)            | No, random available       | The SSE server port to listen on                                                              | 8080                                        |\n| `--sse-host` (deprecated)            | No, `127.0.0.1` by default | The host IP address that the SSE server will listen on                                        | 0.0.0.0                                     |\n\n### 2.2 Example usage\n\nTo start the `mcp-proxy` server that listens on port 8080 and connects to the local MCP server:\n\n```bash\n# Start the MCP server behind the proxy\nmcp-proxy uvx mcp-server-fetch\n\n# Start the MCP server behind the proxy with a custom port\n# (deprecated) mcp-proxy --sse-port=8080 uvx mcp-server-fetch\nmcp-proxy --port=8080 uvx mcp-server-fetch\n\n# Start the MCP server behind the proxy with a custom host and port\n# (deprecated) mcp-proxy --sse-host=0.0.0.0 --sse-port=8080 uvx mcp-server-fetch\nmcp-proxy --host=0.0.0.0 --port=8080 uvx mcp-server-fetch\n\n# Start the MCP server behind the proxy with a custom user agent\n# Note that the `--` separator is used to separate the `mcp-proxy` arguments from the `mcp-server-fetch` arguments\n# (deprecated) mcp-proxy --sse-port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent\nmcp-proxy --port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent\n\n# Start multiple named MCP servers behind the proxy\nmcp-proxy --port=8080 --named-server fetch 'uvx mcp-server-fetch' --named-server fetch2 'uvx mcp-server-fetch'\n\n# Start multiple named MCP servers using a configuration file\nmcp-proxy --port=8080 --named-server-config .\u002Fservers.json\n\n# Start the MCP server with CORS enabled and custom exposed headers\nmcp-proxy --port=8080 --allow-origin='*' --expose-header Custom-Header uvx mcp-server-fetch\n```\n\n## Named Servers\n\n- `NAME` is used in the URL path `\u002Fservers\u002FNAME\u002F`.\n- `COMMAND_STRING` is the command to start the server (e.g., 'uvx mcp-server-fetch').\n  - Can be used multiple times.\n  - This argument is ignored if `--named-server-config` is used.\n- `FILE_PATH` - If provided, this is the exclusive source for named servers, and `--named-server` CLI arguments are ignored.\n\nIf a default server is specified (the `command_or_url` argument without `--named-server` or `--named-server-config`), it will be accessible at the root paths (e.g., `http:\u002F\u002F127.0.0.1:8080\u002Fsse`).\n\nNamed servers (whether defined by `--named-server` or `--named-server-config`) will be accessible under `\u002Fservers\u002F\u003Cserver-name>\u002F` (e.g., `http:\u002F\u002F127.0.0.1:8080\u002Fservers\u002Ffetch1\u002Fsse`).\nThe `\u002Fstatus` endpoint provides global status.\n\n**JSON Configuration File Format for `--named-server-config`:**\n\nThe JSON file should follow this structure:\n\n```json\n{\n  \"mcpServers\": {\n    \"fetch\": {\n      \"disabled\": false,\n      \"timeout\": 60,\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-server-fetch\"\n      ],\n      \"transportType\": \"stdio\"\n    },\n    \"github\": {\n      \"timeout\": 60,\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@modelcontextprotocol\u002Fserver-github\"\n      ],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"\u003CYOUR_TOKEN>\"\n      },\n      \"transportType\": \"stdio\"\n    }\n  }\n}\n```\n\n- `mcpServers`: A dictionary where each key is the server name (used in the URL path, e.g., `\u002Fservers\u002Ffetch\u002F`) and the value is an object defining the server.\n- `command`: (Required) The command to execute for the stdio server.\n- `args`: (Optional) A list of arguments for the command. Defaults to an empty list.\n- `enabled`: (Optional) If `false`, this server definition will be skipped. Defaults to `true`.\n- `timeout` and `transportType`: These fields are present in standard MCP client configurations but are currently **ignored** by `mcp-proxy` when loading named servers. The transport type is implicitly \"stdio\".\n\n## Installation\n\n### Installing via PyPI\n\nThe stable version of the package is available on the PyPI repository. You can install it using the following command:\n\n```bash\n# Option 1: With uv (recommended)\nuv tool install mcp-proxy\n\n# Option 2: With pipx (alternative)\npipx install mcp-proxy\n```\n\nOnce installed, you can run the server using the `mcp-proxy` command. See configuration options for each mode above.\n\n### Installing via Github repository (latest)\n\nThe latest version of the package can be installed from the git repository using the following command:\n\n```bash\nuv tool install git+https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\n```\n\n> [!NOTE]\n> If you have already installed the server, you can update it using `uv tool upgrade --reinstall` command.\n\n> [!NOTE]\n> If you want to delete the server, use the `uv tool uninstall mcp-proxy` command.\n\n### Installing as container\n\nStarting from version 0.3.2, it's possible to pull and run the corresponding container image:\n\n```bash\ndocker run --rm -t ghcr.io\u002Fsparfenyuk\u002Fmcp-proxy:v0.3.2-alpine --help\n```\n\n### Troubleshooting\n\n- **Problem**: Claude Desktop can't start the server: ENOENT code in the logs\n\n  **Solution**: Try to use the full path to the binary. To do so, open a terminal and run the command`which mcp-proxy` (\n  macOS, Linux) or `where.exe mcp-proxy` (Windows). Then, use the output path as a value for 'command' attribute:\n  ```json\n    \"fetch\": {\n      \"command\": \"\u002Ffull\u002Fpath\u002Fto\u002Fbin\u002Fmcp-proxy\",\n      \"args\": [\n        \"http:\u002F\u002Flocalhost:8932\u002Fsse\"\n      ]\n    }\n  ```\n\n## Extending the container image\n\nYou can extend the `mcp-proxy` container image to include additional executables. For instance, `uv` is not included by\ndefault, but you can create a custom image with it:\n\n```Dockerfile\n# file: mcp-proxy.Dockerfile\n\nFROM ghcr.io\u002Fsparfenyuk\u002Fmcp-proxy:latest\n\n# Install the 'uv' package\nRUN python3 -m ensurepip && pip install --no-cache-dir uv\n\nENV PATH=\"\u002Fusr\u002Flocal\u002Fbin:$PATH\" \\\n    UV_PYTHON_PREFERENCE=only-system\n\nENTRYPOINT [\"catatonit\", \"--\", \"mcp-proxy\"]\n```\n\n## Docker Compose Setup\n\nWith the custom Dockerfile, you can define a service in your Docker Compose file:\n\n```yaml\nservices:\n  mcp-proxy-custom:\n    build:\n      context: .\n      dockerfile: mcp-proxy.Dockerfile\n    network_mode: host\n    restart: unless-stopped\n    ports:\n      - 8096:8096\n    command: \"--pass-environment --port=8096 --sse-host 0.0.0.0 uvx mcp-server-fetch\"\n```\n\n> [!NOTE]\n> Don't forget to set `--pass-environment` argument, otherwise you'll end up with the error \"No interpreter found in\n> managed installations or search path\"\n\n## Command line arguments\n\n```bash\nusage: mcp-proxy [-h] [--version] [-H KEY VALUE]\n                 [--transport {sse,streamablehttp}] [--verify-ssl [VALUE]]\n                 [--no-verify-ssl] [-e KEY VALUE] [--cwd CWD]\n                 [--client-id CLIENT_ID] [--client-secret CLIENT_SECRET] [--token-url TOKEN_URL]\n                 [--pass-environment | --no-pass-environment]\n                 [--log-level LEVEL] [--debug | --no-debug]\n                 [--named-server NAME COMMAND_STRING]\n                 [--named-server-config FILE_PATH] [--port PORT] [--host HOST]\n                 [--stateless | --no-stateless] [--sse-port SSE_PORT]\n                 [--sse-host SSE_HOST]\n                 [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]]\n                 [--expose-header HEADER]\n                 [command_or_url] [args ...]\n\nStart the MCP proxy in one of two possible modes: as a client or a server.\n\npositional arguments:\n  command_or_url        Command or URL to connect to. When a URL, will run an SSE\u002FStreamableHTTP client. Otherwise, if --named-server is not used, this will be the command for the default stdio client. If --named-server is used, this argument is ignored for stdio mode unless no default server is desired. See corresponding options for more details.\n\noptions:\n  -h, --help            show this help message and exit\n  --version             Show the version and exit\n\nSSE\u002FStreamableHTTP client options:\n  -H, --headers KEY VALUE\n                        Headers to pass to the SSE server. Can be used multiple times.\n  --transport {sse,streamablehttp}\n                        The transport to use for the client. Default is SSE.\n  --verify-ssl [VALUE]  Control SSL verification when acting as a client. Use without a value to force verification, pass 'false' to disable, or provide a path to a PEM bundle.\n  --no-verify-ssl       Disable SSL verification (alias for --verify-ssl false).\n  --client-id CLIENT_ID\n                        OAuth2 client ID for authentication\n  --client-secret CLIENT_SECRET\n                        OAuth2 client secret for authentication\n  --token-url TOKEN_URL\n                        OAuth2 token URL for authentication\n\nstdio client options:\n  args                  Any extra arguments to the command to spawn the default server. Ignored if only named servers are defined.\n  -e, --env KEY VALUE   Environment variables used when spawning the default server. Can be used multiple times. For named servers, environment is inherited or passed via --pass-environment.\n  --cwd CWD             The working directory to use when spawning the default server process. Named servers inherit the proxy's CWD.\n  --pass-environment, --no-pass-environment\n                        Pass through all environment variables when spawning all server processes.\n  --log-level LEVEL     Set the log level. Default is INFO.\n  --debug, --no-debug   Enable debug mode with detailed logging output. Equivalent to --log-level DEBUG. If both --debug and --log-level are provided, --debug takes precedence.\n  --named-server NAME COMMAND_STRING\n                        Define a named stdio server. NAME is for the URL path \u002Fservers\u002FNAME\u002F. COMMAND_STRING is a single string with the command and its arguments (e.g., 'uvx mcp-server-fetch --timeout 10'). These servers inherit the proxy's CWD and environment from --pass-environment.\n  --named-server-config FILE_PATH\n                        Path to a JSON configuration file for named stdio servers. If provided, this will be the exclusive source for named server definitions, and any --named-server CLI arguments will be ignored.\n\nSSE server options:\n  --port PORT           Port to expose an SSE server on. Default is a random port\n  --host HOST           Host to expose an SSE server on. Default is 127.0.0.1\n  --stateless, --no-stateless\n                        Enable stateless mode for streamable http transports. Default is False\n  --sse-port SSE_PORT   (deprecated) Same as --port\n  --sse-host SSE_HOST   (deprecated) Same as --host\n  --allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]\n                        Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed.\n  --expose-header HEADER\n                        Headers to expose via Access-Control-Expose-Headers. Defaults to 'Mcp-Session-Id'. Can be used multiple times.\n\nExamples:\n  mcp-proxy http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --no-verify-ssl https:\u002F\u002Fserver.local\u002Fsse\n  mcp-proxy --transport streamablehttp http:\u002F\u002Flocalhost:8080\u002Fmcp\n  mcp-proxy --headers Authorization 'Bearer YOUR_TOKEN' http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --client-id CLIENT_ID --client-secret CLIENT_SECRET --token-url https:\u002F\u002Fauth.example.com\u002Ftoken http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --port 8080 -- your-command --arg1 value1 --arg2 value2\n  mcp-proxy --named-server fetch 'uvx mcp-server-fetch' --port 8080\n  mcp-proxy your-command --port 8080 -e KEY VALUE -e ANOTHER_KEY ANOTHER_VALUE\n  mcp-proxy your-command --port 8080 --allow-origin='*'\n  mcp-proxy your-command --port 8080 --allow-origin='*' --expose-header Custom-Header\n```\n\n### Example config file\n\n```json\n{\n  \"mcpServers\": {\n    \"fetch\": {\n      \"enabled\": true,\n      \"timeout\": 60,\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-server-fetch\"\n      ],\n      \"transportType\": \"stdio\"\n    },\n    \"github\": {\n      \"timeout\": 60,\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@modelcontextprotocol\u002Fserver-github\"\n      ],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"\u003CYOUR_TOKEN>\"\n      },\n      \"transportType\": \"stdio\"\n    }\n  }\n}\n```\n\n## Testing\n\nCheck the `mcp-proxy` server by running it with the `mcp-server-fetch` server. You can use\nthe [inspector tool](https:\u002F\u002Fmodelcontextprotocol.io\u002Fdocs\u002Ftools\u002Finspector) to test the target server.\n\n```bash\n# Run the stdio server called mcp-server-fetch behind the proxy over SSE\nmcp-proxy --port=8080 uvx mcp-server-fetch &\n\n# Connect to the SSE proxy server spawned above using another instance of mcp-proxy given the URL of the SSE server\nmcp-proxy http:\u002F\u002F127.0.0.1:8080\u002Fsse\n\n# Send CTRL+C to stop the second server\n\n# Bring the first server to the foreground\nfg\n\n# Send CTRL+C to stop the first server\n```\n","# mcp-proxy\n\n![GitHub License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fsparfenyuk\u002Fmcp-proxy)\n![PyPI - Python Version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fmcp-proxy)\n![PyPI - Downloads](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fmcp-proxy)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fsparfenyuk\u002Fmcp-proxy\u002Fgraph\u002Fbadge.svg?token=31VV9L7AZQ)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fsparfenyuk\u002Fmcp-proxy)\n\n- [mcp-proxy](#mcp-proxy)\n  - [关于](#about)\n  - [1. stdio 转 SSE\u002FStreamableHTTP](#1-stdio-to-ssestreamablehttp)\n    - [1.1 配置](#11-configuration)\n    - [1.2 使用示例](#12-example-usage)\n  - [2. SSE 转 stdio](#2-sse-to-stdio)\n    - [2.1 配置](#21-configuration)\n    - [2.2 使用示例](#22-example-usage)\n  - [命名服务器](#named-servers)\n  - [安装](#installation)\n    - [通过 PyPI 安装](#installing-via-pypi)\n    - [通过 Github 仓库安装（最新版）](#installing-via-github-repository-latest)\n    - [作为容器安装](#installing-as-container)\n    - [故障排除](#troubleshooting)\n  - [扩展容器镜像](#extending-the-container-image)\n  - [Docker Compose 设置](#docker-compose-setup)\n  - [命令行参数](#command-line-arguments)\n    - [示例配置文件](#example-config-file)\n  - [测试](#testing)\n\n## 关于\n\n`mcp-proxy` 是一个允许你在服务器传输协议之间切换的工具。支持两种模式：\n\n1. stdio 转 SSE\u002FStreamableHTTP\n2. SSE 转 stdio\n\n## 1. stdio 转 SSE\u002FStreamableHTTP\n\n运行一个从 stdio（标准输入输出）连接到远程 SSE（Server-Sent Events）服务器的代理服务器。\n\n此模式允许像 Claude Desktop 这样的客户端通过 SSE 与远程服务器通信，即使它不是原生支持的。\n\n```mermaid\ngraph LR\n    A[\"Claude Desktop\"] \u003C--> |stdio| B[\"mcp-proxy\"]\n    B \u003C--> |SSE| C[\"External MCP Server\"]\n\n    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px\n    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px\n    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px\n```\n\n### 1.1 配置\n\n此模式需要提供 MCP 服务器的 SSE 端点 URL 作为程序的第一个参数。如果服务器使用 Streamable HTTP 传输，请确保通过在 `mcp-proxy` 端传递 `--transport=streamablehttp` 来强制执行它。\n\n参数\n\n| 名称             | 必需 | 描述                                                                                                       | 示例                                       |\n| ---------------- | -------- | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------- |\n| `command_or_url` | 是      | 要连接的 MCP 服务器 SSE 端点                                                                         | http:\u002F\u002Fexample.io\u002Fsse                         |\n| `--headers`      | 否       | 用于 MCP 服务器 SSE 连接的头部                                                                  | Authorization 'Bearer my-secret-access-token' |\n| `--transport`    | 否       | 决定连接 MCP 服务器时使用哪种传输协议。可以是 'sse' 或 'streamablehttp' | streamablehttp                                |\n| `--client-id`    | 否       | 用于认证的 OAuth2 客户端 ID                                                                               | your_client_id                                |\n| `--client-secret`| 否       | 用于认证的 OAuth2 客户端密钥                                                                           | your_client_secret                            |\n| `--token-url`    | 否       | 用于认证的 OAuth2 Token 端点 URL                                                                      | https:\u002F\u002Fauth.example.com\u002Foauth\u002Ftoken          |\n\n环境变量\n\n| 名称               | 必需 | 描述                                                                  | 示例    |\n| ------------------ | -------- | ---------------------------------------------------------------------------- | ---------- |\n| `API_ACCESS_TOKEN` | 否       | 可用作 `--headers Authorization 'Bearer \u003CAPI_ACCESS_TOKEN>'` 的替代方案 | YOUR_TOKEN |\n\n### 1.2 使用示例\n\n`mcp-proxy` 应由 MCP 客户端启动，因此配置必须相应地进行。\n\n对于 Claude Desktop，配置项可以如下所示：\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-proxy\": {\n      \"command\": \"mcp-proxy\",\n      \"args\": [\n        \"http:\u002F\u002Fexample.io\u002Fsse\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"access-token\"\n      }\n    }\n  }\n}\n```\n\n## 2. SSE 转 stdio\n\n运行一个代理服务器，暴露一个 SSE 服务器以连接到本地 stdio 服务器。\n\n这允许远程连接到本地 stdio 服务器。`mcp-proxy` 打开一个端口以监听 SSE 请求，并启动一个处理 MCP 请求的本地 stdio 服务器。\n\n```mermaid\ngraph LR\n    A[\"LLM Client\"] \u003C-->|SSE| B[\"mcp-proxy\"]\n    B \u003C-->|stdio| C[\"Local MCP Server\"]\n\n    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px\n    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px\n    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px\n```\n\n### 2.1 配置\n\n此模式需要设置 `--sse-port` 参数。可以设置 `--sse-host` 参数来指定 SSE (Server-Sent Events) 服务器将监听的主机 IP 地址。可以使用 `--env` 参数向本地 stdio (标准输入\u002F输出) 服务器传递额外的环境变量。本地 stdio 服务器的命令行参数必须在 `--` 分隔符之后传递。\n\n参数\n\n| 名称                                 | 必需                   | 描述                                                                                   | 示例                                     |\n| ------------------------------------ | ---------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------ |\n| `command_or_url`                     | 是                     | 启动 MCP (Model Context Protocol) stdio 服务器的命令                                   | uvx mcp-server-fetch                       |\n| `--port`                             | 否，随机可用           | MCP 服务器监听的端口                                                                   | 8080                                       |\n| `--host`                             | 否，默认为 `127.0.0.1` | MCP 服务器将监听的主机 IP 地址                                                         | 0.0.0.0                                    |\n| `--env`                              | 否                     | 传递给 MCP stdio 服务器的额外环境变量。可多次使用。                                    | FOO BAR                                    |\n| `--cwd`                              | 否                     | 传递给 MCP stdio 服务器进程的工作目录。                                                | \u002Ftmp                                       |\n| `--pass-environment`                 | 否                     | 启动服务器时透传所有环境变量                                                           | --no-pass-environment                      |\n| `--allow-origin`                     | 否                     | SSE 服务器允许的源。可多次使用。默认不允许 CORS (跨域资源共享)。                       | --allow-origin \"\\*\"                        |\n| `--expose-header`                    | 否                     | 添加到 `Access-Control-Expose-Headers` 的头部。可多次使用。默认为 `mcp-session-id`。     | --expose-header Custom-Header              |\n| `--stateless`                        | 否                     | 启用流式 HTTP (超文本传输协议) 传输的无状态模式。默认为 False                          | --no-stateless                             |\n| `--named-server NAME COMMAND_STRING` | 否                     | 定义一个命名的 stdio 服务器。                                                          | --named-server fetch 'uvx mcp-server-fetch' |\n| `--named-server-config FILE_PATH`    | 否                     | 定义命名 stdio 服务器的 JSON (JavaScript 对象表示法) 文件路径。                         | --named-server-config \u002Fpath\u002Fto\u002Fservers.json |\n| `--sse-port` (已弃用)                | 否，随机可用           | SSE 服务器监听的端口                                                                   | 8080                                       |\n| `--sse-host` (已弃用)                | 否，默认为 `127.0.0.1` | SSE 服务器将监听的主机 IP 地址                                                         | 0.0.0.0                                    |\n\n### 2.2 使用示例\n\n要启动在 8080 端口监听并连接到本地 MCP 服务器的 `mcp-proxy` 服务器：\n\n```bash\n# 启动代理后面的 MCP 服务器\nmcp-proxy uvx mcp-server-fetch\n\n# 以自定义端口启动代理后面的 MCP 服务器\n# (已弃用) mcp-proxy --sse-port=8080 uvx mcp-server-fetch\nmcp-proxy --port=8080 uvx mcp-server-fetch\n\n# 以自定义主机和端口启动代理后面的 MCP 服务器\n# (已弃用) mcp-proxy --sse-host=0.0.0.0 --sse-port=8080 uvx mcp-server-fetch\nmcp-proxy --host=0.0.0.0 --port=8080 uvx mcp-server-fetch\n\n# 以自定义用户代理启动代理后面的 MCP 服务器\n# 注意：使用 `--` 分隔符来分隔 `mcp-proxy` 参数和 `mcp-server-fetch` 参数\n# (已弃用) mcp-proxy --sse-port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent\nmcp-proxy --port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent\n\n# 在代理后面启动多个命名的 MCP 服务器\nmcp-proxy --port=8080 --named-server fetch 'uvx mcp-server-fetch' --named-server fetch2 'uvx mcp-server-fetch'\n\n# 使用配置文件在代理后面启动多个命名的 MCP 服务器\nmcp-proxy --port=8080 --named-server-config .\u002Fservers.json\n\n# 启用 CORS 和自定义暴露头启动 MCP 服务器\nmcp-proxy --port=8080 --allow-origin='*' --expose-header Custom-Header uvx mcp-server-fetch\n```\n\n## 命名服务器\n\n- `NAME` 用于 URL (统一资源定位符) 路径 `\u002Fservers\u002FNAME\u002F` 中。\n- `COMMAND_STRING` 是启动服务器的命令（例如 'uvx mcp-server-fetch'）。\n  - 可多次使用。\n  - 如果使用 `--named-server-config`，此参数将被忽略。\n- `FILE_PATH` - 如果提供，这是命名服务器的唯一来源，`--named-server` CLI (命令行界面) 参数将被忽略。\n\n如果指定了默认服务器（即不带 `--named-server` 或 `--named-server-config` 的 `command_or_url` 参数），它将在根路径下可访问（例如 `http:\u002F\u002F127.0.0.1:8080\u002Fsse`）。\n\n命名服务器（无论是通过 `--named-server` 还是 `--named-server-config` 定义）将在 `\u002Fservers\u002F\u003Cserver-name>\u002F` 下可访问（例如 `http:\u002F\u002F127.0.0.1:8080\u002Fservers\u002Ffetch1\u002Fsse`）。`\u002Fstatus` 端点提供全局状态。\n\n**`--named-server-config` 的 JSON (JavaScript 对象表示法) 配置文件格式：**\n\nJSON 文件应遵循以下结构：\n\n```json\n{\n  \"mcpServers\": {\n    \"fetch\": {\n      \"disabled\": false,\n      \"timeout\": 60,\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-server-fetch\"\n      ],\n      \"transportType\": \"stdio\"\n    },\n    \"github\": {\n      \"timeout\": 60,\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@modelcontextprotocol\u002Fserver-github\"\n      ],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"\u003CYOUR_TOKEN>\"\n      },\n      \"transportType\": \"stdio\"\n    }\n  }\n}\n```\n\n- `mcpServers`: 字典，其中每个键是服务器名称（用于 URL 路径，例如 `\u002Fservers\u002Ffetch\u002F`），值是一个定义服务器的对象。\n- `command`: （必需）用于执行 stdio 服务器的命令。\n- `args`: （可选）命令的参数列表。默认为空列表。\n- `enabled`: （可选）如果为 `false`，将跳过此服务器定义。默认为 `true`。\n- `timeout` 和 `transportType`：这些字段存在于标准的 MCP (Model Context Protocol) 客户端配置中，但在加载命名服务器时目前被 `mcp-proxy` **忽略**。传输类型隐式为 \"stdio\"。\n\n## 安装\n\n### 通过 PyPI 安装\n\n该包的稳定版本可在 PyPI (Python 包索引) 仓库获取。您可以使用以下命令进行安装：\n\n```bash\n# Option 1: With uv (recommended)\nuv tool install mcp-proxy\n\n# Option 2: With pipx (alternative)\npipx install mcp-proxy\n```\n\n安装完成后，您可以使用 `mcp-proxy` 命令运行服务器。请参阅上文各模式的配置选项。\n\n### 通过 GitHub 仓库安装（最新版本）\n\n您可以通过以下命令从 Git (版本控制系统) 仓库安装该包的最新版本：\n\n```bash\nuv tool install git+https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\n```\n\n> [!NOTE]\n> 如果您已经安装了服务器，可以使用 `uv tool upgrade --reinstall` 命令进行更新。\n\n> [!NOTE]\n> 如果您想删除服务器，请使用 `uv tool uninstall mcp-proxy` 命令。\n\n### 作为容器安装\n\n从 0.3.2 版本开始，可以拉取并运行相应的容器镜像：\n\n```bash\ndocker run --rm -t ghcr.io\u002Fsparfenyuk\u002Fmcp-proxy:v0.3.2-alpine --help\n```\n\n### 故障排除\n\n- **问题**：Claude Desktop 无法启动服务器：日志中出现 ENOENT (错误代码)\n\n  **解决方案**：尝试使用二进制文件的完整路径。为此，打开终端并运行命令 `which mcp-proxy`（macOS、Linux）或 `where.exe mcp-proxy`（Windows）。然后，将输出路径用作 'command' 属性的值：\n  ```json\n    \"fetch\": {\n      \"command\": \"\u002Ffull\u002Fpath\u002Fto\u002Fbin\u002Fmcp-proxy\",\n      \"args\": [\n        \"http:\u002F\u002Flocalhost:8932\u002Fsse\"\n      ]\n    }\n  ```\n\n## 扩展容器镜像\n\n您可以扩展 `mcp-proxy` 容器镜像以包含额外的可执行文件。例如，默认情况下不包含 `uv`，但您可以创建包含它的自定义镜像：\n\n```Dockerfile\n# file: mcp-proxy.Dockerfile\n\nFROM ghcr.io\u002Fsparfenyuk\u002Fmcp-proxy:latest\n\n# Install the 'uv' package\nRUN python3 -m ensurepip && pip install --no-cache-dir uv\n\nENV PATH=\"\u002Fusr\u002Flocal\u002Fbin:$PATH\" \\\n    UV_PYTHON_PREFERENCE=only-system\n\nENTRYPOINT [\"catatonit\", \"--\", \"mcp-proxy\"]\n```\n\n## Docker Compose 设置\n\n使用自定义 Dockerfile (容器构建文件)，您可以在 Docker Compose (编排工具) 文件中定义一个服务：\n\n```yaml\nservices:\n  mcp-proxy-custom:\n    build:\n      context: .\n      dockerfile: mcp-proxy.Dockerfile\n    network_mode: host\n    restart: unless-stopped\n    ports:\n      - 8096:8096\n    command: \"--pass-environment --port=8096 --sse-host 0.0.0.0 uvx mcp-server-fetch\"\n```\n\n> [!NOTE]\n> 不要忘记设置 `--pass-environment` 参数，否则您将遇到错误“在受管理的安装或搜索路径中未找到解释器”\n\n## 命令行参数\n\n```bash\nusage: mcp-proxy [-h] [--version] [-H KEY VALUE]\n                 [--transport {sse,streamablehttp}] [--verify-ssl [VALUE]]\n                 [--no-verify-ssl] [-e KEY VALUE] [--cwd CWD]\n                 [--client-id CLIENT_ID] [--client-secret CLIENT_SECRET] [--token-url TOKEN_URL]\n                 [--pass-environment | --no-pass-environment]\n                 [--log-level LEVEL] [--debug | --no-debug]\n                 [--named-server NAME COMMAND_STRING]\n                 [--named-server-config FILE_PATH] [--port PORT] [--host HOST]\n                 [--stateless | --no-stateless] [--sse-port SSE_PORT]\n                 [--sse-host SSE_HOST]\n                 [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]]\n                 [--expose-header HEADER]\n                 [command_or_url] [args ...]\n\nStart the MCP proxy in one of two possible modes: as a client or a server.\n\npositional arguments:\n  command_or_url        Command or URL to connect to. When a URL, will run an SSE\u002FStreamableHTTP client. Otherwise, if --named-server is not used, this will be the command for the default stdio client. If --named-server is used, this argument is ignored for stdio mode unless no default server is desired. See corresponding options for more details.\n\noptions:\n  -h, --help            show this help message and exit\n  --version             Show the version and exit\n\nSSE\u002FStreamableHTTP client options:\n  -H, --headers KEY VALUE\n                        Headers to pass to the SSE server. Can be used multiple times.\n  --transport {sse,streamablehttp}\n                        The transport to use for the client. Default is SSE.\n  --verify-ssl [VALUE]  Control SSL verification when acting as a client. Use without a value to force verification, pass 'false' to disable, or provide a path to a PEM bundle.\n  --no-verify-ssl       Disable SSL verification (alias for --verify-ssl false).\n  --client-id CLIENT_ID\n                        OAuth2 client ID for authentication\n  --client-secret CLIENT_SECRET\n                        OAuth2 client secret for authentication\n  --token-url TOKEN_URL\n                        OAuth2 token URL for authentication\n\nstdio client options:\n  args                  Any extra arguments to the command to spawn the default server. Ignored if only named servers are defined.\n  -e, --env KEY VALUE   Environment variables used when spawning the default server. Can be used multiple times. For named servers, environment is inherited or passed via --pass-environment.\n  --cwd CWD             The working directory to use when spawning the default server process. Named servers inherit the proxy's CWD.\n  --pass-environment, --no-pass-environment\n                        Pass through all environment variables when spawning all server processes.\n  --log-level LEVEL     Set the log level. Default is INFO.\n  --debug, --no-debug   Enable debug mode with detailed logging output. Equivalent to --log-level DEBUG. If both --debug and --log-level are provided, --debug takes precedence.\n  --named-server NAME COMMAND_STRING\n                        Define a named stdio server. NAME is for the URL path \u002Fservers\u002FNAME\u002F. COMMAND_STRING is a single string with the command and its arguments (e.g., 'uvx mcp-server-fetch --timeout 10'). These servers inherit the proxy's CWD and environment from --pass-environment.\n  --named-server-config FILE_PATH\n                        Path to a JSON configuration file for named stdio servers. If provided, this will be the exclusive source for named server definitions, and any --named-server CLI arguments will be ignored.\n\nSSE server options:\n  --port PORT           Port to expose an SSE server on. Default is a random port\n  --host HOST           Host to expose an SSE server on. Default is 127.0.0.1\n  --stateless, --no-stateless\n                        Enable stateless mode for streamable http transports. Default is False\n  --sse-port SSE_PORT   (deprecated) Same as --port\n  --sse-host SSE_HOST   (deprecated) Same as --host\n  --allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]\n                        Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed.\n  --expose-header HEADER\n                        Headers to expose via Access-Control-Expose-Headers. Defaults to 'Mcp-Session-Id'. Can be used multiple times.\n\nExamples:\n  mcp-proxy http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --no-verify-ssl https:\u002F\u002Fserver.local\u002Fsse\n  mcp-proxy --transport streamablehttp http:\u002F\u002Flocalhost:8080\u002Fmcp\n  mcp-proxy --headers Authorization 'Bearer YOUR_TOKEN' http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --client-id CLIENT_ID --client-secret CLIENT_SECRET --token-url https:\u002F\u002Fauth.example.com\u002Ftoken http:\u002F\u002Flocalhost:8080\u002Fsse\n  mcp-proxy --port 8080 -- your-command --arg1 value1 --arg2 value2\n  mcp-proxy --named-server fetch 'uvx mcp-server-fetch' --port 8080\n  mcp-proxy your-command --port 8080 -e KEY VALUE -e ANOTHER_KEY ANOTHER_VALUE\n  mcp-proxy your-command --port 8080 --allow-origin='*'\n  mcp-proxy your-command --port 8080 --allow-origin='*' --expose-header Custom-Header\n```\n\n### 示例配置文件\n\n```json\n{\n  \"mcpServers\": {\n    \"fetch\": {\n      \"enabled\": true,\n      \"timeout\": 60,\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-server-fetch\"\n      ],\n      \"transportType\": \"stdio\"\n    },\n    \"github\": {\n      \"timeout\": 60,\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@modelcontextprotocol\u002Fserver-github\"\n      ],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"\u003CYOUR_TOKEN>\"\n      },\n      \"transportType\": \"stdio\"\n    }\n  }\n}\n```\n\n## 测试\n\n通过运行 `mcp-proxy` 服务器并使用 `mcp-server-fetch` 服务器来检查它。您可以使用 [检查器工具](https:\u002F\u002Fmodelcontextprotocol.io\u002Fdocs\u002Ftools\u002Finspector) 来测试目标服务器。\n\n```bash\n# Run the stdio server called mcp-server-fetch behind the proxy over SSE\nmcp-proxy --port=8080 uvx mcp-server-fetch &\n\n# Connect to the SSE proxy server spawned above using another instance of mcp-proxy given the URL of the SSE server\nmcp-proxy http:\u002F\u002F127.0.0.1:8080\u002Fsse\n\n# Send CTRL+C to stop the second server\n\n# Bring the first server to the foreground\nfg\n\n# Send CTRL+C to stop the first server\n```","# MCP-Proxy 快速上手指南\n\n## 简介\n`mcp-proxy` 是一个用于在服务器传输协议之间切换的工具。它主要支持以下两种模式：\n1. **stdio 到 SSE\u002FStreamableHTTP**：允许客户端（如 Claude Desktop）通过 stdio 协议连接到远程 SSE 服务器。\n2. **SSE 到 stdio**：将本地的 stdio 服务器暴露为 SSE 服务，允许远程客户端连接。\n\n## 环境准备\n- **系统要求**：Python 环境（推荐 Python 3.8+）。\n- **网络要求**：能够访问 PyPI 仓库及目标 MCP 服务器地址。\n- **前置依赖**：无需额外系统级依赖，确保 `pip` 可用即可。\n\n## 安装步骤\n\n### 方式一：通过 PyPI 安装（推荐）\n```bash\npip install mcp-proxy\n```\n> 💡 **提示**：国内用户如遇下载缓慢，建议使用镜像源加速：\n> ```bash\n> pip install mcp-proxy -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n### 方式二：通过 GitHub 安装最新版\n```bash\npip install git+https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy.git\n```\n\n### 方式三：容器化部署\n支持作为 Docker 容器运行，具体镜像构建请参考官方文档中的 `Extending the container image` 章节。\n\n## 基本使用\n\n### 场景 1：连接远程 SSE 服务器 (stdio to SSE)\n此模式适用于让不支持 SSE 的客户端连接远程 MCP 服务。\n\n**基础命令：**\n```bash\nmcp-proxy http:\u002F\u002Fexample.io\u002Fsse\n```\n\n**配置示例 (Claude Desktop)：**\n```json\n{\n  \"mcpServers\": {\n    \"mcp-proxy\": {\n      \"command\": \"mcp-proxy\",\n      \"args\": [\n        \"http:\u002F\u002Fexample.io\u002Fsse\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"access-token\"\n      }\n    }\n  }\n}\n```\n\n### 场景 2：暴露本地 Stdio 服务器 (SSE to stdio)\n此模式允许通过 HTTP\u002FSSE 端口访问本地运行的 MCP 服务器。\n\n**基础命令：**\n```bash\nmcp-proxy uvx mcp-server-fetch\n```\n\n**指定端口与主机：**\n```bash\nmcp-proxy --port=8080 --host=0.0.0.0 uvx mcp-server-fetch\n```\n\n**传递参数给后端服务器：**\n注意使用 `--` 分隔符区分 proxy 参数与后端服务器参数。\n```bash\nmcp-proxy --port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent\n```\n\n### 多服务器管理 (Named Servers)\n可通过配置文件定义多个命名服务器，并在 `\u002Fservers\u002F\u003Cserver-name>\u002F` 路径下访问。\n\n**配置文件示例：**\n```json\n{\n  \"mcpServers\": {\n    \"fetch\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-server-fetch\"],\n      \"transportType\": \"stdio\"\n    }\n  }\n}\n```\n**启动命令：**\n```bash\nmcp-proxy --port=8080 --named-server-config .\u002Fservers.json\n```\n\n## 常用命令行参数\n| 参数 | 说明 | 示例 |\n| :--- | :--- | :--- |\n| `--port` | 设置监听端口 | `--port=8080` |\n| `--host` | 设置监听 IP | `--host=0.0.0.0` |\n| `--headers` | 设置请求头（用于认证） | `--headers Authorization 'Bearer token'` |\n| `--transport` | 指定传输协议 | `--transport streamablehttp` |\n| `--named-server` | 定义命名服务器 | `--named-server fetch 'uvx mcp-server-fetch'` |","某企业开发团队希望在本地运行的 Claude Desktop 中调用部署在内网的代码分析 MCP 服务，但该服务仅暴露了 SSE 接口且需要鉴权。\n\n### 没有 mcp-proxy 时\n- 客户端原生不支持 SSE 协议，无法建立网络连接。\n- 需要在代码层硬编码远程地址，导致配置与环境强耦合。\n- 敏感认证信息（如 API Key）难以安全地透传给后端服务。\n- 每次网络拓扑调整都需重新打包发布桌面应用。\n\n### 使用 mcp-proxy 后\n- mcp-proxy 作为中间件将 stdio 请求转换为 SSE 流量，打通通信链路。\n- 通过配置文件统一管理远程端点与 Header 信息，实现配置与代码分离。\n- 内置支持 OAuth2 及自定义 Header 转发，确保内网服务访问安全。\n- 服务迁移或升级时仅需调整代理配置，本地开发体验零感知。\n\nmcp-proxy 以轻量级桥接方式解决了传输协议不兼容问题，极大降低了混合架构下的集成成本。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsparfenyuk_mcp-proxy_987a59f3.png","sparfenyuk","Sergey Parfenyuk","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fsparfenyuk_4c51cf4e.jpg",null,"Munich, Germany","https:\u002F\u002Fgithub.com\u002Fsparfenyuk",[82,86],{"name":83,"color":84,"percentage":85},"Python","#3572A5",98.8,{"name":87,"color":88,"percentage":89},"Dockerfile","#384d54",1.2,2397,224,"2026-04-05T08:58:52","MIT","未说明",{"notes":96,"python":94,"dependencies":97},"该工具为 MCP 协议传输代理（Proxy），主要用于在不同传输协议（如 stdio、SSE、StreamableHTTP）之间进行转换，并非 AI 模型推理工具。因此无特定的 GPU 或大内存需求。支持通过 PyPI、源码或 Docker 容器安装。配置方式灵活，支持命令行参数、环境变量及 JSON 配置文件。运行依赖具体的 Python 环境，且连接的目标 MCP 服务器可能有独立的环境要求。",[94],[16],[100,101,102,103,104],"mcp","mcp-server","proxy","sse","streamable-http",4,"2026-03-27T02:49:30.150509","2026-04-06T07:13:15.588497",[109,114,118,123,128,132],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},1822,"如何构建支持 `uvx` 的 mcp-proxy Docker 镜像？","默认镜像未预装 `uv` 包，需要自定义构建。请使用以下 Dockerfile 片段：\n\n```Dockerfile\nFROM ghcr.io\u002Fsparfenyuk\u002Fmcp-proxy:commit-7eb4a09\n\n# 安装 'uv' 包\nRUN python3 -m ensurepip && pip install --no-cache-dir uv\n\nENV PATH=\"\u002Fusr\u002Flocal\u002Fbin:$PATH\" \\\\\n    UV_PYTHON_PREFERENCE=only-system\n\nENTRYPOINT [ \"mcp-proxy\" ]\n```\n\n构建命令：`docker build --network=host . --progress=plain -t mcp-proxy-with-uv`","https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fissues\u002F30",{"id":115,"question_zh":116,"answer_zh":117,"source_url":113},1823,"构建好镜像后，如何运行包含 `uvx` 的 mcp-proxy 容器？","运行容器时需添加 `--pass-environment` 参数以确保环境变量生效，并指定 `uvx` 命令。例如：\n\n`docker run -t --network=host mcp-proxy-with-uv --pass-environment --sse-port 8888 --sse-host 0.0.0.0 uvx mcp-server-fetch`\n\n注意：如果使用 `uvx`，必须确保 `PATH` 环境变量已正确设置。",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},1824,"为什么在 Docker 中使用 `uvx` 需要配置 `PATH` 环境变量？","虽然 PR #27 修复了未设置环境变量的一般性问题，但在某些情况下（如使用 `uvx`），仍需显式设置 `PATH` 才能找到 Python 或 `uvx` 的可执行文件。用户反馈显示，如果不设置 `env PATH`，可能会因为找不到完整路径而导致运行失败。","https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fissues\u002F26",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},1825,"遇到 \"Received request before initialization was complete\" 错误通常是什么原因？","这通常不是 mcp-proxy 本身的问题，而是被代理的 MCP 服务器的问题。大多数情况下，这是由被代理的服务端代码逻辑导致的，建议在排查时优先检查被代理服务的初始化流程。","https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fissues\u002F40",{"id":129,"question_zh":130,"answer_zh":131,"source_url":127},1826,"是否有具体的 MCP 服务器曾引发此类初始化错误？","是的，`mcp-server-code-runner` 曾被报告存在此类问题。维护者在调试后发现根因在于该服务器自身，相关修复可参考：https:\u002F\u002Fgithub.com\u002Fformulahendry\u002Fmcp-server-code-runner\u002Fpull\u002F5",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},1827,"使用 Named Servers 功能时出现堆栈跟踪错误如何解决？","该问题已在 PR #92 中修复。如果遇到在使用 Named Servers 配合 SSE 到 stdio 时出现堆栈错误，请将 mcp-proxy 更新至版本 0.8.2 或更高版本进行测试。","https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fissues\u002F80",[138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,213,218],{"id":139,"version":140,"summary_zh":141,"released_at":142},101279,"v0.11.0","## What's Changed\r\n* build(deps): bump the actions group across 1 directory with 3 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F131\r\n* build(deps): bump mcp from 1.18.0 to 1.19.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F129\r\n* build(deps): bump uvicorn from 0.37.0 to 0.38.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F127\r\n* Add client credentials authentication for SSE and streamable http mcp server connections by @BartMemelink in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F128\r\n* build(deps): bump the actions group across 1 directory with 4 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F139\r\n* build(deps): bump mcp from 1.19.0 to 1.22.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F140\r\n* Update server description to mention streamable HTTP or SSE by @domdomegg in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F141\r\n* build(deps): bump the actions group with 3 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F142\r\n* build(deps): bump the actions group with 5 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F151\r\n* build(deps): bump uvicorn from 0.38.0 to 0.40.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F155\r\n* build(deps): bump the actions group across 1 directory with 2 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F159\r\n* build(deps): bump mcp from 1.22.0 to 1.25.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F154\r\n\r\n## New Contributors\r\n* @BartMemelink made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F128\r\n* @domdomegg made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F141\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.10.0...v0.11.0","2026-01-15T18:27:48",{"id":144,"version":145,"summary_zh":146,"released_at":147},101280,"v0.10.0","## What's Changed\r\n* feat: disable SSL cert verification with --no-verify-ssl by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F94\r\n* fix: align \u002Fmcp streamable HTTP handling with python-sdk by @big-omega in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F119\r\n* build: add Python 3.14 to GitHub Actions CI matrix by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F123\r\n* build(deps): bump mcp from 1.9.4 to 1.18.0 by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F125\r\n* build(deps): bump the actions group with 12 updates by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F109\r\n* build(deps): bump uvicorn from 0.36.0 to 0.37.0 by @dependabot[bot] in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F114\r\n* docs: get rid of smithery by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F112\r\n* docs: update README.md by @rv-kip in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F117\r\n\r\n## New Contributors\r\n* @rv-kip made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F117\r\n* @big-omega made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F119\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.9.0...v0.10.0","2025-10-26T16:35:09",{"id":149,"version":150,"summary_zh":151,"released_at":152},101281,"v0.9.0","## What's Changed\r\n* feat: add --log-level option by @bfontaine in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F102\r\n* feat: docker image respects shutdown signals by @reneleonhardt in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F98\r\n* chore: update dependencies by @reneleonhardt in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F97\r\n\r\n## New Contributors\r\n* @bfontaine made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F102\r\n* @reneleonhardt made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F98\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.8.2...v0.9.0","2025-09-22T19:29:33",{"id":154,"version":155,"summary_zh":156,"released_at":157},101282,"v0.8.2","## What's Changed\r\n* fix: nonetype is not callable by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F92\r\n* feat: print version by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F93\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.8.1...v0.8.2","2025-07-05T13:48:34",{"id":159,"version":160,"summary_zh":161,"released_at":162},101283,"v0.8.1","## What's Changed\r\n* fix: updated default values for --port and --host by @invarrow in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F76\r\n* feat: support env field in config file by @knaou in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F79\r\n* fix: disable redirect to trailing slashes by @imtsuki in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F89\r\n\r\n## New Contributors\r\n* @invarrow made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F76\r\n* @knaou made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F79\r\n* @imtsuki made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F89\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.8.0...v0.8.1","2025-07-05T10:01:06",{"id":164,"version":165,"summary_zh":166,"released_at":167},101284,"v0.8.0","## New feature: Named servers\r\n\r\nWith this release, a single instance of `mcp-proxy` can now proxy multiple STDIO servers. \r\n\r\n```bash\r\nuv run mcp-proxy --transport sse --port=8080 --named-server-config .\u002Fservers.json\r\n```\r\n\r\n➡️ [See the README.md for details.](https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Ftree\u002F04c92e471ab5b1b828383c64f0a10aeb3636fb39?tab=readme-ov-file#named-servers)\r\n\r\n\r\n## What's Changed\r\n\r\n* feat: support proxying multiple MCP stdio servers to SSE by @sammcj in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F65\r\n* [BUG] Fixed missing slash on SEE \u002Fmessages path by @hektorjg in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F71\r\n\r\n## New Contributors\r\n* @sammcj made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F65\r\n* @hektorjg made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F71\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.7.0...v0.8.0","2025-05-31T07:23:25",{"id":169,"version":170,"summary_zh":171,"released_at":172},101285,"v0.7.0","## What's Changed\r\n* README updates on --env by @Magnuti in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F67\r\n* fix: correct debug logging typo by @jackedelic in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F68\r\n* feat: support streamable transport in client mode by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F70\r\n\r\n## New Contributors\r\n* @Magnuti made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F67\r\n* @jackedelic made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F68\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.6.0...v0.7.0","2025-05-26T07:52:19",{"id":174,"version":175,"summary_zh":176,"released_at":177},101286,"v0.6.0","## What's Changed\r\n* Update README by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F46\r\n* feat: support --debug argument for verbose output by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F47\r\n* chore: upgrade pre-commit hooks by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F48\r\n* chore: upgrade deps by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F49\r\n* feat: support streamable http proxy by @caydenwei in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F60\r\n* feat: support passing 'stateless' and 'cwd' arguments by @caydenwei in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F62\r\n* Bump version by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F61\r\n\r\n## New Contributors\r\n* @caydenwei made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F60\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.5.1...v0.6.0","2025-05-13T06:46:36",{"id":179,"version":180,"summary_zh":181,"released_at":182},101287,"v0.5.1","## What's Changed\r\n* chore: bump all deps by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F38\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.5.0...v0.5.1","2025-03-25T08:42:16",{"id":184,"version":185,"summary_zh":186,"released_at":187},101288,"v0.5.0","## What's Changed\r\n* Allow passing through all environment variables to server using `--pass-environment` by @rmasters in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F27\r\n* Update notes on docker-compose use by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F29\r\n* Expose CORS configuration using `--allow-origin=URL` by @fedirz in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F31\r\n\r\n## New Contributors\r\n* @rmasters made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F27\r\n* @fedirz made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F31\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.4.1...v0.5.0","2025-03-05T17:45:08",{"id":189,"version":190,"summary_zh":191,"released_at":192},101289,"v0.4.1","## What's Changed\r\n* Update workflows by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F18\r\n* Pin GH actions to git hashes by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F19\r\n* Pin remaining GitHub actions by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F20\r\n* Deployment: Dockerfile and Smithery config by @calclavia in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F21\r\n* Docker build in Github workflows by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F22\r\n* Headers argument for SSE server connection by @andersenthomas98 in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F23\r\n* Support multi-arch Docker image by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F25\r\n\r\n## New Contributors\r\n* @andersenthomas98 made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F23\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.3.2...v0.4.1","2025-02-07T20:32:24",{"id":194,"version":195,"summary_zh":196,"released_at":197},101290,"v0.3.2","## What's Changed\r\n* Add Python 3.10 support by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F17\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.3.1...v0.3.2","2025-01-13T18:07:31",{"id":199,"version":200,"summary_zh":201,"released_at":202},101291,"v0.3.1","## What's Changed\r\n* Add mypy job by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F14\r\n* Bump mcp 1.2.0 by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F16\r\n\r\n## New Contributors\r\n* @calclavia made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F12\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.3.0...v0.3.1","2025-01-08T18:29:47",{"id":204,"version":205,"summary_zh":206,"released_at":207},101292,"v0.3.0","## What's Changed\r\n* Refactor to separate client and proxy server in preparation for more client behaviors by @allenporter in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F7\r\n* fix ruff linting for docstring using numpy convention by @grll in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F9\r\n* docs: mention pypi package by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F10\r\n* Add library for serving an sse server proxying a stdio server by @allenporter in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F8\r\n* Add functionality to start an SSE server to proxy a local stdio server by @allenporter in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F11\r\n* Update README with new information about command-line interface by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F13\r\n\r\n## New Contributors\r\n* @grll made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F9\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.2.2...v0.3.0","2025-01-02T21:05:16",{"id":209,"version":210,"summary_zh":211,"released_at":212},101293,"v0.2.2","## What's Changed\r\n* chore: update project info by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F6\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.2.1...v0.2.2","2024-12-29T17:00:32",{"id":214,"version":215,"summary_zh":216,"released_at":217},101294,"v0.2.1","## What's Changed\r\n* tests: increase coverage to 84% by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F4\r\n* chore: add pypi deployment step by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F5\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcompare\u002Fv0.2.0...v0.2.1","2024-12-29T16:18:48",{"id":219,"version":220,"summary_zh":221,"released_at":222},101295,"v0.2.0","## What's Changed\r\n* Update mcp-proxy to only enable capabilities that are exported by the server by @allenporter in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F1\r\n* Add support for specifying authentication tokens in mcp-proxy by @allenporter in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F2\r\n* chore: enable ci by @sparfenyuk in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F3\r\n\r\n## New Contributors\r\n* @allenporter made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F1\r\n* @sparfenyuk made their first contribution in https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fpull\u002F3\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fsparfenyuk\u002Fmcp-proxy\u002Fcommits\u002Fv0.2.0","2024-12-28T22:20:12"]