MCP代码执行器
MCP代码执行器是一个MCP服务器,允许LLM在指定的Python环境中执行Python代码。这使得LLM能够通过访问环境中定义的库和依赖关系来运行代码。它还支持增量代码生成,以处理可能超过令牌限制的大型代码块。
特性
- 从LLM提示执行Python代码
- 支持增量代码生成以克服令牌限制
- 在指定环境(Conda、virtualenv或UV-virtualenv)中运行代码
- 需要时安装依赖项
- 检查软件包是否已安装
- 在运行时动态配置环境
- 可配置代码存储目录
先决条件
-
已安装Node.js
-
以下之一:
-
已安装Conda,并创建了所需的Conda环境
-
Python虚拟环境
-
UV虚拟
设置
- 克隆此存储库:
BASH``` 1git clone https://github.com/bazinga012/mcp_code_executor.git
1. 导航到项目目录:
BASH```
1cd mcp_code_executor
- 安装Node.js依赖项:
BASH``` 1npm install
1. 构建项目:
BASH```
1npm run build
配置
要配置MCP代码执行器服务器,请将以下内容添加到MCP服务器配置文件中:
使用Node.js
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15{ “mcpServers”: { “mcp-code-executor”: { “command”: “node”, “args”: [ “/path/to/mcp_code_executor/build/index.js” ], “env”: { “CODE_STORAGE_DIR”: “/path/to/code/storage”, “ENV_TYPE”: “conda”, “CONDA_ENV_NAME”: “your-conda-env” } } } }
### 使用Docker
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13{
"mcpServers": {
"mcp-code-executor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp-code-executor"
]
}
}
}
注: Dockerfile仅在venv-uv环境类型下进行了测试。其他环境类型可能需要额外的配置。
环境变量
必需变量
CODE_STORAGE_DIR:存储生成代码的目录
环境类型(选择一个设置)
-
对于Conda:
-
ENV_TYPE:设置为conda -
CONDA_ENV_NAME:要使用的Conda环境的名称 -
对于标准Virtualenv:
-
ENV_TYPE:设置为venv -
VENV_PATH:virtualenv目录的路径 -
对于UV Virtualenv:
-
ENV_TYPE:设置为venv-uv -
UV_VENV_PATH:UV virtualenv目录的路径
可用工具
MCP代码执行器为LLM提供以下工具:
1. execute_code
在配置的环境中执行Python代码。最适合短代码片段。
JSON``` 1 2 3 4 5 6 7{ “name”: “execute_code”, “arguments”: { “code”: “import numpy as np\nprint(np.random.rand(3,3))”, “filename”: “matrix_gen” } }
### 2. `install_dependencies`
在环境中安装Python包。
JSON```
1
2
3
4
5
6{
"name": "install_dependencies",
"arguments": {
"packages": ["numpy", "pandas", "matplotlib"]
}
}
3. check_installed_packages
检查环境中是否已安装包。
JSON``` 1 2 3 4 5 6{ “name”: “check_installed_packages”, “arguments”: { “packages”: [“numpy”, “pandas”, “non_existent_package”] } }
### 4. `configure_environment`
动态更改环境配置。
JSON```
1
2
3
4
5
6
7{
"name": "configure_environment",
"arguments": {
"type": "conda",
"conda_name": "new_env_name"
}
}
5. get_environment_config
获取当前环境配置。
JSON``` 1 2 3 4{ “name”: “get_environment_config”, “arguments”: {} }
### 6. `initialize_code_file`
创建一个包含初始内容的新Python文件。对于可能超过令牌限制的较长代码,请将此作为第一步。
JSON```
1
2
3
4
5
6
7{
"name": "initialize_code_file",
"arguments": {
"content": "def main():\n print('Hello, world!')\n\nif __name__ == '__main__':\n main()",
"filename": "my_script"
}
}
7. append_to_code_file
将内容附加到现有的Python代码文件中。使用此选项可将更多代码添加到使用initialize_code_file创建的文件中。
JSON``` 1 2 3 4 5 6 7{ “name”: “append_to_code_file”, “arguments”: { “file_path”: “/path/to/code/storage/my_script_abc123.py”, “content”: “\ndef another_function():\n print(‘This was appended to the file’)\n” } }
### 8. `execute_code_file`
执行现有的Python文件。使用initialize_code_file和append_to_code_file构建代码后,将此作为最后一步。
JSON```
1
2
3
4
5
6{
"name": "execute_code_file",
"arguments": {
"file_path": "/path/to/code/storage/my_script_abc123.py"
}
}
9. read_code_file
读取现有Python代码文件的内容。在附加更多内容或执行文件之前,使用此功能验证文件的当前状态。
JSON``` 1 2 3 4 5 6{ “name”: “read_code_file”, “arguments”: { “file_path”: “/path/to/code/storage/my_script_abc123.py” } }
## 用法
配置后,MCP代码执行器将允许LLM通过在指定的文件中生成文件来执行Python代码 `CODE_STORAGE_DIR` 并在配置的环境中运行它。
LLM可以通过在提示中引用此MCP服务器来生成和执行代码。
### 处理大型代码块
对于可能超过LLM令牌限制的较大代码块,请使用增量代码生成方法:
1. **初始化文件** 使用基本结构 `initialize_code_file`
2. **添加更多代码** 在后续通话中使用 `append_to_code_file`
3. **验证文件内容** 如果需要使用 `read_code_file`
4. **执行完整代码** 使用 `execute_code_file`
这种方法允许LLM编写复杂的多部分代码,而不会遇到令牌限制。
## 向后兼容
此软件包保持与早期版本的向后兼容性。仅指定Conda环境的早期版本的用户将继续工作,而不会对其配置进行任何更改。
## 贡献
欢迎投稿!请打开问题或提交拉取请求。
## 许可证
该项目根据MIT许可证获得许可。