KICCO_AI_IMAGE/mcp_server/example.py

96 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
MCP服务器示例脚本
---------------
这个脚本演示了如何启动和使用MCP服务器
"""
import logging
import asyncio
from typing import Dict, Any
# 设置日志级别
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 导入MCP服务器
from mcp_server import MCPServer
# 自定义资源和工具示例
async def setup_custom_handlers(server: MCPServer):
"""设置自定义资源和工具"""
# 注册自定义资源
@server.register_resource("comfyui://status")
def get_comfy_status() -> str:
"""获取ComfyUI状态信息"""
return "ComfyUI 正在运行中"
# 注册自定义工具
@server.register_tool()
def generate_image(prompt: str, width: int = 512, height: int = 512) -> Dict[str, Any]:
"""生成图像的工具(示例)"""
# 这里只是示例实际实现需要与ComfyUI集成
return {
"status": "success",
"prompt": prompt,
"dimensions": f"{width}x{height}",
"message": "图像生成请求已提交"
}
# 注册自定义提示
@server.register_prompt("图像生成")
def image_generation_prompt(style: str, subject: str) -> str:
"""创建图像生成提示"""
return f"请创建一个{style}风格的{subject}图像。"
async def register_models(server: MCPServer):
"""注册示例模型"""
# 注册示例模型
model1 = server.register_model({
"name": "stable-diffusion-v1.5",
"type": "diffusion",
"description": "Stable Diffusion v1.5图像生成模型"
})
model2 = server.register_model({
"name": "llama-3-8b",
"type": "llm",
"description": "Llama 3 8B语言模型"
})
logging.info(f"已注册模型: {model1}, {model2}")
return [model1, model2]
async def main():
"""主函数"""
# 创建MCP服务器实例
server = MCPServer(server_name="ComfyUI-MCP示例")
# 设置自定义处理器
await setup_custom_handlers(server)
# 注册模型
models = await register_models(server)
# 打印服务器信息
logging.info(f"服务器统计信息: {server.get_stats()}")
# 启动服务器默认地址为127.0.0.1:8189
try:
logging.info("正在启动MCP服务器...")
await server.start()
except KeyboardInterrupt:
logging.info("服务器被用户中断")
finally:
# 清理资源
for model_id in models:
server.unregister_model(model_id)
logging.info("服务器已关闭")
if __name__ == "__main__":
# 运行主函数
asyncio.run(main())