Skip to main content
Glama
duke0317

Image Processing MCP Server

by duke0317

apply_blur

Apply a blur filter to images by specifying a radius value to control intensity, useful for privacy protection or artistic effects.

Instructions

应用模糊滤镜

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
image_sourceYes图片源,可以是文件路径或base64编码的图片数据
radiusYes模糊半径,值越大模糊效果越强

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • Core handler function that applies BoxBlur filter to the image using PIL, handles validation, processes output with ImageProcessor, and returns JSON-formatted result.
    async def apply_blur(image_source: str, radius: float) -> list[TextContent]:
        """
        应用模糊滤镜
        
        Args:
            image_source: 图片源(文件路径或base64编码数据)
            radius: 模糊半径
            
        Returns:
            应用滤镜后的图片数据
        """
        try:
            # 验证参数
            if not image_source:
                raise ValidationError("图片源不能为空")
            
            if not validate_numeric_range(radius, 0.1, 10.0):
                raise ValidationError(f"模糊半径必须在0.1-10.0范围内: {radius}")
            
            # 加载图片
            image = processor.load_image(image_source)
            
            # 应用模糊滤镜
            blurred_image = image.filter(ImageFilter.BoxBlur(radius))
            
            # 输出处理后的图片
            output_info = processor.output_image(blurred_image, "blur")
            
            result = {
                "success": True,
                "message": f"模糊滤镜应用成功: 半径 {radius}",
                "data": {
                    **output_info,
                    "filter_type": "blur",
                    "radius": radius,
                    "size": image.size
                }
            }
            
            return [TextContent(type="text", text=json.dumps(result, ensure_ascii=False))]
            
        except ValidationError as e:
            error_result = {
                "success": False,
                "error": f"参数验证失败: {str(e)}"
            }
            return [TextContent(type="text", text=json.dumps(error_result, ensure_ascii=False))]
            
        except Exception as e:
            error_result = {
                "success": False,
                "error": f"模糊滤镜应用失败: {str(e)}"
            }
            return [TextContent(type="text", text=json.dumps(error_result, ensure_ascii=False))]
  • main.py:240-254 (registration)
    MCP server tool registration with @mcp.tool() decorator. This wrapper calls the core handler from filters.py with safe_run_async and provides input validation via Annotated fields.
    @mcp.tool()
    def apply_blur(
        image_source: Annotated[str, Field(description="图片源,可以是文件路径或base64编码的图片数据")],
        radius: Annotated[float, Field(description="模糊半径,值越大模糊效果越强", ge=0.1)]
    ) -> str:
        """应用模糊滤镜"""
        try:
            result = safe_run_async(filters_apply_blur(image_source, radius))
            return result[0].text
        except Exception as e:
            return json.dumps({
                "success": False,
                "error": f"应用模糊效果失败: {str(e)}"
            }, ensure_ascii=False, indent=2)
  • JSON schema definition for the apply_blur tool input, defining properties for image_data (base64) and radius with range validation.
    inputSchema={
        "type": "object",
        "properties": {
            "image_data": {
                "type": "string",
                "description": "图片数据(base64编码)"
            },
            "radius": {
                "type": "number",
                "description": "模糊半径(0.1-10.0)",
                "minimum": 0.1,
                "maximum": 10.0
            }
        },
        "required": ["image_data", "radius"]
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. '应用模糊滤镜' implies a transformation operation but doesn't disclose whether it modifies the original image, creates a new file, what formats are supported, performance characteristics, or error conditions. For a mutation tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three characters in Chinese ('应用模糊滤镜'), which translates efficiently to 'apply blur filter'. It's front-loaded with the core action and contains zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's an output schema (which handles return values) and 100% schema description coverage, the description is minimally adequate. However, for an image processing tool that likely creates modified images, more context about the transformation behavior would be helpful despite the structured data coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters well-documented in the schema itself. The description adds no additional parameter information beyond what's already in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '应用模糊滤镜' (apply blur filter) clearly states the verb ('apply') and resource ('blur filter'), making the purpose immediately understandable. It distinguishes from siblings like 'apply_gaussian_blur' by being a general blur operation, though it doesn't explicitly differentiate from that specific sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'apply_gaussian_blur' or other image processing tools. The description only states what it does, not when it's appropriate or what distinguishes it from similar operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/duke0317/ps-mcp'

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