1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
"""MCP public surface: three intentionally small image tools."""
from __future__ import annotations
from typing import Literal
from mcp.server import MCPServer
from mcp.server.mcpserver import Image
from .service import ImageGenerationService
from .tools.generate_guided_image import generate_guided_image as guided_adapter
from .tools.generate_image import generate_image as image_adapter
from .tools.inpaint_image import inpaint_image as inpaint_adapter
Size = Literal["square_512", "landscape_512", "portrait_512"]
GuidanceMode = Literal["depth", "openpose", "openpose_full"]
def create_server(service: ImageGenerationService) -> MCPServer:
server = MCPServer("generate-image-sd15-mcp")
@server.tool()
async def generate_image(
positive_prompt: str,
negative_prompt: str | None = None,
size: Size | None = None,
) -> Image:
"""Generate one PNG from a positive prompt using the configured SD1.x model."""
result = await image_adapter(service, positive_prompt, negative_prompt, size)
return Image(data=result.png_data, format="png")
@server.tool()
async def generate_guided_image(
positive_prompt: str,
control_mode: GuidanceMode,
input_image: str,
negative_prompt: str | None = None,
size: Size | None = None,
) -> Image:
"""Generate one PNG guided by Depth, OpenPose, or full OpenPose.
input_image is a Base64 PNG/JPEG or an image data URI.
"""
result = await guided_adapter(
service, positive_prompt, control_mode, input_image, negative_prompt, size
)
return Image(data=result.png_data, format="png")
@server.tool()
async def inpaint_image(
positive_prompt: str,
input_image: str,
mask_image: str,
negative_prompt: str | None = None,
size: Size | None = None,
) -> Image:
"""Regenerate white mask areas and return one PNG.
Both images are Base64 PNG/JPEG values or image data URIs.
"""
result = await inpaint_adapter(
service, positive_prompt, input_image, mask_image, negative_prompt, size
)
return Image(data=result.png_data, format="png")
return server
|