mcp-server-py2many
一个模型上下文协议(MCP)服务器,提供将Python代码转换为多种编程语言的工具,使用 py2many.
概述
此MCP服务器公开了允许LLM将Python代码转换为各种目标语言的工具,包括C++、Rust、Go、Kotlin、Dart、Julia、Nim、V、Mojo、D、SMT和Zig。
安装
使用紫外线(推荐)
# Clone the repository
git clone
cd mcp-server-py2many
# Install dependencies
uv sync
# Run the server
uv run mcp-server-py2many使用pip
pip install mcp-server-py2many配置
将此服务器添加到MCP客户端配置中:
Claude桌面配置
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"py2many": {
"command": "uvx",
"args": ["mcp-server-py2many"]
}
}
}或者使用本地安装:
{
"mcpServers": {
"py2many": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-server-py2many", "mcp-server-py2many"]
}
}
}可用工具
1. transpile_python
使用基于确定性规则的翻译将Python代码转换为另一种编程语言。
参数:
python_code(string,必填):要转换的Python代码target_language(字符串,必填):目标语言(cpp、rust、go、kotlin、dart、julia、nim、vlang、mojo、dlang、smt、zig)
2. transpile_python_with_llm
在LLM的帮助下,使用py2many转换Python代码,以更好地处理复杂的习惯用法。
参数:
python_code(string,必填):要转换的Python代码target_language(字符串,必填):目标语言(cpp、rust、go、kotlin、dart、julia、nim、vlang、mojo、dlang、smt、zig)
3. list_supported_languages
列出所有支持转译的目标语言。
4. verify_python
使用SMT和z3求解器验证Python代码。此工具使用 --smt 然后通过z3进行验证,以检查前/后条件的逆是否不饱和。
参数:
python_code(string,必填):要验证的Python代码
它是如何工作的:
- 使用以下命令将Python代码转换为SMT-LIB格式
py2many --smt - 从生成的SMT中提取先决条件(函数以结尾
-pre) - 构造一个验证查询,检查是否存在反例,其中:
- 前提条件成立(有效输入) - 实现与规范不同
- 在验证查询上运行z3
- 如果发现错误/反例,则返回SAT,如果验证,则返回UNSAT
示例:三角形分类错误检测
此示例使用 triangle_buggy.py py2many的测试用例,用于检测三角形分类实现中的错误:
from adt import adt as sealed
from py2many.smt import check_sat, default_value, get_model
from py2many.smt import pre as smt_pre
@sealed
class TriangleType:
EQUILATERAL: int
ISOSCELES: int
RIGHT: int
ACUTE: int
OBTUSE: int
ILLEGAL: int
a: int = default_value(int)
b: int = default_value(int)
c: int = default_value(int)
def classify_triangle_correct(a: int, b: int, c: int) -> TriangleType:
"""Correct implementation that properly sorts sides before classification"""
if a == b and b == c:
return TriangleType.EQUILATERAL
elif a == b or b == c or a == c:
return TriangleType.ISOSCELES
else:
if a >= b and a >= c:
if a * a == b * b + c * c:
return TriangleType.RIGHT
elif a * a = a and b >= c:
if b * b == a * a + c * c:
return TriangleType.RIGHT
elif b * b TriangleType:
"""Buggy implementation - assumes a >= b >= c without sorting"""
# Pre-condition: all sides must be positive and satisfy triangle inequality
if smt_pre:
assert a > 0
assert b > 0
assert c > 0
assert a = b and b >= c:
if a == c or b == c:
if a == b and a == c:
return TriangleType.EQUILATERAL
else:
return TriangleType.ISOSCELES
else:
# BUG: Not sorting sides, assuming a is largest
if a * a != b * b + c * c:
if a * a 0]
}
for item in data
if item.get('active') and len(item.get('values', [])) > 5
]
# Dynamic behavior
class DynamicClass:
def __getattr__(self, name):
return lambda *args: f"Called {name} with {args}"决策流程图
Is your Python code...
│
├─ Simple functions/algorithms?
│ └─ Yes → Use deterministic ✓
│
├─ Standard data structures and control flow?
│ └─ Yes → Use deterministic ✓
│
├─ Complex decorators, metaclasses, dynamic behavior?
│ └─ Yes → Use LLM-assisted 🧠
│
├─ Heavy use of Python-specific idioms?
│ └─ Yes → Use LLM-assisted 🧠
│
├─ Did deterministic translation fail?
│ └─ Yes → Try LLM-assisted 🧠
│
└─ Need idiomatic target language output?
└─ Yes → Use LLM-assisted 🧠支持的语言
| 语言 | 代码 | 注释 |
|---|---|---|
C cpp | 完全支持STL容器 | |
| 生锈 | rust | 所有权意识翻译 |
| 去吧 | go | 成语Go代码生成 |
| Kotlin | kotlin | JVM兼容输出 |
| 飞镖 | dart | 颤振友好 |
| 朱莉娅 | julia | 科学计算重点 |
| 尼姆 | nim | 系统编程 |
五、 vlang | 简单、快速的编译 | |
| Mojo | mojo | AI/ML性能计算 |
D dlang | 系统编程 | |
| 齐格 | zig | 现代系统编程 |
与SMT签订合同设计
py2many支持SMT(满意模理论) 契约式设计 编程——编写可以使用Z3或其他SMT求解器进行形式验证的规范。与其他目标语言不同,SMT输出不是一种直接的终端用户编程语言,而是一种用于验证的规范语言。
关键概念:
- 前置条件:函数执行前必须满足的约束
- 岗位条件:函数执行后必须保持的约束
- 细化类型:具有附加约束的类型(例如。,
int哪里 `1 bool:
if smt_pre: assert x > 2 # pre-condition assert y bool: if smt_pre: assert 9.8 + 2 * z == z + 9.11 True
assert equation(x, y) assert fequation(z) check_sat() get_value((x, y, z))
生成的SMT-LIB 2.0输出:
(declare-const x Int) (declare-const y Int) (declare-const z Real)
(define-fun equation-pre ((x Int) (y Int)) Bool (and (> x 2) ( #include
std::string greet(std::string name) { return "Hello, " + name + "!"; }
### 示例2:复杂数据处理(LLM辅助)
Python input with complex comprehensions
def analyze_sales(data): return { region: { 'total': sum(s['amount'] for s in sales), 'count': len(sales), 'avg': sum(s['amount'] for s in sales) / len(sales) } for region, sales in data.items() if any(s['amount'] > 1000 for s in sales) }
Better results with LLM-assisted translation for idiomatic target language
## 发展
Install development dependencies
uv sync
Run the server
uv run mcp-server-py2many
Test the server manually
uv run python -m mcp_server_py2many
## 运作原理
1. MCP服务器接收包含Python代码和目标语言的请求
1. 使用代码创建一个临时Python文件
1. 跑 `py2many --{language}` (或与 `--llm` 标志)在文件上
1. 捕获生成的输出和任何错误
1. 将转换后的代码返回给LLM客户端
## 局限性
- 并非所有目标语言都支持所有Python功能
- 一些Python标准库函数可能没有直接的等价物
- 复杂的动态Python代码在转译后可能需要手动调整
- LLM辅助模式需要为py2many配置LLM API密钥
## 许可证
MIT许可证-有关详细信息,请参阅许可证文件。
## 贡献
欢迎投稿!请在存储库中打开问题并拉取请求。
## 相关项目
- [py2many](https://github.com/adsharma/py2many) -此MCP服务器包装的转译器
- [主控程序](https://modelcontextprotocol.io/) -模型上下文协议规范