Skip to main content
Glama
templates.py11.9 kB
""" MCP Resource Template 资源模板定义 Resource Templates 使用 URI 模板(包含占位符)来定义动态资源 LLM 可以通过提供具体参数来访问不同的资源实例 """ from loguru import logger from ..resources import ( IMAGE_STYLES, NEGATIVE_PROMPTS, IMAGE_SIZES, VIDEO_STYLES, GENERATION_CONFIGS, PROMPT_TEMPLATES ) def register_resource_templates(mcp): """ 注册所有 Resource Template 到 FastMCP 实例 Args: mcp: FastMCP 实例 """ # 1. 图像风格模板 - 根据风格名称获取风格配置 @mcp.resource("resource://styles/{style_name}") def get_image_style(style_name: str) -> dict: """ 根据风格名称获取图像风格配置 Args: style_name: 风格名称(realistic, anime, watercolor, oil_painting, 3d_render, sketch) Returns: 风格配置字典 """ # 从数据中获取风格配置 try: style = IMAGE_STYLES.get(style_name.lower()) if style: return { "style_name": style_name, **style } else: return { "error": f"风格 '{style_name}' 不存在", "available_styles": list(IMAGE_STYLES.keys()) } except Exception as e: logger.error(f"获取风格配置失败: {e}") return { "error": f"获取风格配置失败: {str(e)}" } # 2. 负面提示词模板 - 根据图像类型获取负面提示词 @mcp.resource("resource://negative_prompts/{image_type}") def get_negative_prompt_by_type(image_type: str) -> dict: """ 根据图像类型获取负面提示词 Args: image_type: 图像类型(general, portrait, landscape, product) Returns: 负面提示词字典 """ try: negative = NEGATIVE_PROMPTS.get(image_type.lower(), "") if negative: return { "image_type": image_type, "negative_prompt": negative, "description": f"适用于 {image_type} 类型的负面提示词" } else: return { "error": f"图像类型 '{image_type}' 不存在", "available_types": list(NEGATIVE_PROMPTS.keys()) } except Exception as e: logger.error(f"获取负面提示词失败: {e}") return { "error": f"获取负面提示词失败: {str(e)}" } # 3. 图像尺寸模板 - 根据尺寸名称获取尺寸配置 @mcp.resource("resource://sizes/{size_name}") def get_image_size(size_name: str) -> dict: """ 根据尺寸名称获取图像尺寸配置 Args: size_name: 尺寸名称(square_1k, square_2k, portrait_16_9, portrait_9_16, 等) Returns: 尺寸配置字典 """ try: size = IMAGE_SIZES.get(size_name.lower()) if size: return { "size_name": size_name, **size } else: return { "error": f"尺寸 '{size_name}' 不存在", "available_sizes": list(IMAGE_SIZES.keys()) } except Exception as e: logger.error(f"获取尺寸配置失败: {e}") return { "error": f"获取尺寸配置失败: {str(e)}" } # 4. 视频风格模板 - 根据风格名称获取视频风格配置 @mcp.resource("resource://video_styles/{style_name}") def get_video_style(style_name: str) -> dict: """ 根据风格名称获取视频风格配置 Args: style_name: 视频风格名称(cinematic, documentary, commercial, vlog, timelapse) Returns: 视频风格配置字典 """ try: style = VIDEO_STYLES.get(style_name.lower()) if style: return { "style_name": style_name, **style } else: return { "error": f"视频风格 '{style_name}' 不存在", "available_styles": list(VIDEO_STYLES.keys()) } except Exception as e: logger.error(f"获取视频风格配置失败: {e}") return { "error": f"获取视频风格配置失败: {str(e)}" } # 5. 生成配置模板 - 根据配置名称获取生成配置 @mcp.resource("resource://configs/{config_name}") def get_generation_config(config_name: str) -> dict: """ 根据配置名称获取生成配置 Args: config_name: 配置名称(high_quality, fast_generation, social_media, artistic) Returns: 生成配置字典 """ try: config = GENERATION_CONFIGS.get(config_name.lower()) if config: return { "config_name": config_name, **config } else: return { "error": f"配置 '{config_name}' 不存在", "available_configs": list(GENERATION_CONFIGS.keys()) } except Exception as e: logger.error(f"获取生成配置失败: {e}") return { "error": f"获取生成配置失败: {str(e)}" } # 6. 提示词模板 - 根据模板名称获取提示词模板 @mcp.resource("resource://prompt_templates/{template_name}") def get_prompt_template(template_name: str) -> dict: """ 根据模板名称获取提示词模板 Args: template_name: 模板名称(portrait, landscape, product, animal, abstract) Returns: 提示词模板字典 """ try: template = PROMPT_TEMPLATES.get(template_name.lower()) if template: return { "template_name": template_name, "template": template, "description": f"提示词模板: {template_name}", "usage": f"使用此模板时,替换模板中的占位符变量" } else: return { "error": f"模板 '{template_name}' 不存在", "available_templates": list(PROMPT_TEMPLATES.keys()) } except Exception as e: logger.error(f"获取提示词模板失败: {e}") return { "error": f"获取提示词模板失败: {str(e)}" } # 7. 组合配置模板 - 根据风格和尺寸组合生成完整配置 @mcp.resource("resource://combined_config/{style_name}/{size_name}") def get_combined_config(style_name: str, size_name: str) -> dict: """ 根据风格和尺寸组合生成完整的图像生成配置 Args: style_name: 风格名称 size_name: 尺寸名称 Returns: 组合后的完整配置字典 """ try: # 获取风格配置(直接访问数据) style_data = IMAGE_STYLES.get(style_name.lower()) if not style_data: return { "error": f"风格 '{style_name}' 不存在", "available_styles": list(IMAGE_STYLES.keys()) } style = { "style_name": style_name, **style_data } # 获取尺寸配置(直接访问数据) size_data = IMAGE_SIZES.get(size_name.lower()) if not size_data: return { "error": f"尺寸 '{size_name}' 不存在", "available_sizes": list(IMAGE_SIZES.keys()) } size = { "size_name": size_name, **size_data } # 组合配置 return { "style": style, "size": size, "recommended_prompt": f"使用 {style.get('keywords', '')} 风格", "recommended_negative": style.get("negative_keywords", ""), "width": size.get("width", 1280), "height": size.get("height", 1280), "description": f"组合配置: {style.get('name', style_name)} 风格 + {size.get('name', size_name)} 尺寸" } except Exception as e: logger.error(f"获取组合配置失败: {e}") return { "error": f"获取组合配置失败: {str(e)}" } # 8. 完整生成方案模板 - 根据主题、风格、尺寸生成完整方案 @mcp.resource("resource://generation_plan/{theme}/{style_name}/{size_name}") def get_generation_plan(theme: str, style_name: str, size_name: str) -> dict: """ 根据主题、风格、尺寸生成完整的图像生成方案 Args: theme: 图像主题 style_name: 风格名称 size_name: 尺寸名称 Returns: 完整的生成方案字典 """ try: # 获取风格配置(直接访问数据) style_data = IMAGE_STYLES.get(style_name.lower()) if not style_data: return { "error": f"风格 '{style_name}' 不存在", "available_styles": list(IMAGE_STYLES.keys()) } style = { "style_name": style_name, **style_data } # 获取尺寸配置(直接访问数据) size_data = IMAGE_SIZES.get(size_name.lower()) if not size_data: return { "error": f"尺寸 '{size_name}' 不存在", "available_sizes": list(IMAGE_SIZES.keys()) } size = { "size_name": size_name, **size_data } # 获取负面提示词(使用通用类型) negative_prompt = NEGATIVE_PROMPTS.get("general", "") # 生成完整方案 return { "theme": theme, "style": style, "size": size, "prompt_suggestion": f"{theme}, {style.get('keywords', '')}", "negative_prompt": negative_prompt, "width": size.get("width", 1280), "height": size.get("height", 1280), "description": f"为主题 '{theme}' 生成的完整方案", "steps": [ f"1. 使用主题: {theme}", f"2. 应用风格: {style.get('name', style_name)}", f"3. 设置尺寸: {size.get('name', size_name)} ({size.get('width')}x{size.get('height')})", f"4. 使用负面提示词: {negative_prompt[:50]}..." ] } except Exception as e: logger.error(f"生成完整方案失败: {e}") return { "error": f"生成完整方案失败: {str(e)}" } logger.info("已注册 8 个 Resource Template 模板,可在 MCP Inspector 的 Resources 标签页中查看")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/luyike221/xiaohongshu-mcp-python'

If you have feedback or need assistance with the MCP directory API, please join our Discord server