diff --git a/servers/package_manager_mcp/mcp_config.json b/servers/package_manager_mcp/mcp_config.json index 3720298e3c3a1f6982996e0f76f8e879303497c2..c11ea0fdfb23f4cee604d8fdf726b650721de0ec 100644 --- a/servers/package_manager_mcp/mcp_config.json +++ b/servers/package_manager_mcp/mcp_config.json @@ -3,13 +3,18 @@ "package_manager_mcp": { "command": "uv", "args": [ - "--directory", - "/opt/mcp-servers/servers/package_manager_mcp/src", - "run", - "server.py" + "/opt/mcp-servers/servers/package_manager_mcp/src/server.py" ], + "alwaysAllow": [], "disabled": false, - "alwaysAllow": [] + "timeout": 3600 } - } + }, + "server_name": "package-manager-mcp", + "log_level": "info", + "port": 8081, + "allowed_origins": [ + "http://localhost:3000", + "http://127.0.0.1:3000" + ] } \ No newline at end of file diff --git a/servers/package_manager_mcp/src/server.py b/servers/package_manager_mcp/src/server.py index 1291ffdff85d4f5ecb0cb1d97449d678e58b5fa8..46f8e1c85af1ae8f13b0d4540bd95599b14e508e 100644 --- a/servers/package_manager_mcp/src/server.py +++ b/servers/package_manager_mcp/src/server.py @@ -5,8 +5,8 @@ from mcp.server.fastmcp import FastMCP, Context mcp = FastMCP("软件包管理") @mcp.tool() -def query_packages(ctx: Context, package_name: str = "") -> str: - """查询软件包信息 +def query_dnf_packages(ctx: Context, package_name: str = "") -> str: + """查询dnf软件包信息 Args: package_name: 要查询的软件包名(可选) @@ -30,8 +30,8 @@ def query_packages(ctx: Context, package_name: str = "") -> str: return f"发生错误: {str(e)}" @mcp.tool() -def install_package(ctx: Context, package_name: str) -> str: - """安装软件包 +def install_dnf_package(ctx: Context, package_name: str) -> str: + """安装dnf软件包 Args: package_name: 要安装的软件包名 @@ -50,8 +50,8 @@ def install_package(ctx: Context, package_name: str) -> str: return f"发生错误: {str(e)}" @mcp.tool() -def remove_package(ctx: Context, package_name: str) -> str: - """卸载软件包 +def remove_dnf_package(ctx: Context, package_name: str) -> str: + """卸载dnf软件包 Args: package_name: 要卸载的软件包名 @@ -69,5 +69,135 @@ def remove_package(ctx: Context, package_name: str) -> str: except Exception as e: return f"发生错误: {str(e)}" +@mcp.tool() +def query_rpm_packages(ctx: Context, package_name: str = "") -> str: + """查询RPM软件包信息 + + Args: + package_name: 要查询的软件包名(可选) + """ + try: + if package_name: + cmd = ["rpm", "-qa", f"*{package_name}*"] + else: + cmd = ["rpm", "-qa"] + + result = subprocess.run( + cmd, + check=True, + capture_output=True, + text=True + ) + return result.stdout + except subprocess.CalledProcessError as e: + return f"查询失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + +@mcp.tool() +def install_pip_package(ctx: Context, package_name: str) -> str: + """安装pip软件包 + + Args: + package_name: 要安装的软件包名 + """ + try: + result = subprocess.run( + ["pip", "install", package_name], + check=True, + capture_output=True, + text=True + ) + return f"安装成功: {result.stdout}" + except subprocess.CalledProcessError as e: + return f"安装失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + +@mcp.tool() +def remove_pip_package(ctx: Context, package_name: str) -> str: + """卸载pip软件包 + + Args: + package_name: 要卸载的软件包名 + """ + try: + result = subprocess.run( + ["pip", "uninstall", "-y", package_name], + check=True, + capture_output=True, + text=True + ) + return f"卸载成功: {result.stdout}" + except subprocess.CalledProcessError as e: + return f"卸载失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + +@mcp.tool() +def query_npm_packages(ctx: Context, package_name: str = "") -> str: + """查询npm软件包信息 + + Args: + package_name: 要查询的软件包名(可选) + """ + try: + if package_name: + cmd = ["npm", "search", package_name] + else: + cmd = ["npm", "list", "-g", "--depth=0"] + + result = subprocess.run( + cmd, + check=True, + capture_output=True, + text=True + ) + return result.stdout + except subprocess.CalledProcessError as e: + return f"查询失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + +@mcp.tool() +def install_yarn_package(ctx: Context, package_name: str) -> str: + """安装yarn软件包 + + Args: + package_name: 要安装的软件包名 + """ + try: + result = subprocess.run( + ["yarn", "global", "add", package_name], + check=True, + capture_output=True, + text=True + ) + return f"安装成功: {result.stdout}" + except subprocess.CalledProcessError as e: + return f"安装失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + +@mcp.tool() +def remove_pnpm_package(ctx: Context, package_name: str) -> str: + """卸载pnpm软件包 + + Args: + package_name: 要卸载的软件包名 + """ + try: + result = subprocess.run( + ["pnpm", "remove", "-g", package_name], + check=True, + capture_output=True, + text=True + ) + return f"卸载成功: {result.stdout}" + except subprocess.CalledProcessError as e: + return f"卸载失败: {e.stderr}" + except Exception as e: + return f"发生错误: {str(e)}" + if __name__ == "__main__": mcp.run() \ No newline at end of file