|
|
import sys |
|
|
import subprocess |
|
|
from mcp.server.fastmcp import FastMCP |
|
|
|
|
|
|
|
|
mcp = FastMCP("VibeCodingTutor") |
|
|
|
|
|
@mcp.tool() |
|
|
def write_file(filename: str, content: str) -> str: |
|
|
"""Writes code or text to a file in the current directory.""" |
|
|
try: |
|
|
with open(filename, "w") as f: |
|
|
f.write(content) |
|
|
return f"Successfully wrote {len(content)} characters to {filename}." |
|
|
except Exception as e: |
|
|
return f"Error writing file: {str(e)}" |
|
|
|
|
|
@mcp.tool() |
|
|
def read_file(filename: str) -> str: |
|
|
"""Reads the content of a file.""" |
|
|
try: |
|
|
with open(filename, "r") as f: |
|
|
return f.read() |
|
|
except Exception as e: |
|
|
return f"Error reading file: {str(e)}" |
|
|
|
|
|
@mcp.tool() |
|
|
def run_python_script(filename: str) -> str: |
|
|
"""Runs a Python script and returns the stdout/stderr.""" |
|
|
try: |
|
|
|
|
|
|
|
|
result = subprocess.run( |
|
|
[sys.executable, filename], |
|
|
capture_output=True, |
|
|
text=True, |
|
|
timeout=10 |
|
|
) |
|
|
output = result.stdout |
|
|
if result.stderr: |
|
|
output += f"\n[Errors]:\n{result.stderr}" |
|
|
return output |
|
|
except Exception as e: |
|
|
return f"Execution failed: {str(e)}" |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
mcp.run() |