114 lines
3.8 KiB
Python
114 lines
3.8 KiB
Python
from typing import Dict
|
|
|
|
from fastapi import HTTPException
|
|
|
|
from api.base import app
|
|
from extension.mcp import mcp_manager
|
|
|
|
# manager
|
|
@app.get("/api/mcp/services", response_model=Dict)
|
|
async def get_mcp_services():
|
|
"""获取所有MCP服务器状态"""
|
|
return {
|
|
'services': [dict(service) for service in mcp_manager.list_services()],
|
|
'status': mcp_manager.get_status()
|
|
}
|
|
|
|
|
|
@app.post("/api/mcp/services", response_model=Dict)
|
|
async def create_mcp_service(data: Dict):
|
|
"""创建新的MCP服务"""
|
|
name = data.get('name')
|
|
endpoint = data.get('endpoint')
|
|
protocol = data.get('protocol')
|
|
if not name or not endpoint or not protocol:
|
|
raise HTTPException(status_code=400, detail='服务器名称、端点和协议不能为空')
|
|
|
|
try:
|
|
result = mcp_manager.create_service(name, endpoint, protocol, data.get('config'))
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
|
|
|
|
@app.delete("/api/mcp/services/{service_id}", response_model=Dict)
|
|
async def delete_mcp_service(service_id: str):
|
|
"""删除MCP服务"""
|
|
try:
|
|
result = mcp_manager.delete_service(service_id)
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=404, detail=str(e)) from e
|
|
|
|
|
|
@app.get("/api/mcp/services/{service_id}/start", response_model=Dict)
|
|
async def start_mcp_service(service_id: str):
|
|
"""启动MCP服务"""
|
|
try:
|
|
result = mcp_manager.start_service(service_id)
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f'启动失败: {str(e)}') from e
|
|
|
|
|
|
@app.get("/api/mcp/services/{service_id}/stop", response_model=Dict)
|
|
async def stop_mcp_service(service_id: str):
|
|
"""停止MCP服务"""
|
|
try:
|
|
result = mcp_manager.stop_service(service_id)
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=404, detail=str(e)) from e
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f'停止失败: {str(e)}') from e
|
|
|
|
|
|
@app.get("/api/mcp/services/{service_id}/restart", response_model=Dict)
|
|
async def restart_mcp_service(service_id: str):
|
|
"""重启MCP服务"""
|
|
try:
|
|
result = mcp_manager.restart_service(service_id)
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f'重启失败: {str(e)}') from e
|
|
|
|
|
|
@app.get("/api/mcp/services/{service_id}/status", response_model=Dict)
|
|
async def get_mcp_service_status(service_id: str):
|
|
"""获取指定MCP服务的状态"""
|
|
try:
|
|
# Find service by ID
|
|
service = next((s for s in mcp_manager.services.values() if str(s.id) == service_id), None)
|
|
if not service:
|
|
raise HTTPException(status_code=404, detail=f'Service {service_id} not found')
|
|
|
|
return {
|
|
'id': service.id,
|
|
'name': service.name,
|
|
"instance": service.instance_name,
|
|
'endpoint': service.endpoint,
|
|
'protocol': service.protocol.name,
|
|
'status': service.status,
|
|
'config': service.config if service.config else {}
|
|
}
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e)) from e
|
|
|
|
|
|
@app.put("/api/mcp/services/{service_id}", response_model=Dict)
|
|
async def update_mcp_service(service_id: str, data: Dict):
|
|
"""更新MCP服务配置"""
|
|
try:
|
|
result = mcp_manager.update_service(service_id, **data)
|
|
return result
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=404, detail=str(e)) from e
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e)) from e
|
|
|
|
|