在现代 AI 开发里,MCP(Model Context Protocol)把模型能力和外部进程连起来,很多工具、服务都可以借这个协议接到客户端上。对日常开发来说,npx 和 uvx/uvenv 的价值不在'安装'本身,而是在于它们都能让你先跑起来,再决定要不要长期保留依赖。这个思路对试用 MCP 服务器尤其省事。
npx 和 uvx 的定位
npx 是 npm CLI 自带的命令。npm 版本达到 v5.2.0 之后,它就能直接临时下载并执行包里的可执行文件,不需要先做全局安装。
npx @modelcontextprotocol/server-example
这条命令会下载并运行 @modelcontextprotocol/server-example,结束后不会在系统里留下一个全局包。官方文档在这里:https://docs.npmjs.com/cli/v8/commands/npx
uvx 则更偏 Python 生态。它原本是 uv 相关工具链里的别名,思路和 pipx run 很像:把包装进隔离环境里临时跑起来,用完就走。
uvx pycowsay 'hello world!'
这个命令会先拉取需要的包,再执行对应命令。对于只想验证一个 MCP 服务能不能跑通的人来说,这种方式比全局装一堆依赖干净得多。https://github.com/astral-sh/uv
开始前先看环境
先确认两件事:网络和权限。
- 能访问 npm registry(
registry.npmjs.org)和 PyPI(pypi.org) - Windows 下最好用 PowerShell,必要时按管理员身份运行,或者把执行策略调到
RemoteSigned
已有环境也要看一下:
- Node.js ≥ v16,通常已经带上 npm 和 npx
- Python ≥ 3.10,适合配合
pipx或pip使用
安装和检查 npx
npx 这边其实主要就是把 Node.js 装好。
先装 Node.js
去 Node.js 官网 下载 LTS 版本,v18 或更高会更稳一点。
node --version # 应输出 v16+
npm --version # 应输出 v7+
npx --version # 应输出 v7+,npm ≥5.2.0 即自带 npx
如果机器上缺了 npx,可以补装:
npm install -g npx
需要的话再做一点全局配置
有些 IDE 或 CI 环境会限制可执行命令,这时要把 npx 加进允许列表,比如某些 MCP 客户端配置文件里的 allowed_executables。这不是每个人都需要,但在受控环境里很常见。
国内网络如果直接拉包慢,可以切镜像源:
npm config set registry https://registry.npmmirror.com/
安装和检查 uvx / uvenv
Python 这边有两个名字:旧一些的 uvx,以及迁移后的 uvenv。如果你手里已经有旧环境,先迁移再说,省得后面混着用。
uvenv self migrate
推荐走 pipx
pipx 的思路比较适合这种临时命令工具,隔离清楚,卸载也利索。
pipx install uvx # 安装旧版别名
pipx install uvenv # 安装新版迁移工具
如果系统里还没 pipx:
python3 -m pip install --user pipx
python3 -m pipx ensurepath
也可以直接用 pip
如果你只是想快速试一下,也能直接装:
pip install uvx # 安装旧版(仅 Python x86_64/aarch64 支持 v2.0)
# 或 pip install uvenv # 安装新版
这里有个限制要记住:uvx v2.0 只在 Linux x86_64/aarch64 平台通过 PyPI 发布,其他平台要么继续用 1.x,要么自己编译源码。https://pypi.org/project/uvx/1.0.2/
Shell 集成
如果你常在终端里切换,用补全会顺手很多:
uvx setup
这会给 Bash/Zsh 加上命令补全和环境变量配置,uvenv 也是同样的思路。https://pypi.org/project/uvx/
先验证,再接 MCP
安装完别急着写配置,先看版本号。
| 工具 | 验证命令 | 预期输出 |
|---|---|---|
| npx | npx --version | 版本号 ≥ 7.0.0 |
| uvx | uvx --version | 版本号(可能显示 v<1.x 或提示已迁移至 uvenv) |
| uvenv | uvenv --version | 版本号 ≥ 3.0 |
# 示例(macOS/Linux)
$ npx --version
8.19.2
$ uvx --version
1.0.2
$ uvenv --version
3.1.0
跑一个 MCP 服务器
真正用起来的时候,两边的差别主要体现在包生态。
# JavaScript 版(通过 npx)
npx @modelcontextprotocol/server-chat
# Python 版(通过 uvx/uvenv)
uvx modelcontextprotocol-server-chat
# 或 uvenv modelcontextprotocol-server-chat
这些命令都会在本地启动一个 MCP 服务器进程,通过标准 I/O 和客户端通信。像 VS Code Copilot Agent、Chainlit 这类客户端都能接上。
临时跑工具也很方便
npx 和 uvx 不只是跑服务器,临时执行命令行工具也很合适。
# 安装并运行 eslint
npx eslint .
# 安装并运行 pyflakes
uvx pyflakes your_script.py
这种用法在 CI 里尤其实用:不用先把工具写进全局环境,任务结束就撤掉,环境更干净。
遇到问题时先查这几处
- 命令找不到:通常是
PATH没配好,或者终端没重启 - 依赖互相冲突:Python 这边优先用
pipx,隔离效果最好 - 性能:如果你要一次装很多 Python 包,
uv/uvenv往往比pipx更快,但它们侧重点不完全一样,别硬拿一个方案套所有场景
结尾
如果你的目标是快速把 MCP 服务器接到本地开发环境或者 CI 流程里,npx 和 uvx/uvenv 都是够直接的办法。前者更顺手于 Node.js 生态,后者在 Python 工具链里更自然。真要选的话,我会按包的来源来定,而不是先纠结工具本身——这通常更省时间。


