仿生人MCP接入点
This commit is contained in:
@@ -0,0 +1,258 @@
|
|||||||
|
"""
|
||||||
|
MCP Endpoint Server
|
||||||
|
主服务器文件
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import signal
|
||||||
|
import sys
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
|
import uvicorn
|
||||||
|
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
|
|
||||||
|
from core.connection_manager import connection_manager
|
||||||
|
from handlers.websocket_handler import websocket_handler
|
||||||
|
from utils import __version__
|
||||||
|
from utils.aes_utils import decrypt, encrypt
|
||||||
|
from utils.config import config
|
||||||
|
from utils.jsonrpc import (
|
||||||
|
JSONRPCProtocol,
|
||||||
|
)
|
||||||
|
from utils.logger import get_logger
|
||||||
|
from utils.util import get_local_ip
|
||||||
|
|
||||||
|
logger = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
async def validate_token_and_get_agent_id(websocket: WebSocket) -> str:
|
||||||
|
"""
|
||||||
|
验证token并获取agentId的公共方法
|
||||||
|
|
||||||
|
Args:
|
||||||
|
websocket: WebSocket连接对象
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 验证成功返回agentId,失败返回None
|
||||||
|
"""
|
||||||
|
token = websocket.query_params.get("token")
|
||||||
|
if not token:
|
||||||
|
logger.error("缺少token参数")
|
||||||
|
await websocket.close(code=1008, reason="缺少token参数")
|
||||||
|
return None
|
||||||
|
|
||||||
|
data = decrypt(config.get("server", "key", ""), token)
|
||||||
|
if not data:
|
||||||
|
logger.error(f"token解密失败: {token}")
|
||||||
|
await websocket.close(code=1008, reason="token解密失败")
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
data = json.loads(data)
|
||||||
|
agent_id = data.get("agentId")
|
||||||
|
if not agent_id:
|
||||||
|
logger.error("无对应agentId")
|
||||||
|
await websocket.close(code=1008, reason="无对应agentId")
|
||||||
|
return None
|
||||||
|
return agent_id
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logger.error("token数据格式错误")
|
||||||
|
await websocket.close(code=1008, reason="token数据格式错误")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI):
|
||||||
|
"""应用生命周期管理"""
|
||||||
|
# 启动时
|
||||||
|
logger.info("MCP Endpoint Server 正在启动...")
|
||||||
|
logger.info(f"=====下面的地址分别是智控台/单模块MCP接入点地址====")
|
||||||
|
local_ip = get_local_ip()
|
||||||
|
logger.info(
|
||||||
|
f"智控台MCP参数配置: http://{local_ip}:{config.getint('server', 'port', 8004)}/mcp_endpoint/health?key={config.get('server', 'key', '')}"
|
||||||
|
)
|
||||||
|
encrypted_token = encrypt(
|
||||||
|
config.get("server", "key", ""), '{"agentId":"single_module"}'
|
||||||
|
)
|
||||||
|
token = quote(encrypted_token)
|
||||||
|
logger.info(
|
||||||
|
f"单模块部署MCP接入点: ws://{local_ip}:{config.getint('server', 'port', 8004)}/mcp_endpoint/mcp/?token={token}"
|
||||||
|
)
|
||||||
|
logger.info(
|
||||||
|
"=====请根据具体部署选择使用,请勿泄露给任何人======",
|
||||||
|
)
|
||||||
|
yield
|
||||||
|
# 关闭时
|
||||||
|
logger.info("MCP Endpoint Server 已关闭")
|
||||||
|
|
||||||
|
|
||||||
|
# 创建FastAPI应用
|
||||||
|
app = FastAPI(
|
||||||
|
title="MCP Endpoint Server",
|
||||||
|
description="高效的WebSocket中转服务器",
|
||||||
|
version=__version__,
|
||||||
|
lifespan=lifespan,
|
||||||
|
)
|
||||||
|
|
||||||
|
# 配置CORS
|
||||||
|
if config.getboolean("security", "enable_cors", True):
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
allow_origins=[config.get("security", "allowed_origins", "*")],
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["*"],
|
||||||
|
allow_headers=["*"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
async def redirect_root():
|
||||||
|
"""根路径重定向到 /mcp_endpoint/"""
|
||||||
|
return RedirectResponse(url="/mcp_endpoint/")
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/mcp_endpoint/")
|
||||||
|
async def root():
|
||||||
|
"""根路径"""
|
||||||
|
response = JSONRPCProtocol.create_success_response(
|
||||||
|
result={
|
||||||
|
"message": "MCP Endpoint Server",
|
||||||
|
"version": __version__,
|
||||||
|
"status": "running",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_dict(response)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/mcp_endpoint/health")
|
||||||
|
async def health_check(key: str = None):
|
||||||
|
"""健康检查"""
|
||||||
|
# 验证key参数
|
||||||
|
expected_key = config.get("server", "key", "")
|
||||||
|
if not key or key != expected_key:
|
||||||
|
response = JSONRPCProtocol.create_error_response(
|
||||||
|
error_code=JSONRPCProtocol.AUTHENTICATION_ERROR,
|
||||||
|
error_message="密钥验证失败",
|
||||||
|
error_data={"details": "提供的密钥无效或缺失"},
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_dict(response)
|
||||||
|
|
||||||
|
stats = connection_manager.get_connection_stats()
|
||||||
|
response = JSONRPCProtocol.create_success_response(
|
||||||
|
result={"status": "success", "connections": stats}
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_dict(response)
|
||||||
|
|
||||||
|
|
||||||
|
@app.websocket("/mcp_endpoint/mcp/")
|
||||||
|
async def websocket_tool_endpoint(websocket: WebSocket):
|
||||||
|
"""工具端WebSocket端点"""
|
||||||
|
await websocket.accept()
|
||||||
|
|
||||||
|
# 获取agentId参数
|
||||||
|
agent_id = await validate_token_and_get_agent_id(websocket)
|
||||||
|
if not agent_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 注册连接
|
||||||
|
await connection_manager.register_tool_connection(agent_id, websocket)
|
||||||
|
logger.info(f"工具端连接已建立: {agent_id}")
|
||||||
|
|
||||||
|
# 处理消息
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
message = await websocket.receive_text()
|
||||||
|
await websocket_handler._handle_tool_message(agent_id, message)
|
||||||
|
except WebSocketDisconnect:
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理工具端消息时发生错误: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理工具端连接时发生错误: {e}")
|
||||||
|
finally:
|
||||||
|
await connection_manager.unregister_tool_connection(agent_id)
|
||||||
|
logger.info(f"工具端连接已关闭: {agent_id}")
|
||||||
|
|
||||||
|
|
||||||
|
@app.websocket("/mcp_endpoint/call/")
|
||||||
|
async def websocket_robot_endpoint(websocket: WebSocket):
|
||||||
|
"""小智端WebSocket端点"""
|
||||||
|
await websocket.accept()
|
||||||
|
|
||||||
|
# 获取agentId参数
|
||||||
|
agent_id = await validate_token_and_get_agent_id(websocket)
|
||||||
|
if not agent_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 注册连接并获取UUID
|
||||||
|
connection_uuid = await connection_manager.register_robot_connection(
|
||||||
|
agent_id, websocket
|
||||||
|
)
|
||||||
|
logger.info(f"小智端连接已建立: {agent_id} (UUID: {connection_uuid})")
|
||||||
|
|
||||||
|
# 处理消息
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
message = await websocket.receive_text()
|
||||||
|
await websocket_handler._handle_robot_message(
|
||||||
|
agent_id, message, connection_uuid
|
||||||
|
)
|
||||||
|
except WebSocketDisconnect:
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理小智端消息时发生错误: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理小智端连接时发生错误: {e}")
|
||||||
|
finally:
|
||||||
|
await connection_manager.unregister_robot_connection(connection_uuid)
|
||||||
|
logger.info(f"小智端连接已关闭: {agent_id} (UUID: {connection_uuid})")
|
||||||
|
|
||||||
|
|
||||||
|
def signal_handler(signum, frame):
|
||||||
|
"""信号处理器"""
|
||||||
|
logger.info(f"收到信号 {signum},正在关闭服务器...")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""主函数"""
|
||||||
|
# 设置uvicorn日志拦截
|
||||||
|
from utils.logger import logger_manager
|
||||||
|
|
||||||
|
logger_manager.setup_uvicorn_logging()
|
||||||
|
|
||||||
|
# 注册信号处理器
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
signal.signal(signal.SIGTERM, signal_handler)
|
||||||
|
|
||||||
|
# 获取配置
|
||||||
|
host = config.get("server", "host", "0.0.0.0")
|
||||||
|
port = config.getint("server", "port", 8004)
|
||||||
|
debug = config.getboolean("server", "debug", False)
|
||||||
|
|
||||||
|
logger.info(f"启动MCP Endpoint Server: {host}:{port}")
|
||||||
|
|
||||||
|
# 启动服务器
|
||||||
|
uvicorn.run(
|
||||||
|
"app:app",
|
||||||
|
host=host,
|
||||||
|
port=port,
|
||||||
|
reload=debug,
|
||||||
|
log_level=config.get("server", "log_level", "INFO").lower(),
|
||||||
|
access_log=False,
|
||||||
|
log_config=None, # 禁用uvicorn默认日志配置
|
||||||
|
use_colors=True, # 启用颜色支持
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
"""
|
||||||
|
连接管理器
|
||||||
|
负责管理WebSocket连接和消息转发
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import uuid
|
||||||
|
from typing import Dict, Any, List, Optional, Tuple
|
||||||
|
from websockets.server import WebSocketServerProtocol
|
||||||
|
from websockets.exceptions import ConnectionClosed
|
||||||
|
from utils.logger import get_logger
|
||||||
|
|
||||||
|
logger = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
class RobotConnection:
|
||||||
|
"""小智端连接信息"""
|
||||||
|
|
||||||
|
def __init__(self, websocket: WebSocketServerProtocol, agent_id: str):
|
||||||
|
self.websocket = websocket
|
||||||
|
self.agent_id = agent_id
|
||||||
|
self.connection_uuid = str(uuid.uuid4())
|
||||||
|
self.timestamp = time.time()
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectionManager:
|
||||||
|
"""连接管理器"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
# 工具端连接: {agentId: websocket}
|
||||||
|
self.tool_connections: Dict[str, WebSocketServerProtocol] = {}
|
||||||
|
# 小智端连接: {connection_uuid: RobotConnection}
|
||||||
|
self.robot_connections: Dict[str, RobotConnection] = {}
|
||||||
|
# 连接时间戳: {agentId: timestamp}
|
||||||
|
self.connection_timestamps: Dict[str, float] = {}
|
||||||
|
# 连接锁
|
||||||
|
self._lock = asyncio.Lock()
|
||||||
|
|
||||||
|
async def register_tool_connection(
|
||||||
|
self, agent_id: str, websocket: WebSocketServerProtocol
|
||||||
|
):
|
||||||
|
"""注册工具端连接"""
|
||||||
|
async with self._lock:
|
||||||
|
# 如果已存在连接,先关闭旧连接
|
||||||
|
if agent_id in self.tool_connections:
|
||||||
|
old_websocket = self.tool_connections[agent_id]
|
||||||
|
try:
|
||||||
|
await old_websocket.close(1000, "新连接替换")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"关闭旧工具端连接失败: {e}")
|
||||||
|
|
||||||
|
self.tool_connections[agent_id] = websocket
|
||||||
|
self.connection_timestamps[agent_id] = time.time()
|
||||||
|
logger.info(f"工具端连接已注册: {agent_id}")
|
||||||
|
|
||||||
|
async def register_robot_connection(
|
||||||
|
self, agent_id: str, websocket: WebSocketServerProtocol
|
||||||
|
) -> str:
|
||||||
|
"""注册小智端连接,返回分配的UUID"""
|
||||||
|
async with self._lock:
|
||||||
|
robot_conn = RobotConnection(websocket, agent_id)
|
||||||
|
self.robot_connections[robot_conn.connection_uuid] = robot_conn
|
||||||
|
self.connection_timestamps[agent_id] = time.time()
|
||||||
|
logger.info(
|
||||||
|
f"小智端连接已注册: {agent_id}, UUID: {robot_conn.connection_uuid}"
|
||||||
|
)
|
||||||
|
return robot_conn.connection_uuid
|
||||||
|
|
||||||
|
async def unregister_tool_connection(self, agent_id: str):
|
||||||
|
"""注销工具端连接"""
|
||||||
|
async with self._lock:
|
||||||
|
if agent_id in self.tool_connections:
|
||||||
|
del self.tool_connections[agent_id]
|
||||||
|
if agent_id in self.connection_timestamps:
|
||||||
|
del self.connection_timestamps[agent_id]
|
||||||
|
logger.info(f"工具端连接已注销: {agent_id}")
|
||||||
|
|
||||||
|
async def unregister_robot_connection(self, connection_uuid: str):
|
||||||
|
"""注销小智端连接"""
|
||||||
|
async with self._lock:
|
||||||
|
if connection_uuid in self.robot_connections:
|
||||||
|
robot_conn = self.robot_connections[connection_uuid]
|
||||||
|
del self.robot_connections[connection_uuid]
|
||||||
|
logger.info(
|
||||||
|
f"小智端连接已注销: {robot_conn.agent_id}, UUID: {connection_uuid}"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _transform_jsonrpc_id(self, original_id: Any, connection_uuid: str) -> str:
|
||||||
|
"""转换JSON-RPC ID"""
|
||||||
|
if isinstance(original_id, int):
|
||||||
|
return f"{connection_uuid}_n_{original_id}"
|
||||||
|
elif isinstance(original_id, str):
|
||||||
|
return f"{connection_uuid}_s_{original_id}"
|
||||||
|
else:
|
||||||
|
# 其他类型转换为字符串
|
||||||
|
return f"{connection_uuid}_s_{str(original_id)}"
|
||||||
|
|
||||||
|
def _restore_jsonrpc_id(self, transformed_id: str) -> Tuple[Optional[str], Any]:
|
||||||
|
"""还原JSON-RPC ID,返回(connection_uuid, original_id)"""
|
||||||
|
if not transformed_id or "_" not in transformed_id:
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
# 解析格式: uuid_type_original_id
|
||||||
|
parts = transformed_id.split("_", 2)
|
||||||
|
if len(parts) < 3:
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
connection_uuid = parts[0]
|
||||||
|
id_type = parts[1]
|
||||||
|
original_id_part = parts[2]
|
||||||
|
|
||||||
|
if id_type == "n":
|
||||||
|
# 数字类型
|
||||||
|
try:
|
||||||
|
original_id = int(original_id_part)
|
||||||
|
except ValueError:
|
||||||
|
original_id = original_id_part
|
||||||
|
elif id_type == "s":
|
||||||
|
# 字符串类型
|
||||||
|
if original_id_part == "null":
|
||||||
|
original_id = None
|
||||||
|
else:
|
||||||
|
original_id = original_id_part
|
||||||
|
else:
|
||||||
|
# 未知类型,保持原样
|
||||||
|
original_id = original_id_part
|
||||||
|
|
||||||
|
return connection_uuid, original_id
|
||||||
|
|
||||||
|
def transform_jsonrpc_message(
|
||||||
|
self, message: Dict[str, Any], connection_uuid: str
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
"""转换JSON-RPC消息的ID"""
|
||||||
|
if not isinstance(message, dict):
|
||||||
|
return message
|
||||||
|
|
||||||
|
# 创建消息副本
|
||||||
|
transformed_message = message.copy()
|
||||||
|
|
||||||
|
# 转换ID
|
||||||
|
if "id" in transformed_message:
|
||||||
|
original_id = transformed_message["id"]
|
||||||
|
if original_id:
|
||||||
|
transformed_message["id"] = self._transform_jsonrpc_id(
|
||||||
|
original_id, connection_uuid
|
||||||
|
)
|
||||||
|
|
||||||
|
return transformed_message
|
||||||
|
|
||||||
|
def restore_jsonrpc_message(
|
||||||
|
self, message: Dict[str, Any]
|
||||||
|
) -> Tuple[Optional[str], Dict[str, Any]]:
|
||||||
|
"""还原JSON-RPC消息的ID,返回(connection_uuid, restored_message)"""
|
||||||
|
if not isinstance(message, dict):
|
||||||
|
return None, message
|
||||||
|
|
||||||
|
# 创建消息副本
|
||||||
|
restored_message = message.copy()
|
||||||
|
|
||||||
|
# 还原ID
|
||||||
|
if "id" in restored_message:
|
||||||
|
transformed_id = restored_message["id"]
|
||||||
|
connection_uuid, original_id = self._restore_jsonrpc_id(transformed_id)
|
||||||
|
if connection_uuid:
|
||||||
|
restored_message["id"] = original_id
|
||||||
|
return connection_uuid, restored_message
|
||||||
|
|
||||||
|
return None, restored_message
|
||||||
|
|
||||||
|
async def forward_to_tool(self, agent_id: str, message: Any) -> bool:
|
||||||
|
"""转发消息给工具端"""
|
||||||
|
async with self._lock:
|
||||||
|
if agent_id not in self.tool_connections:
|
||||||
|
logger.warning(f"工具端连接不存在: {agent_id}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
websocket = self.tool_connections[agent_id]
|
||||||
|
try:
|
||||||
|
# 确保消息是字符串格式
|
||||||
|
if isinstance(message, dict):
|
||||||
|
message_str = json.dumps(message, ensure_ascii=False)
|
||||||
|
elif isinstance(message, str):
|
||||||
|
message_str = message
|
||||||
|
else:
|
||||||
|
message_str = str(message)
|
||||||
|
|
||||||
|
await websocket.send_text(message_str)
|
||||||
|
logger.debug(f"消息已转发给工具端 {agent_id}: {message_str[:100]}...")
|
||||||
|
return True
|
||||||
|
except ConnectionClosed:
|
||||||
|
logger.warning(f"工具端连接已关闭: {agent_id}")
|
||||||
|
await self.unregister_tool_connection(agent_id)
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"转发消息给工具端失败: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
async def forward_to_robot_by_uuid(
|
||||||
|
self, connection_uuid: str, message: Any
|
||||||
|
) -> bool:
|
||||||
|
"""根据UUID转发消息给特定的小智端连接"""
|
||||||
|
async with self._lock:
|
||||||
|
if connection_uuid not in self.robot_connections:
|
||||||
|
logger.warning(f"小智端连接不存在: {connection_uuid}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
robot_conn = self.robot_connections[connection_uuid]
|
||||||
|
try:
|
||||||
|
# 确保消息是字符串格式
|
||||||
|
if isinstance(message, dict):
|
||||||
|
message_str = json.dumps(message, ensure_ascii=False)
|
||||||
|
elif isinstance(message, str):
|
||||||
|
message_str = message
|
||||||
|
else:
|
||||||
|
message_str = str(message)
|
||||||
|
|
||||||
|
await robot_conn.websocket.send_text(message_str)
|
||||||
|
logger.debug(
|
||||||
|
f"消息已转发给小智端 {robot_conn.agent_id} (UUID: {connection_uuid}): {message_str[:100]}..."
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
except ConnectionClosed:
|
||||||
|
logger.warning(f"小智端连接已关闭: {connection_uuid}")
|
||||||
|
await self.unregister_robot_connection(connection_uuid)
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"转发消息给小智端失败: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_connection_stats(self) -> Dict[str, Any]:
|
||||||
|
"""获取连接统计信息"""
|
||||||
|
# 统计每个agent_id的连接数
|
||||||
|
agent_connection_counts = {}
|
||||||
|
for robot_conn in self.robot_connections.values():
|
||||||
|
agent_id = robot_conn.agent_id
|
||||||
|
agent_connection_counts[agent_id] = (
|
||||||
|
agent_connection_counts.get(agent_id, 0) + 1
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"tool_connections": len(self.tool_connections),
|
||||||
|
"robot_connections": len(self.robot_connections),
|
||||||
|
"total_connections": len(self.tool_connections)
|
||||||
|
+ len(self.robot_connections),
|
||||||
|
"robot_connections_by_agent": agent_connection_counts,
|
||||||
|
}
|
||||||
|
|
||||||
|
def is_tool_connected(self, agent_id: str) -> bool:
|
||||||
|
"""检查工具端是否已连接"""
|
||||||
|
return agent_id in self.tool_connections
|
||||||
|
|
||||||
|
def is_robot_connected(self, agent_id: str) -> bool:
|
||||||
|
"""检查小智端是否已连接"""
|
||||||
|
return any(
|
||||||
|
conn.agent_id == agent_id for conn in self.robot_connections.values()
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_robot_connections_by_agent(self, agent_id: str) -> List[RobotConnection]:
|
||||||
|
"""获取指定agent_id的所有小智端连接"""
|
||||||
|
return [
|
||||||
|
conn
|
||||||
|
for conn in self.robot_connections.values()
|
||||||
|
if conn.agent_id == agent_id
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# 全局连接管理器实例
|
||||||
|
connection_manager = ConnectionManager()
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
[server]
|
||||||
|
host = 127.0.0.1
|
||||||
|
port = 8004
|
||||||
|
debug = false
|
||||||
|
log_level = INFO
|
||||||
|
key = f4222eccc20e4361861d88b121af07f4
|
||||||
|
|
||||||
|
[websocket]
|
||||||
|
max_connections = 1000
|
||||||
|
ping_interval = 30
|
||||||
|
ping_timeout = 10
|
||||||
|
close_timeout = 10
|
||||||
|
|
||||||
|
[security]
|
||||||
|
allowed_origins = *
|
||||||
|
enable_cors = true
|
||||||
|
|
||||||
|
[logging]
|
||||||
|
log_file = logs/mcp_server.log
|
||||||
|
max_file_size = 10MB
|
||||||
|
backup_count = 5
|
||||||
|
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
"""
|
||||||
|
WebSocket处理器
|
||||||
|
处理工具端和小智端的WebSocket连接
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from core.connection_manager import connection_manager
|
||||||
|
from utils.logger import get_logger
|
||||||
|
from utils.jsonrpc import (
|
||||||
|
create_tool_not_connected_error,
|
||||||
|
create_forward_failed_error,
|
||||||
|
)
|
||||||
|
|
||||||
|
logger = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
class WebSocketHandler:
|
||||||
|
"""WebSocket处理器"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
async def _handle_tool_message(self, agent_id: str, message: str):
|
||||||
|
"""处理工具端消息"""
|
||||||
|
try:
|
||||||
|
# 解析消息
|
||||||
|
logger.debug(f"收到工具端消息: {agent_id} - {message}")
|
||||||
|
|
||||||
|
# 尝试解析JSON-RPC响应消息
|
||||||
|
try:
|
||||||
|
message_data = json.loads(message)
|
||||||
|
# 还原JSON-RPC ID并获取目标连接UUID
|
||||||
|
connection_uuid, restored_message = (
|
||||||
|
connection_manager.restore_jsonrpc_message(message_data)
|
||||||
|
)
|
||||||
|
|
||||||
|
if connection_uuid:
|
||||||
|
# 有特定的目标连接,发送给该连接
|
||||||
|
success = await connection_manager.forward_to_robot_by_uuid(
|
||||||
|
connection_uuid, restored_message
|
||||||
|
)
|
||||||
|
if not success:
|
||||||
|
logger.error(f"转发消息给特定小智端连接失败: {connection_uuid}")
|
||||||
|
else:
|
||||||
|
logger.error(f"没有特定目标,无法转发消息")
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
# 如果不是JSON格式,按原来的方式处理
|
||||||
|
logger.error(f"由于消息不是JSON格式,已忽略: {message}")
|
||||||
|
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logger.error(f"工具端消息格式错误: {message}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理工具端消息时发生错误: {e}")
|
||||||
|
|
||||||
|
async def _handle_robot_message(
|
||||||
|
self, agent_id: str, message: str, connection_uuid: str
|
||||||
|
):
|
||||||
|
"""处理小智端消息"""
|
||||||
|
try:
|
||||||
|
# 解析消息
|
||||||
|
logger.debug(
|
||||||
|
f"收到小智端消息: {agent_id} (UUID: {connection_uuid}) - {message}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 尝试解析JSON-RPC消息以获取id
|
||||||
|
request_id = None
|
||||||
|
transformed_message = message
|
||||||
|
try:
|
||||||
|
message_data = json.loads(message)
|
||||||
|
request_id = message_data.get("id")
|
||||||
|
|
||||||
|
# 转换JSON-RPC ID
|
||||||
|
transformed_message_data = connection_manager.transform_jsonrpc_message(
|
||||||
|
message_data, connection_uuid
|
||||||
|
)
|
||||||
|
transformed_message = json.dumps(
|
||||||
|
transformed_message_data, ensure_ascii=False
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.debug(
|
||||||
|
f"转换后的消息ID: {message_data.get('id')} -> {transformed_message_data.get('id')}"
|
||||||
|
)
|
||||||
|
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logger.warning(f"小智端消息不是有效的JSON格式: {message}")
|
||||||
|
# 如果消息不是JSON格式,仍然检查工具端连接状态
|
||||||
|
|
||||||
|
# 检查是否有对应的工具端连接
|
||||||
|
if not connection_manager.is_tool_connected(agent_id):
|
||||||
|
logger.warning(f"工具端未连接: {agent_id}")
|
||||||
|
# 发送JSON-RPC格式的错误消息给小智端
|
||||||
|
error_message = create_tool_not_connected_error(request_id, agent_id)
|
||||||
|
await connection_manager.forward_to_robot_by_uuid(
|
||||||
|
connection_uuid, error_message
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# 转发转换后的消息给工具端
|
||||||
|
success = await connection_manager.forward_to_tool(
|
||||||
|
agent_id, transformed_message
|
||||||
|
)
|
||||||
|
if not success:
|
||||||
|
logger.error(f"转发消息给工具端失败: {agent_id}")
|
||||||
|
# 发送JSON-RPC格式的错误消息给小智端
|
||||||
|
error_message = create_forward_failed_error(request_id, agent_id)
|
||||||
|
await connection_manager.forward_to_robot_by_uuid(
|
||||||
|
connection_uuid, error_message
|
||||||
|
)
|
||||||
|
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
logger.error(f"小智端消息格式错误: {message}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理小智端消息时发生错误: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
# 全局WebSocket处理器实例
|
||||||
|
websocket_handler = WebSocketHandler()
|
||||||
@@ -0,0 +1,778 @@
|
|||||||
|
2025-10-31 14:39:23 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 127.0.0.1:8004
|
||||||
|
2025-10-31 14:39:23 [0.0.6][uvicorn.config] ERROR - Error loading ASGI app. Could not import module "src.server".
|
||||||
|
2025-10-31 06:39:59 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-10-31 06:39:59 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-10-31 06:39:59 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-10-31 06:39:59 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-10-31 06:39:59 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-10-31 06:39:59 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.8:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-10-31 06:39:59 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.8:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-10-31 06:39:59 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-10-31 06:39:59 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-10-31 06:39:59 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-10-31 06:41:53 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-10-31 06:41:53 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-10-31 06:41:53 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-10-31 06:41:53 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-10-31 06:41:53 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-10-31 06:41:55 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-10-31 06:41:56 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-10-31 06:41:56 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-10-31 06:41:56 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-10-31 06:41:56 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-10-31 06:41:56 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-10-31 06:41:56 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.8:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-10-31 06:41:56 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.8:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-10-31 06:41:56 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-10-31 06:41:56 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-10-31 06:41:56 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-10-31 07:12:26 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-10-31 07:12:26 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-10-31 07:12:26 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-10-31 07:12:26 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-10-31 07:12:26 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-10-31 07:15:09 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-10-31 07:15:10 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-10-31 07:15:10 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-10-31 07:15:10 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-10-31 07:15:10 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-10-31 07:15:10 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-10-31 07:15:10 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.9:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-10-31 07:15:10 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.9:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-10-31 07:15:10 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-10-31 07:15:10 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-10-31 07:15:10 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-10-31 09:47:53 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-10-31 09:47:53 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-10-31 09:47:53 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-10-31 09:47:53 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-10-31 09:47:53 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-03 01:54:05 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 01:54:05 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 01:54:05 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 01:54:05 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 01:54:05 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 01:54:05 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 01:54:05 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.5:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 01:54:05 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.5:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 01:54:05 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 01:54:05 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 01:54:05 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 08:36:00 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-03 08:36:00 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-03 08:36:00 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-03 08:36:00 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-03 08:36:00 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-03 08:36:26 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 08:36:26 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 08:36:26 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 08:36:26 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 08:36:26 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 08:36:26 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 08:36:26 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.5:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 08:36:26 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.5:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 08:36:26 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 08:36:26 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 08:36:26 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 08:38:07 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 08:38:07 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 08:38:07 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 08:38:07 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 08:38:07 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 08:38:07 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 08:38:07 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.5:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 08:38:07 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.5:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 08:38:07 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 08:38:07 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 08:38:07 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 09:02:40 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-03 09:02:41 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-03 09:02:41 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-03 09:02:41 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-03 09:02:41 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-03 09:03:16 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 09:03:16 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 09:03:16 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 09:03:16 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 09:03:16 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 09:03:16 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 09:03:16 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.5:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 09:03:16 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.5:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 09:03:16 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 09:03:16 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 09:03:16 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 09:51:11 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-03 09:51:11 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-03 09:51:11 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-03 09:51:11 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-03 09:51:11 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-03 09:51:32 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 09:51:32 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 09:51:32 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 09:51:32 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 09:51:32 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 09:51:32 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 09:51:32 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.4:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 09:51:32 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.4:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 09:51:32 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 09:51:32 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 09:51:32 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 09:58:47 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-03 09:58:47 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-03 09:58:47 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-03 09:58:47 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-03 09:58:47 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-03 09:59:03 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-03 09:59:03 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-03 09:59:03 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-03 09:59:03 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-03 09:59:03 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-03 09:59:03 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-03 09:59:03 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.7:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-03 09:59:03 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.7:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-03 09:59:03 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-03 09:59:03 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-03 09:59:03 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-03 09:59:55 [0.0.6][logging] INFO - ('172.18.0.10', 33774) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 09:59:55 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 09:59:55 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 09:59:55 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 09:59:57 [0.0.6][logging] INFO - ('172.18.0.10', 33780) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 09:59:57 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 09:59:57 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 09:59:57 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:00:01 [0.0.6][logging] INFO - ('172.18.0.10', 33794) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:00:01 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:00:01 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:00:01 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:00:12 [0.0.6][logging] INFO - ('172.18.0.10', 33362) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:00:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:00:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:00:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:00:28 [0.0.6][logging] INFO - ('172.18.0.10', 59602) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:00:28 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:00:28 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:00:28 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:01:03 [0.0.6][logging] INFO - ('172.18.0.10', 46950) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:01:03 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:01:03 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:01:03 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:02:12 [0.0.6][logging] INFO - ('172.18.0.10', 38688) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:02:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:02:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:02:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:04:36 [0.0.6][logging] INFO - ('172.18.0.10', 60918) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:04:36 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:04:36 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:04:36 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:09:16 [0.0.6][logging] INFO - ('172.18.0.10', 46652) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:09:16 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:09:16 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:09:16 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:18:35 [0.0.6][logging] INFO - ('172.18.0.10', 34952) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:18:35 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:18:35 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:18:35 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:29:25 [0.0.6][logging] INFO - ('172.18.0.10', 41772) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:29:25 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:29:25 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:29:25 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:40:21 [0.0.6][logging] INFO - ('172.18.0.10', 41772) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:40:21 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:40:21 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:40:21 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 10:51:15 [0.0.6][logging] INFO - ('172.18.0.10', 54638) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 10:51:15 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 10:51:15 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 10:51:15 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:02:12 [0.0.6][logging] INFO - ('172.18.0.10', 39022) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:02:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:02:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:02:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:13:08 [0.0.6][logging] INFO - ('172.18.0.10', 56952) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:13:08 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:13:08 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:13:08 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:24:05 [0.0.6][logging] INFO - ('172.18.0.10', 57290) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:24:05 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:24:05 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:24:05 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:35:01 [0.0.6][logging] INFO - ('172.18.0.10', 52482) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:35:01 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:35:01 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:35:01 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:45:59 [0.0.6][logging] INFO - ('172.18.0.10', 36152) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:45:59 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:45:59 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:45:59 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 11:56:58 [0.0.6][logging] INFO - ('172.18.0.10', 38246) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 11:56:58 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 11:56:58 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 11:56:58 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 12:07:57 [0.0.6][logging] INFO - ('172.18.0.10', 39284) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 12:07:57 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 12:07:57 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 12:07:57 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 12:18:56 [0.0.6][logging] INFO - ('172.18.0.10', 38896) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 12:18:56 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 12:18:56 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 12:18:56 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 12:29:56 [0.0.6][logging] INFO - ('172.18.0.10', 57660) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 12:29:56 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 12:29:56 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 12:29:56 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 12:40:56 [0.0.6][logging] INFO - ('172.18.0.10', 42822) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 12:40:56 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 12:40:56 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 12:40:56 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 12:51:52 [0.0.6][logging] INFO - ('172.18.0.10', 60762) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 12:51:52 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 12:51:52 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 12:51:52 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:02:49 [0.0.6][logging] INFO - ('172.18.0.10', 48016) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:02:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:02:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:02:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:13:44 [0.0.6][logging] INFO - ('172.18.0.10', 47830) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:13:44 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:13:44 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:13:44 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:24:40 [0.0.6][logging] INFO - ('172.18.0.10', 42664) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:24:40 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:24:40 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:24:40 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:35:38 [0.0.6][logging] INFO - ('172.18.0.10', 37546) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:35:38 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:35:38 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:35:38 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:46:35 [0.0.6][logging] INFO - ('172.18.0.10', 38050) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:46:35 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:46:35 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:46:35 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 13:56:48 [0.0.6][logging] INFO - ('172.18.0.10', 51598) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 13:56:48 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 13:56:48 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 13:56:48 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:06:49 [0.0.6][logging] INFO - ('172.18.0.10', 35434) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:06:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:06:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:06:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:16:49 [0.0.6][logging] INFO - ('172.18.0.10', 39798) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:16:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:16:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:16:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:26:49 [0.0.6][logging] INFO - ('172.18.0.10', 46696) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:26:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:26:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:26:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:36:49 [0.0.6][logging] INFO - ('172.18.0.10', 52006) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:36:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:36:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:36:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:46:50 [0.0.6][logging] INFO - ('172.18.0.10', 38752) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:46:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:46:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:46:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 14:56:50 [0.0.6][logging] INFO - ('172.18.0.10', 34576) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 14:56:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 14:56:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 14:56:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:06:50 [0.0.6][logging] INFO - ('172.18.0.10', 38102) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:06:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:06:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:06:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:16:51 [0.0.6][logging] INFO - ('172.18.0.10', 43402) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:16:51 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:16:51 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:16:51 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:26:51 [0.0.6][logging] INFO - ('172.18.0.10', 51620) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:26:51 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:26:51 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:26:51 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:36:52 [0.0.6][logging] INFO - ('172.18.0.10', 33372) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:36:52 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:36:52 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:36:52 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:46:52 [0.0.6][logging] INFO - ('172.18.0.10', 34550) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:46:52 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:46:52 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:46:52 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 15:56:53 [0.0.6][logging] INFO - ('172.18.0.10', 41424) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 15:56:53 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 15:56:53 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 15:56:53 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:06:54 [0.0.6][logging] INFO - ('172.18.0.10', 35624) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:06:54 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:06:54 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:06:54 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:16:54 [0.0.6][logging] INFO - ('172.18.0.10', 55244) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:16:54 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:16:54 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:16:54 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:26:55 [0.0.6][logging] INFO - ('172.18.0.10', 55950) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:26:55 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:26:55 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:26:55 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:36:56 [0.0.6][logging] INFO - ('172.18.0.10', 48478) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:36:56 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:36:56 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:36:56 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:46:57 [0.0.6][logging] INFO - ('172.18.0.10', 40862) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:46:57 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:46:57 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:46:57 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 16:56:58 [0.0.6][logging] INFO - ('172.18.0.10', 37676) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 16:56:58 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 16:56:58 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 16:56:58 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:06:59 [0.0.6][logging] INFO - ('172.18.0.10', 37758) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:06:59 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:06:59 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:06:59 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:17:00 [0.0.6][logging] INFO - ('172.18.0.10', 59096) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:17:00 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:17:00 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:17:00 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:27:01 [0.0.6][logging] INFO - ('172.18.0.10', 57200) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:27:01 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:27:01 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:27:01 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:37:03 [0.0.6][logging] INFO - ('172.18.0.10', 54724) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:37:03 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:37:03 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:37:03 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:47:04 [0.0.6][logging] INFO - ('172.18.0.10', 42634) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:47:04 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:47:04 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:47:04 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 17:57:05 [0.0.6][logging] INFO - ('172.18.0.10', 55540) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 17:57:05 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 17:57:05 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 17:57:05 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:07:07 [0.0.6][logging] INFO - ('172.18.0.10', 49926) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:07:07 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:07:07 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:07:07 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:17:08 [0.0.6][logging] INFO - ('172.18.0.10', 38836) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:17:08 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:17:08 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:17:08 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:27:10 [0.0.6][logging] INFO - ('172.18.0.10', 39552) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:27:10 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:27:10 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:27:10 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:37:12 [0.0.6][logging] INFO - ('172.18.0.10', 44082) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:37:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:37:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:37:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:47:14 [0.0.6][logging] INFO - ('172.18.0.10', 45024) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:47:14 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:47:14 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:47:14 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 18:57:15 [0.0.6][logging] INFO - ('172.18.0.10', 51342) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 18:57:15 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 18:57:15 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 18:57:15 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:07:17 [0.0.6][logging] INFO - ('172.18.0.10', 52246) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:07:17 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:07:17 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:07:17 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:17:19 [0.0.6][logging] INFO - ('172.18.0.10', 40578) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:17:19 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:17:19 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:17:19 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:27:22 [0.0.6][logging] INFO - ('172.18.0.10', 35984) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:27:22 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:27:22 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:27:22 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:37:24 [0.0.6][logging] INFO - ('172.18.0.10', 57670) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:37:24 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:37:24 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:37:24 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:47:26 [0.0.6][logging] INFO - ('172.18.0.10', 53822) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:47:26 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:47:26 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:47:26 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 19:57:28 [0.0.6][logging] INFO - ('172.18.0.10', 46848) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 19:57:28 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 19:57:28 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 19:57:28 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:07:31 [0.0.6][logging] INFO - ('172.18.0.10', 49986) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:07:31 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:07:31 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:07:31 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:17:33 [0.0.6][logging] INFO - ('172.18.0.10', 46008) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:17:33 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:17:33 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:17:33 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:27:35 [0.0.6][logging] INFO - ('172.18.0.10', 49254) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:27:35 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:27:35 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:27:35 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:37:38 [0.0.6][logging] INFO - ('172.18.0.10', 34218) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:37:38 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:37:38 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:37:38 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:47:41 [0.0.6][logging] INFO - ('172.18.0.10', 35518) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:47:41 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:47:41 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:47:41 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 20:57:43 [0.0.6][logging] INFO - ('172.18.0.10', 58096) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 20:57:43 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 20:57:43 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 20:57:43 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:07:46 [0.0.6][logging] INFO - ('172.18.0.10', 42942) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:07:46 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:07:46 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:07:46 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:17:49 [0.0.6][logging] INFO - ('172.18.0.10', 56536) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:17:49 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:17:49 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:17:49 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:27:52 [0.0.6][logging] INFO - ('172.18.0.10', 38202) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:27:52 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:27:52 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:27:52 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:37:55 [0.0.6][logging] INFO - ('172.18.0.10', 34984) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:37:55 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:37:55 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:37:55 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:47:58 [0.0.6][logging] INFO - ('172.18.0.10', 41392) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:47:58 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:47:58 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:47:58 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 21:58:01 [0.0.6][logging] INFO - ('172.18.0.10', 55616) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 21:58:01 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 21:58:01 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 21:58:01 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:08:04 [0.0.6][logging] INFO - ('172.18.0.10', 45020) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:08:04 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:08:04 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:08:04 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:18:08 [0.0.6][logging] INFO - ('172.18.0.10', 57632) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:18:08 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:18:08 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:18:08 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:28:13 [0.0.6][logging] INFO - ('172.18.0.10', 55672) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:28:13 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:28:13 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:28:13 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:38:23 [0.0.6][logging] INFO - ('172.18.0.10', 56638) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:38:23 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:38:23 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:38:23 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:48:36 [0.0.6][logging] INFO - ('172.18.0.10', 33558) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:48:36 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:48:36 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:48:36 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 22:58:50 [0.0.6][logging] INFO - ('172.18.0.10', 34622) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 22:58:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 22:58:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 22:58:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 23:09:04 [0.0.6][logging] INFO - ('172.18.0.10', 52642) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 23:09:04 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 23:09:04 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 23:09:04 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 23:19:19 [0.0.6][logging] INFO - ('172.18.0.10', 35700) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 23:19:19 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 23:19:19 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 23:19:19 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 23:29:35 [0.0.6][logging] INFO - ('172.18.0.10', 59092) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 23:29:35 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 23:29:35 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 23:29:35 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 23:39:50 [0.0.6][logging] INFO - ('172.18.0.10', 59886) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 23:39:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 23:39:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 23:39:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-03 23:50:06 [0.0.6][logging] INFO - ('172.18.0.10', 59722) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-03 23:50:06 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-03 23:50:06 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-03 23:50:06 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:00:23 [0.0.6][logging] INFO - ('172.18.0.10', 55050) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:00:23 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:00:23 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:00:23 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:10:39 [0.0.6][logging] INFO - ('172.18.0.10', 33866) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:10:39 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:10:39 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:10:39 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:20:56 [0.0.6][logging] INFO - ('172.18.0.10', 46180) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:20:56 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:20:56 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:20:56 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:31:14 [0.0.6][logging] INFO - ('172.18.0.10', 41228) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:31:14 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:31:14 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:31:14 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:41:32 [0.0.6][logging] INFO - ('172.18.0.10', 35724) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:41:32 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:41:32 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:41:32 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:51:50 [0.0.6][logging] INFO - ('172.18.0.10', 35948) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 00:51:50 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 00:51:50 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 00:51:50 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 00:58:12 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-04 00:58:12 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-04 00:58:12 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-04 00:58:12 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-04 00:58:12 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-04 01:45:06 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-04 01:45:06 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-04 01:45:06 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-04 01:45:06 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-04 01:45:06 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-04 01:45:06 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-04 01:45:06 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.10:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-04 01:45:06 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.10:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-04 01:45:06 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-04 01:45:06 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-04 01:45:06 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - ('172.18.0.8', 45144) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - ('172.18.0.8', 45158) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - ('172.18.0.8', 45172) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:14 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - ('172.18.0.8', 45184) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:14 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:14 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - ('172.18.0.8', 45196) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:19 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - ('172.18.0.8', 45210) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:19 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:19 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - ('172.18.0.8', 41914) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:27 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - ('172.18.0.8', 41928) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-04 01:45:27 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:27 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-04 01:45:37 [0.0.6][uvicorn.server] INFO - Shutting down
|
||||||
|
2025-11-04 01:45:37 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application shutdown.
|
||||||
|
2025-11-04 01:45:37 [0.0.6][app] INFO - MCP Endpoint Server 已关闭
|
||||||
|
2025-11-04 01:45:37 [0.0.6][uvicorn.lifespan.on] INFO - Application shutdown complete.
|
||||||
|
2025-11-04 01:45:37 [0.0.6][uvicorn.server] INFO - Finished server process [1]
|
||||||
|
2025-11-04 01:46:30 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-04 01:46:31 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-04 01:46:31 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-04 01:46:31 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-04 01:46:31 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-04 01:46:31 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-04 01:46:31 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.3:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-04 01:46:31 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.3:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-04 01:46:31 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-04 01:46:31 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-04 01:46:31 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-05 01:45:02 [0.0.6][utils.logger] INFO - Logger test message
|
||||||
|
2025-11-05 01:45:02 [0.0.6][__main__] INFO - 启动MCP Endpoint Server: 0.0.0.0:8004
|
||||||
|
2025-11-05 01:45:02 [0.0.6][uvicorn.server] INFO - Started server process [1]
|
||||||
|
2025-11-05 01:45:02 [0.0.6][uvicorn.lifespan.on] INFO - Waiting for application startup.
|
||||||
|
2025-11-05 01:45:02 [0.0.6][app] INFO - MCP Endpoint Server 正在启动...
|
||||||
|
2025-11-05 01:45:02 [0.0.6][app] INFO - =====下面的地址分别是智控台/单模块MCP接入点地址====
|
||||||
|
2025-11-05 01:45:02 [0.0.6][app] INFO - 智控台MCP参数配置: http://172.18.0.9:8004/mcp_endpoint/health?key=3d880556c4f3470b8b2242d0db0971f9
|
||||||
|
2025-11-05 01:45:02 [0.0.6][app] INFO - 单模块部署MCP接入点: ws://172.18.0.9:8004/mcp_endpoint/mcp/?token=BnFypoQ5p4qy2Ir6Hvqg4jxQbSfuyFYiF2fQ/pCPmnw%3D
|
||||||
|
2025-11-05 01:45:02 [0.0.6][app] INFO - =====请根据具体部署选择使用,请勿泄露给任何人======
|
||||||
|
2025-11-05 01:45:02 [0.0.6][uvicorn.lifespan.on] INFO - Application startup complete.
|
||||||
|
2025-11-05 01:45:02 [0.0.6][uvicorn.server] INFO - Uvicorn running on http://0.0.0.0:8004 (Press CTRL+C to quit)
|
||||||
|
2025-11-05 01:45:09 [0.0.6][logging] INFO - ('172.18.0.8', 49452) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:45:09 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:45:09 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:45:09 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:45:11 [0.0.6][logging] INFO - ('172.18.0.8', 49456) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:45:11 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:45:11 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:45:11 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:45:15 [0.0.6][logging] INFO - ('172.18.0.8', 49460) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:45:15 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:45:15 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:45:15 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:45:23 [0.0.6][logging] INFO - ('172.18.0.8', 40690) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:45:23 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:45:23 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:45:23 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:45:42 [0.0.6][logging] INFO - ('172.18.0.8', 60058) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:45:42 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:45:42 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:45:42 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:46:17 [0.0.6][logging] INFO - ('172.18.0.8', 56204) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:46:17 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:46:17 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:46:17 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:47:26 [0.0.6][logging] INFO - ('172.18.0.8', 55854) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:47:26 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:47:26 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:47:26 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:49:45 [0.0.6][logging] INFO - ('172.18.0.8', 33270) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:49:45 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:49:45 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:49:45 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 01:54:26 [0.0.6][logging] INFO - ('172.18.0.8', 33764) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 01:54:26 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 01:54:26 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 01:54:26 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:03:44 [0.0.6][logging] INFO - ('172.18.0.8', 35806) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:03:44 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:03:44 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:03:44 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:14:39 [0.0.6][logging] INFO - ('172.18.0.8', 51698) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:14:39 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:14:39 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:14:39 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:25:34 [0.0.6][logging] INFO - ('172.18.0.8', 53374) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:25:34 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:25:34 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:25:34 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:36:28 [0.0.6][logging] INFO - ('172.18.0.8', 55554) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:36:28 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:36:28 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:36:28 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:47:23 [0.0.6][logging] INFO - ('172.18.0.8', 44798) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:47:23 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:47:23 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:47:23 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 02:58:17 [0.0.6][logging] INFO - ('172.18.0.8', 53318) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 02:58:17 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 02:58:17 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 02:58:17 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 03:09:12 [0.0.6][logging] INFO - ('172.18.0.8', 49218) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 03:09:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 03:09:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 03:09:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 03:20:07 [0.0.6][logging] INFO - ('172.18.0.8', 36586) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 03:20:07 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 03:20:07 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 03:20:07 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 03:31:12 [0.0.6][logging] INFO - ('172.18.0.8', 46802) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 03:31:12 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 03:31:12 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 03:31:12 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 03:42:18 [0.0.6][logging] INFO - ('172.18.0.8', 41244) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 03:42:18 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 03:42:18 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 03:42:19 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 03:53:25 [0.0.6][logging] INFO - ('172.18.0.8', 45432) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 03:53:25 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 03:53:25 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 03:53:25 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 04:04:32 [0.0.6][logging] INFO - ('172.18.0.8', 41128) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 04:04:32 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 04:04:32 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 04:04:32 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 04:15:39 [0.0.6][logging] INFO - ('172.18.0.8', 35856) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 04:15:39 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 04:15:39 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 04:15:39 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 04:26:45 [0.0.6][logging] INFO - ('172.18.0.8', 39766) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 04:26:45 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 04:26:45 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 04:26:46 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 04:37:51 [0.0.6][logging] INFO - ('172.18.0.8', 54630) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 04:37:51 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 04:37:51 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 04:37:51 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 04:48:57 [0.0.6][logging] INFO - ('172.18.0.8', 39460) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 04:48:57 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 04:48:57 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 04:48:57 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:00:04 [0.0.6][logging] INFO - ('172.18.0.8', 49738) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:00:04 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:00:04 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:00:04 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:11:08 [0.0.6][logging] INFO - ('172.18.0.8', 48464) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:11:08 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:11:08 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:11:08 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:22:13 [0.0.6][logging] INFO - ('172.18.0.8', 58710) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:22:13 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:22:13 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:22:13 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:33:20 [0.0.6][logging] INFO - ('172.18.0.8', 34964) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:33:20 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:33:20 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:33:20 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:44:26 [0.0.6][logging] INFO - ('172.18.0.8', 53732) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:44:26 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:44:26 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:44:26 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 05:55:33 [0.0.6][logging] INFO - ('172.18.0.8', 49772) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 05:55:33 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 05:55:33 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 05:55:33 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 06:06:40 [0.0.6][logging] INFO - ('172.18.0.8', 51164) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 06:06:40 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 06:06:40 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 06:06:40 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 06:17:47 [0.0.6][logging] INFO - ('172.18.0.8', 36048) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 06:17:47 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 06:17:47 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 06:17:47 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 06:28:53 [0.0.6][logging] INFO - ('172.18.0.8', 56434) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 06:28:53 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 06:28:53 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 06:28:53 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 06:40:00 [0.0.6][logging] INFO - ('172.18.0.8', 56104) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 06:40:00 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 06:40:00 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 06:40:00 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 06:51:07 [0.0.6][logging] INFO - ('172.18.0.8', 53728) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 06:51:07 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 06:51:07 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 06:51:07 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:02:14 [0.0.6][logging] INFO - ('172.18.0.8', 45504) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:02:14 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:02:14 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:02:14 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:13:20 [0.0.6][logging] INFO - ('172.18.0.8', 57376) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:13:20 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:13:20 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:13:20 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:24:27 [0.0.6][logging] INFO - ('172.18.0.8', 59154) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:24:27 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:24:27 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:24:27 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:35:34 [0.0.6][logging] INFO - ('172.18.0.8', 47866) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:35:34 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:35:34 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:35:34 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:46:41 [0.0.6][logging] INFO - ('172.18.0.8', 38918) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:46:41 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:46:41 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:46:41 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 07:57:47 [0.0.6][logging] INFO - ('172.18.0.8', 37214) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 07:57:47 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 07:57:47 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 07:57:47 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 08:08:54 [0.0.6][logging] INFO - ('172.18.0.8', 35880) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 08:08:54 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 08:08:54 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 08:08:54 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 08:20:01 [0.0.6][logging] INFO - ('172.18.0.8', 35274) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 08:20:01 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 08:20:01 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 08:20:01 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 08:31:08 [0.0.6][logging] INFO - ('172.18.0.8', 44888) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 08:31:08 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 08:31:08 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 08:31:08 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 08:42:06 [0.0.6][logging] INFO - ('172.18.0.8', 45238) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 08:42:06 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 08:42:06 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 08:42:06 [0.0.6][logging] INFO - connection closed
|
||||||
|
2025-11-05 08:53:21 [0.0.6][logging] INFO - ('172.18.0.8', 51856) - "WebSocket /mcp_endpoint/mcp/?token=TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk%3D" [accepted]
|
||||||
|
2025-11-05 08:53:21 [0.0.6][app] ERROR - token解密失败: TsSP9lBq6Oa1WMkachHoS2TtNt4GKV/Gli24pk5Rjpk=
|
||||||
|
2025-11-05 08:53:21 [0.0.6][logging] INFO - connection open
|
||||||
|
2025-11-05 08:53:21 [0.0.6][logging] INFO - connection closed
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fastapi==0.104.1
|
||||||
|
uvicorn[standard]==0.24.0
|
||||||
|
websockets==12.0
|
||||||
|
python-multipart==0.0.6
|
||||||
|
pydantic==2.5.0
|
||||||
|
python-dotenv==1.0.0
|
||||||
|
configparser==6.0.0
|
||||||
|
asyncio-mqtt==0.16.1
|
||||||
|
pycryptodome==3.23.0
|
||||||
|
loguru==0.7.2
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
"""
|
||||||
|
工具模块
|
||||||
|
"""
|
||||||
|
|
||||||
|
__version__ = "0.0.6"
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
import base64
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
from Crypto.Util.Padding import pad, unpad
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
|
||||||
|
def pad_key(key: str) -> bytes:
|
||||||
|
"""
|
||||||
|
填充密钥到指定长度(16、24或32位)
|
||||||
|
@param key: 原始密钥字符串
|
||||||
|
@return: 填充后的密钥字节数组
|
||||||
|
"""
|
||||||
|
key_bytes = key.encode("utf-8")
|
||||||
|
key_length = len(key_bytes)
|
||||||
|
|
||||||
|
if key_length == 16 or key_length == 24 or key_length == 32:
|
||||||
|
return key_bytes
|
||||||
|
|
||||||
|
# 如果密钥长度不足,用0填充;如果超过,截取前32位
|
||||||
|
padded_key = bytearray(32)
|
||||||
|
padded_key[: min(key_length, 32)] = key_bytes[: min(key_length, 32)]
|
||||||
|
return bytes(padded_key)
|
||||||
|
|
||||||
|
|
||||||
|
def encrypt(key: str, plain_text: str) -> str:
|
||||||
|
"""
|
||||||
|
AES加密
|
||||||
|
@param key: 密钥(16位、24位或32位)
|
||||||
|
@param plain_text: 待加密字符串
|
||||||
|
@return: 加密后的Base64字符串
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 确保密钥长度为16、24或32位
|
||||||
|
key_bytes = pad_key(key)
|
||||||
|
cipher = AES.new(key_bytes, AES.MODE_ECB)
|
||||||
|
|
||||||
|
# 对明文进行PKCS7填充
|
||||||
|
try:
|
||||||
|
plain_bytes = plain_text.encode("utf-8")
|
||||||
|
padded_data = pad(plain_bytes, AES.block_size)
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"明文编码或填充失败: {str(e)}")
|
||||||
|
|
||||||
|
# 加密
|
||||||
|
try:
|
||||||
|
encrypted_bytes = cipher.encrypt(padded_data)
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"加密失败: {str(e)}")
|
||||||
|
|
||||||
|
# Base64编码
|
||||||
|
try:
|
||||||
|
return base64.b64encode(encrypted_bytes).decode("utf-8")
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"Base64编码失败: {str(e)}")
|
||||||
|
except ValueError as e:
|
||||||
|
# 重新抛出ValueError,保持错误类型一致
|
||||||
|
raise e
|
||||||
|
except Exception as e:
|
||||||
|
raise RuntimeError(f"加密过程中发生未知错误: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt(key: str, encrypted_text: str) -> str:
|
||||||
|
"""
|
||||||
|
AES解密
|
||||||
|
@param key: 密钥(16位、24位或32位)
|
||||||
|
@param encrypted_text: 待解密的Base64字符串
|
||||||
|
@return: 解密后的字符串
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 确保密钥长度为16、24或32位
|
||||||
|
key_bytes = pad_key(key)
|
||||||
|
cipher = AES.new(key_bytes, AES.MODE_ECB)
|
||||||
|
|
||||||
|
# 解码Base64
|
||||||
|
try:
|
||||||
|
encrypted_bytes = base64.b64decode(encrypted_text)
|
||||||
|
except Exception as e:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 解密
|
||||||
|
try:
|
||||||
|
decrypted_bytes = cipher.decrypt(encrypted_bytes)
|
||||||
|
except Exception as e:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 去除PKCS7填充
|
||||||
|
try:
|
||||||
|
unpadded_data = unpad(decrypted_bytes, AES.block_size)
|
||||||
|
except Exception as e:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return unpadded_data.decode("utf-8")
|
||||||
|
except ValueError as e:
|
||||||
|
# 重新抛出ValueError,保持错误类型一致
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# 测试代码
|
||||||
|
test_key = "6a369b7f1bcf4d3e8d123ece38bb9627"
|
||||||
|
test_text = '{"agentId": "test1"}'
|
||||||
|
|
||||||
|
print(f"原始文本: {test_text}")
|
||||||
|
print(f"密钥: {test_key}")
|
||||||
|
|
||||||
|
# 加密
|
||||||
|
encrypted = encrypt(test_key, test_text)
|
||||||
|
print(f"加密结果: {encrypted}")
|
||||||
|
|
||||||
|
# 解密
|
||||||
|
decrypted = decrypt(test_key, encrypted)
|
||||||
|
print(f"解密结果: {decrypted}")
|
||||||
|
|
||||||
|
# 验证
|
||||||
|
print(f"加解密一致性: {test_text == decrypted}")
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
"""
|
||||||
|
配置管理工具
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import configparser
|
||||||
|
import uuid
|
||||||
|
from typing import Optional
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigManager:
|
||||||
|
"""配置管理器"""
|
||||||
|
|
||||||
|
def __init__(self, config_file: str = "data/.mcp-endpoint-server.cfg"):
|
||||||
|
self.config_file = config_file
|
||||||
|
self.config = configparser.ConfigParser()
|
||||||
|
self._load_config()
|
||||||
|
|
||||||
|
def _load_config(self):
|
||||||
|
"""加载配置文件"""
|
||||||
|
if os.path.exists(self.config_file):
|
||||||
|
self.config.read(self.config_file, encoding="utf-8")
|
||||||
|
# 检查并生成key
|
||||||
|
self._check_and_generate_key()
|
||||||
|
else:
|
||||||
|
# 如果配置文件不存在,从根目录拷贝
|
||||||
|
self._copy_config_from_root()
|
||||||
|
|
||||||
|
def _copy_config_from_root(self):
|
||||||
|
"""从根目录拷贝配置文件到data目录"""
|
||||||
|
root_config = "mcp-endpoint-server.cfg"
|
||||||
|
if os.path.exists(root_config):
|
||||||
|
# 确保data目录存在
|
||||||
|
os.makedirs(os.path.dirname(self.config_file), exist_ok=True)
|
||||||
|
|
||||||
|
# 拷贝配置文件
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
shutil.copy2(root_config, self.config_file)
|
||||||
|
|
||||||
|
# 重新加载配置
|
||||||
|
self.config.read(self.config_file, encoding="utf-8")
|
||||||
|
# 检查并生成key
|
||||||
|
self._check_and_generate_key()
|
||||||
|
else:
|
||||||
|
# 如果根目录也没有配置文件,则创建默认配置
|
||||||
|
self._create_default_config()
|
||||||
|
|
||||||
|
def _check_and_generate_key(self):
|
||||||
|
"""检查key是否存在且长度足够,如果不足则生成新的"""
|
||||||
|
try:
|
||||||
|
current_key = self.config.get("server", "key", fallback="")
|
||||||
|
if not current_key or len(current_key) < 32:
|
||||||
|
# 生成32位随机密码
|
||||||
|
new_key = self._generate_random_key()
|
||||||
|
self.config.set("server", "key", new_key)
|
||||||
|
|
||||||
|
# 保存到配置文件
|
||||||
|
with open(self.config_file, "w", encoding="utf-8") as f:
|
||||||
|
self.config.write(f)
|
||||||
|
|
||||||
|
print(f"已自动生成新的32位密钥: {new_key}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"检查密钥时发生错误: {e}")
|
||||||
|
|
||||||
|
def _generate_random_key(self) -> str:
|
||||||
|
"""生成指定长度的随机密钥"""
|
||||||
|
# 使用UUID生成密钥,移除连字符
|
||||||
|
return str(uuid.uuid4()).replace("-", "")
|
||||||
|
|
||||||
|
def _create_default_config(self):
|
||||||
|
"""创建默认配置"""
|
||||||
|
self.config["server"] = {
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"port": "8004",
|
||||||
|
"debug": "false",
|
||||||
|
"log_level": "INFO",
|
||||||
|
"key": self._generate_random_key(), # 生成默认密钥
|
||||||
|
}
|
||||||
|
|
||||||
|
self.config["websocket"] = {
|
||||||
|
"max_connections": "1000",
|
||||||
|
"ping_interval": "30",
|
||||||
|
"ping_timeout": "10",
|
||||||
|
"close_timeout": "10",
|
||||||
|
}
|
||||||
|
|
||||||
|
self.config["security"] = {"allowed_origins": "*", "enable_cors": "true"}
|
||||||
|
|
||||||
|
self.config["logging"] = {
|
||||||
|
"log_file": "logs/mcp_server.log",
|
||||||
|
"max_file_size": "10MB",
|
||||||
|
"backup_count": "5",
|
||||||
|
}
|
||||||
|
|
||||||
|
# 确保目录存在
|
||||||
|
os.makedirs(os.path.dirname(self.config_file), exist_ok=True)
|
||||||
|
|
||||||
|
# 保存默认配置
|
||||||
|
with open(self.config_file, "w", encoding="utf-8") as f:
|
||||||
|
self.config.write(f)
|
||||||
|
|
||||||
|
def get(self, section: str, key: str, default: Optional[str] = None) -> str:
|
||||||
|
"""获取配置值"""
|
||||||
|
try:
|
||||||
|
return self.config.get(section, key)
|
||||||
|
except (configparser.NoSectionError, configparser.NoOptionError):
|
||||||
|
return default
|
||||||
|
|
||||||
|
def getint(self, section: str, key: str, default: int = 0) -> int:
|
||||||
|
"""获取整数配置值"""
|
||||||
|
try:
|
||||||
|
return self.config.getint(section, key)
|
||||||
|
except (configparser.NoSectionError, configparser.NoOptionError, ValueError):
|
||||||
|
return default
|
||||||
|
|
||||||
|
def getboolean(self, section: str, key: str, default: bool = False) -> bool:
|
||||||
|
"""获取布尔配置值"""
|
||||||
|
try:
|
||||||
|
return self.config.getboolean(section, key)
|
||||||
|
except (configparser.NoSectionError, configparser.NoOptionError, ValueError):
|
||||||
|
return default
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
"""重新加载配置"""
|
||||||
|
self._load_config()
|
||||||
|
|
||||||
|
|
||||||
|
# 全局配置实例
|
||||||
|
config = ConfigManager()
|
||||||
@@ -0,0 +1,224 @@
|
|||||||
|
"""
|
||||||
|
JSON-RPC 2.0 协议封装类
|
||||||
|
用于统一处理JSON-RPC消息的格式化和解析
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from typing import Any, Dict, Optional, Union
|
||||||
|
from dataclasses import dataclass, asdict
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class JSONRPCError:
|
||||||
|
"""JSON-RPC错误对象"""
|
||||||
|
|
||||||
|
code: int
|
||||||
|
message: str
|
||||||
|
data: Optional[Any] = None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class JSONRPCRequest:
|
||||||
|
"""JSON-RPC请求对象"""
|
||||||
|
|
||||||
|
method: str
|
||||||
|
params: Optional[Union[Dict, list]] = None
|
||||||
|
id: Optional[Union[str, int]] = None
|
||||||
|
jsonrpc: str = "2.0"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class JSONRPCResponse:
|
||||||
|
"""JSON-RPC响应对象"""
|
||||||
|
|
||||||
|
result: Optional[Any] = None
|
||||||
|
error: Optional[JSONRPCError] = None
|
||||||
|
id: Optional[Union[str, int]] = None
|
||||||
|
jsonrpc: str = "2.0"
|
||||||
|
|
||||||
|
|
||||||
|
class JSONRPCProtocol:
|
||||||
|
"""JSON-RPC 2.0 协议封装类"""
|
||||||
|
|
||||||
|
# 预定义错误码
|
||||||
|
PARSE_ERROR = -32700
|
||||||
|
INVALID_REQUEST = -32600
|
||||||
|
METHOD_NOT_FOUND = -32601
|
||||||
|
INVALID_PARAMS = -32602
|
||||||
|
INTERNAL_ERROR = -32603
|
||||||
|
|
||||||
|
# 自定义错误码
|
||||||
|
TOOL_NOT_CONNECTED = -32001
|
||||||
|
FORWARD_FAILED = -32002
|
||||||
|
CONNECTION_ERROR = -32003
|
||||||
|
AUTHENTICATION_ERROR = -32004
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_request(
|
||||||
|
method: str,
|
||||||
|
params: Optional[Union[Dict, list]] = None,
|
||||||
|
request_id: Optional[Union[str, int]] = None,
|
||||||
|
) -> JSONRPCRequest:
|
||||||
|
"""创建JSON-RPC请求"""
|
||||||
|
return JSONRPCRequest(
|
||||||
|
method=method, params=params, id=request_id, jsonrpc="2.0"
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_success_response(
|
||||||
|
result: Any, request_id: Optional[Union[str, int]] = None
|
||||||
|
) -> JSONRPCResponse:
|
||||||
|
"""创建成功响应"""
|
||||||
|
return JSONRPCResponse(result=result, id=request_id, jsonrpc="2.0")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_error_response(
|
||||||
|
error_code: int,
|
||||||
|
error_message: str,
|
||||||
|
error_data: Optional[Any] = None,
|
||||||
|
request_id: Optional[Union[str, int]] = None,
|
||||||
|
) -> JSONRPCResponse:
|
||||||
|
"""创建错误响应"""
|
||||||
|
error = JSONRPCError(code=error_code, message=error_message, data=error_data)
|
||||||
|
return JSONRPCResponse(error=error, id=request_id, jsonrpc="2.0")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_notification(
|
||||||
|
method: str, params: Optional[Union[Dict, list]] = None
|
||||||
|
) -> JSONRPCRequest:
|
||||||
|
"""创建通知消息(无ID的请求)"""
|
||||||
|
return JSONRPCRequest(method=method, params=params, id=None, jsonrpc="2.0")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def to_dict(obj: Union[JSONRPCRequest, JSONRPCResponse]) -> Dict:
|
||||||
|
"""将对象转换为字典"""
|
||||||
|
return asdict(obj)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def to_json(
|
||||||
|
obj: Union[JSONRPCRequest, JSONRPCResponse], ensure_ascii: bool = False
|
||||||
|
) -> str:
|
||||||
|
"""将对象转换为JSON字符串"""
|
||||||
|
return json.dumps(asdict(obj), ensure_ascii=ensure_ascii)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_request(json_str: str) -> Optional[JSONRPCRequest]:
|
||||||
|
"""解析JSON-RPC请求"""
|
||||||
|
try:
|
||||||
|
data = json.loads(json_str)
|
||||||
|
if not isinstance(data, dict):
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 验证必需字段
|
||||||
|
if "jsonrpc" not in data or data["jsonrpc"] != "2.0":
|
||||||
|
return None
|
||||||
|
if "method" not in data:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return JSONRPCRequest(
|
||||||
|
method=data["method"],
|
||||||
|
params=data.get("params"),
|
||||||
|
id=data.get("id"),
|
||||||
|
jsonrpc=data["jsonrpc"],
|
||||||
|
)
|
||||||
|
except (json.JSONDecodeError, KeyError, TypeError):
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_response(json_str: str) -> Optional[JSONRPCResponse]:
|
||||||
|
"""解析JSON-RPC响应"""
|
||||||
|
try:
|
||||||
|
data = json.loads(json_str)
|
||||||
|
if not isinstance(data, dict):
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 验证必需字段
|
||||||
|
if "jsonrpc" not in data or data["jsonrpc"] != "2.0":
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 检查是否有result或error字段
|
||||||
|
has_result = "result" in data
|
||||||
|
has_error = "error" in data
|
||||||
|
|
||||||
|
if not has_result and not has_error:
|
||||||
|
return None
|
||||||
|
if has_result and has_error:
|
||||||
|
return None
|
||||||
|
|
||||||
|
response = JSONRPCResponse(id=data.get("id"), jsonrpc=data["jsonrpc"])
|
||||||
|
|
||||||
|
if has_result:
|
||||||
|
response.result = data["result"]
|
||||||
|
else:
|
||||||
|
error_data = data["error"]
|
||||||
|
response.error = JSONRPCError(
|
||||||
|
code=error_data["code"],
|
||||||
|
message=error_data["message"],
|
||||||
|
data=error_data.get("data"),
|
||||||
|
)
|
||||||
|
|
||||||
|
return response
|
||||||
|
except (json.JSONDecodeError, KeyError, TypeError):
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_valid_request(json_str: str) -> bool:
|
||||||
|
"""验证是否为有效的JSON-RPC请求"""
|
||||||
|
return JSONRPCProtocol.parse_request(json_str) is not None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_valid_response(json_str: str) -> bool:
|
||||||
|
"""验证是否为有效的JSON-RPC响应"""
|
||||||
|
return JSONRPCProtocol.parse_response(json_str) is not None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_notification(json_str: str) -> bool:
|
||||||
|
"""检查是否为通知消息(无ID的请求)"""
|
||||||
|
request = JSONRPCProtocol.parse_request(json_str)
|
||||||
|
return request is not None and request.id is None
|
||||||
|
|
||||||
|
|
||||||
|
def create_tool_not_connected_error(
|
||||||
|
request_id: Optional[Union[str, int]] = None, agent_id: Optional[str] = None
|
||||||
|
) -> str:
|
||||||
|
"""创建工具端未连接的错误消息"""
|
||||||
|
error_data = (
|
||||||
|
{"agent_id": agent_id, "details": "请求的工具端连接不存在或已断开"}
|
||||||
|
if agent_id
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
|
response = JSONRPCProtocol.create_error_response(
|
||||||
|
error_code=JSONRPCProtocol.TOOL_NOT_CONNECTED,
|
||||||
|
error_message="工具端未连接",
|
||||||
|
error_data=error_data,
|
||||||
|
request_id=request_id,
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_json(response, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
def create_forward_failed_error(
|
||||||
|
request_id: Optional[Union[str, int]] = None, agent_id: Optional[str] = None
|
||||||
|
) -> str:
|
||||||
|
"""创建转发失败的错误消息"""
|
||||||
|
error_data = (
|
||||||
|
{"agent_id": agent_id, "details": "消息转发过程中发生错误"}
|
||||||
|
if agent_id
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
|
response = JSONRPCProtocol.create_error_response(
|
||||||
|
error_code=JSONRPCProtocol.FORWARD_FAILED,
|
||||||
|
error_message="转发消息失败",
|
||||||
|
error_data=error_data,
|
||||||
|
request_id=request_id,
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_json(response, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
def create_authentication_error(message: str = "认证失败") -> str:
|
||||||
|
"""创建认证错误消息"""
|
||||||
|
response = JSONRPCProtocol.create_error_response(
|
||||||
|
error_code=JSONRPCProtocol.AUTHENTICATION_ERROR, error_message=message
|
||||||
|
)
|
||||||
|
return JSONRPCProtocol.to_json(response, ensure_ascii=False)
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
"""
|
||||||
|
日志管理工具
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
from typing import Optional
|
||||||
|
from loguru import logger
|
||||||
|
from .config import config
|
||||||
|
|
||||||
|
# 版本号
|
||||||
|
from . import __version__ as VERSION
|
||||||
|
|
||||||
|
|
||||||
|
class InterceptHandler(logging.Handler):
|
||||||
|
"""拦截标准库日志并转发到loguru"""
|
||||||
|
|
||||||
|
def emit(self, record):
|
||||||
|
# 获取对应的loguru级别
|
||||||
|
try:
|
||||||
|
level = logger.level(record.levelname).name
|
||||||
|
except ValueError:
|
||||||
|
level = record.levelno
|
||||||
|
|
||||||
|
# 查找调用者
|
||||||
|
frame, depth = sys._getframe(6), 6
|
||||||
|
while frame and frame.f_code.co_filename == __file__:
|
||||||
|
frame = frame.f_back
|
||||||
|
depth += 1
|
||||||
|
|
||||||
|
logger.opt(depth=depth, exception=record.exc_info).log(
|
||||||
|
level, record.getMessage()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class LoggerManager:
|
||||||
|
"""日志管理器"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._setup_logger()
|
||||||
|
|
||||||
|
def _setup_logger(self):
|
||||||
|
"""设置日志器"""
|
||||||
|
# 移除默认的处理器
|
||||||
|
logger.remove()
|
||||||
|
|
||||||
|
# 自定义格式:时间[版本号][模块路径]-级别-消息
|
||||||
|
# 不同部分使用不同颜色
|
||||||
|
custom_format = (
|
||||||
|
f"<green>{{time:YYMMDD HH:mm:ss}}</green>"
|
||||||
|
f"<blue>[{VERSION}][{{name}}]</blue>"
|
||||||
|
"<level>-{level}-</level>"
|
||||||
|
"<green>{message}</green>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 控制台处理器
|
||||||
|
logger.add(
|
||||||
|
sys.stdout,
|
||||||
|
format=custom_format,
|
||||||
|
level=config.get("server", "log_level", "INFO"),
|
||||||
|
colorize=True,
|
||||||
|
backtrace=True,
|
||||||
|
diagnose=True,
|
||||||
|
enqueue=True,
|
||||||
|
catch=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# 文件处理器(不带颜色)
|
||||||
|
log_file = config.get("logging", "log_file", "logs/mcp_server.log")
|
||||||
|
if log_file:
|
||||||
|
# 确保日志目录存在
|
||||||
|
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
||||||
|
|
||||||
|
# 文件格式(不带颜色)
|
||||||
|
file_format = f"{{time:YYYY-MM-DD HH:mm:ss}} [{VERSION}][{{name}}] {{level}} - {{message}}"
|
||||||
|
|
||||||
|
# 获取文件大小限制
|
||||||
|
max_file_size = config.get("logging", "max_file_size", "10MB")
|
||||||
|
max_bytes = self._parse_size(max_file_size)
|
||||||
|
|
||||||
|
# 获取备份数量
|
||||||
|
backup_count = config.getint("logging", "backup_count", 5)
|
||||||
|
|
||||||
|
logger.add(
|
||||||
|
log_file,
|
||||||
|
format=file_format,
|
||||||
|
level=config.get("server", "log_level", "INFO"),
|
||||||
|
rotation=max_bytes,
|
||||||
|
retention=backup_count,
|
||||||
|
compression="zip",
|
||||||
|
encoding="utf-8",
|
||||||
|
enqueue=True,
|
||||||
|
catch=True,
|
||||||
|
)
|
||||||
|
print("Logger initialized", flush=True)
|
||||||
|
logger.info("Logger test message")
|
||||||
|
|
||||||
|
def _parse_size(self, size_str: str) -> int:
|
||||||
|
"""解析文件大小字符串"""
|
||||||
|
size_str = size_str.upper()
|
||||||
|
if size_str.endswith("MB"):
|
||||||
|
return int(float(size_str[:-2]) * 1024 * 1024)
|
||||||
|
elif size_str.endswith("KB"):
|
||||||
|
return int(float(size_str[:-2]) * 1024)
|
||||||
|
elif size_str.endswith("B"):
|
||||||
|
return int(size_str[:-1])
|
||||||
|
else:
|
||||||
|
return int(size_str)
|
||||||
|
|
||||||
|
def get_logger(self):
|
||||||
|
"""获取日志器"""
|
||||||
|
return logger
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
"""重新加载日志配置"""
|
||||||
|
self._setup_logger()
|
||||||
|
|
||||||
|
def setup_uvicorn_logging(self):
|
||||||
|
"""设置uvicorn日志拦截"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# 拦截标准库日志
|
||||||
|
logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
|
||||||
|
|
||||||
|
# 直接禁用uvicorn.access日志
|
||||||
|
logging.getLogger("uvicorn.access").disabled = True
|
||||||
|
logging.getLogger("uvicorn.access").propagate = False
|
||||||
|
|
||||||
|
# 拦截其他uvicorn日志
|
||||||
|
for name in logging.root.manager.loggerDict.keys():
|
||||||
|
if not name.startswith("uvicorn.access"):
|
||||||
|
logging.getLogger(name).handlers = []
|
||||||
|
logging.getLogger(name).propagate = True
|
||||||
|
|
||||||
|
|
||||||
|
# 全局日志管理器实例
|
||||||
|
logger_manager = LoggerManager()
|
||||||
|
|
||||||
|
|
||||||
|
def get_logger(name: str = "mcp_server"):
|
||||||
|
"""获取日志器"""
|
||||||
|
return logger.bind(name=name)
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
|
||||||
|
def get_local_ip():
|
||||||
|
try:
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
# Connect to Google's DNS servers
|
||||||
|
s.connect(("8.8.8.8", 80))
|
||||||
|
local_ip = s.getsockname()[0]
|
||||||
|
s.close()
|
||||||
|
return local_ip
|
||||||
|
except Exception as e:
|
||||||
|
return "127.0.0.1"
|
||||||
Reference in New Issue
Block a user