#!/usr/bin/env python3
"""
SVG 转换器 FastMCP 服务主入口点
支持通过 `python -m svg_converter_mcp` 命令启动服务。
提供多种启动模式和配置选项。
使用示例:
# 默认 STDIO 模式(用于 MCP 客户端)
python -m svg_converter_mcp
# HTTP 模式(用于 Web 集成)
python -m svg_converter_mcp --transport http --port 8000
# SSE 模式(用于实时通信)
python -m svg_converter_mcp --transport sse --port 8001
# 显示版本信息
python -m svg_converter_mcp --version
# 检查依赖项状态
python -m svg_converter_mcp --check-deps
作者: Rusian Huu
版本: 1.0.0
"""
import sys
import argparse
import json
from pathlib import Path
def main():
"""主入口函数"""
parser = argparse.ArgumentParser(
prog="svg_converter_mcp",
description="SVG 转换器 FastMCP 服务",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用示例:
# 默认 STDIO 模式(用于 MCP 客户端)
python -m svg_converter_mcp
# HTTP 模式(用于 Web 集成)
python -m svg_converter_mcp --transport http --port 8000
# SSE 模式(用于实时通信)
python -m svg_converter_mcp --transport sse --port 8001
# 指定主机和端口
python -m svg_converter_mcp --transport http --host 0.0.0.0 --port 9000
# 显示版本信息
python -m svg_converter_mcp --version
# 检查依赖项状态
python -m svg_converter_mcp --check-deps
MCP 客户端配置示例:
{
"mcpServers": {
"svg-converter-mcp": {
"command": "python",
"args": ["-m", "svg_converter_mcp"],
"disabled": false
}
}
}
"""
)
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="启用调试模式"
)
parser.add_argument(
"--version",
action="store_true",
help="显示版本信息"
)
parser.add_argument(
"--check-deps",
action="store_true",
help="检查依赖项安装状态"
)
args = parser.parse_args()
# 处理版本信息
if args.version:
try:
from . import get_version_info
version_info = get_version_info()
print(f"{version_info['name']} v{version_info['version']}")
print(f"作者: {version_info['author']}")
print(f"许可证: {version_info['license']}")
print(f"描述: {version_info['description']}")
except ImportError:
print("svg-converter-mcp v1.0.0")
print("作者: Rusian Huu")
return
# 处理依赖检查
if args.check_deps:
try:
from . import check_dependencies
deps = check_dependencies()
print("=" * 60)
print("依赖项检查结果")
print("=" * 60)
print("\n必需依赖:")
for name, info in deps["required"].items():
status = "✓" if info["installed"] else "✗"
print(f" {status} {name}: {info['description']}")
if not info["installed"]:
print(f" 安装命令: {info['install_command']}")
print("\n可选依赖:")
for name, info in deps["optional"].items():
status = "✓" if info["installed"] else "✗"
print(f" {status} {name}: {info['description']}")
if not info["installed"]:
print(f" 安装命令: {info['install_command']}")
if deps["recommendations"]:
print("\n建议:")
for rec in deps["recommendations"]:
print(f" • {rec}")
print("=" * 60)
except ImportError as e:
print(f"无法检查依赖项: {e}")
return
# 启动服务
try:
# 导入服务模块
from .server import mcp
from .svg_converter import SVGConverter
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:
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)
# 启动服务
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 ImportError as e:
print(f"导入错误: {e}")
print("请确保所有依赖项已正确安装:")
print(" pip install svg-converter-mcp[full] -i https://pypi.tuna.tsinghua.edu.cn/simple/")
sys.exit(1)
except Exception as e:
print(f"服务启动失败: {e}")
sys.exit(1)
if __name__ == "__main__":
main()