96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
#!/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()) |