first claude
This commit is contained in:
79
mcp/server.py
Normal file
79
mcp/server.py
Normal file
@ -0,0 +1,79 @@
|
||||
# mcp/server.py
|
||||
"""
|
||||
MCP Server for aigpt CLI
|
||||
"""
|
||||
from fastmcp import FastMCP
|
||||
import platform
|
||||
import os
|
||||
import sys
|
||||
|
||||
mcp = FastMCP("AigptMCP")
|
||||
|
||||
@mcp.tool()
|
||||
def process_text(text: str) -> str:
|
||||
"""テキストを処理する"""
|
||||
return f"Processed: {text}"
|
||||
|
||||
@mcp.tool()
|
||||
def get_system_info() -> dict:
|
||||
"""システム情報を取得"""
|
||||
return {
|
||||
"platform": platform.system(),
|
||||
"version": platform.version(),
|
||||
"python_version": sys.version,
|
||||
"current_dir": os.getcwd()
|
||||
}
|
||||
|
||||
@mcp.tool()
|
||||
def execute_command(command: str) -> dict:
|
||||
"""安全なコマンドを実行する"""
|
||||
# セキュリティのため、許可されたコマンドのみ実行
|
||||
allowed_commands = ["ls", "pwd", "date", "whoami"]
|
||||
cmd_parts = command.split()
|
||||
|
||||
if not cmd_parts or cmd_parts[0] not in allowed_commands:
|
||||
return {
|
||||
"error": f"Command '{command}' is not allowed",
|
||||
"allowed": allowed_commands
|
||||
}
|
||||
|
||||
try:
|
||||
import subprocess
|
||||
result = subprocess.run(
|
||||
cmd_parts,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10
|
||||
)
|
||||
return {
|
||||
"stdout": result.stdout,
|
||||
"stderr": result.stderr,
|
||||
"returncode": result.returncode
|
||||
}
|
||||
except subprocess.TimeoutExpired:
|
||||
return {"error": "Command timed out"}
|
||||
except Exception as e:
|
||||
return {"error": str(e)}
|
||||
|
||||
@mcp.tool()
|
||||
def file_operations(operation: str, filepath: str, content: str = None) -> dict:
|
||||
"""ファイル操作を行う"""
|
||||
try:
|
||||
if operation == "read":
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
return {"content": f.read(), "success": True}
|
||||
elif operation == "write" and content is not None:
|
||||
with open(filepath, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
return {"message": f"File written to {filepath}", "success": True}
|
||||
elif operation == "exists":
|
||||
return {"exists": os.path.exists(filepath), "success": True}
|
||||
else:
|
||||
return {"error": "Invalid operation or missing content", "success": False}
|
||||
except Exception as e:
|
||||
return {"error": str(e), "success": False}
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🚀 AigptMCP Server starting...")
|
||||
mcp.run()
|
||||
|
Reference in New Issue
Block a user