#!/usr/bin/env python3
"""
SVG 转换器 FastMCP 服务启动脚本
提供多种启动方式和配置选项,便于开发和部署。
作者: Rusian Huu
版本: 1.0.0
"""
import sys
import argparse
from pathlib import Path
# 确保可以导入本地模块
sys.path.insert(0, str(Path(__file__).parent))
from svg_converter_mcp.server import mcp
def main():
parser = argparse.ArgumentParser(
description="SVG 转换器 FastMCP 服务启动器",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用示例:
# 默认 STDIO 模式(用于 MCP 客户端)
python start_svg_converter_server.py
# HTTP 模式(用于 Web 集成)
python start_svg_converter_server.py --transport http --port 8000
# SSE 模式(用于实时通信)
python start_svg_converter_server.py --transport sse --port 8001
# 指定主机和端口
python start_svg_converter_server.py --transport http --host 0.0.0.0 --port 9000
"""
)
parser.add_argument(
"--transport",
choices=["stdio", "http", "sse"],
default="stdio",
help="传输协议类型 (默认: stdio)"
)
parser.add_argument(
"--host",
default="127.0.0.1",
help="服务器主机地址 (默认: 127.0.0.1)"
)
parser.add_argument(
"--port",
type=int,
default=8000,
help="服务器端口号 (默认: 8000)"
)
parser.add_argument(
"--debug",
action="store_true",
help="启用调试模式"
)
args = parser.parse_args()
print("=" * 60)
print("SVG 转换器 FastMCP 服务")
print("=" * 60)
print(f"传输协议: {args.transport.upper()}")
if args.transport != "stdio":
print(f"服务地址: {args.host}:{args.port}")
if args.transport == "http":
print(f"访问地址: http://{args.host}:{args.port}")
elif args.transport == "sse":
print(f"SSE 端点: http://{args.host}:{args.port}/sse")
print(f"调试模式: {'开启' if args.debug else '关闭'}")
print("=" * 60)
# 检查依赖
try:
from svg_converter import SVGConverter
converter = SVGConverter()
engine_info = converter.get_engine_info()
print(f"当前转换引擎: {engine_info['current_engine']}")
print("可用引擎:")
for engine, available in engine_info['available_engines'].items():
status = "✓" if available else "✗"
print(f" {status} {engine}")
print("=" * 60)
except Exception as e:
print(f"警告: 检查转换引擎时出错: {e}")
print("=" * 60)
# 启动服务
try:
if args.transport == "stdio":
print("服务已启动,等待 MCP 客户端连接...")
mcp.run()
elif args.transport == "http":
print(f"HTTP 服务启动中...")
mcp.run(transport="http", host=args.host, port=args.port)
elif args.transport == "sse":
print(f"SSE 服务启动中...")
mcp.run(transport="sse", host=args.host, port=args.port)
except KeyboardInterrupt:
print("\n服务已停止")
except Exception as e:
print(f"服务启动失败: {e}")
sys.exit(1)
if __name__ == "__main__":
main()