创建图片生成MCP Server

B站影视 电影资讯 2025-03-19 20:55 1

摘要:pyfrom typing import Anyfrom mcp.server.fastmcp import FastMCPfrom google import genaifrom google.genai import typesfrom io import

正如前文提到的,我仍然需要一个图片生成的 MCP Server。参考 MCP 快速入门和 Gemini 文档,我发现实现起来应该不难。

Python 最简单,AI 相关的工具也多,所以这个项目咱还是 Python。

首先还是推荐大家使用 uv 管理依赖,Windows 下安装 uv 可以执行:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

然后创建项目:

# Create a new directory for our projectuv init gemini-image-mcp-servercd gemini-image-mcp-server# Create virtual environment and activate ituv venv.venv\Scripts\activate# Install dependenciesuv add mcp[cli] httpx# Create our server filenew-item server.py

为了访问 Gemini AI,还需要安装相关的依赖:

uv add google-genai

然后编写我们的 server.py :

pyfrom typing import Anyfrom mcp.server.fastmcp import FastMCPfrom google import genaifrom google.genai import typesfrom io import BytesIOimport osimport uuidfrom PIL import Imageimport sys# Initialize FastMCP servermcp = FastMCP("gemini-image-mcp-server")def generate_image_from_gemini(prompt: str) -> str:api_key = os.getenv('GEMINI_API_KEY')client = genai.Client(api_key=api_key)contents = (prompt)response = client.models.generate_content(model="gemini-2.0-flash-exp-image-generation",contents=contents,config=types.GenerateContentConfig(response_modalities=['Text', 'Image']))for part in response.candidates[0].content.parts:if part.text is not None:# print(part.text)sys.stderr.write(part.text + '\n')elif part.inline_data is not None:image = Image.open(BytesIO((part.inline_data.data)))# 创建 generated-images 目录(如果不存在)if not os.path.exists('generated-images'):os.makedirs('generated-images')# 生成唯一文件名unique_filename = f"generated-images/{uuid.uuid4}.png"image.save(unique_filename)return os.path.abspath(unique_filename)# 如果没有找到有效的图像数据,返回一个默认的错误信息return "No valid image data found."@mcp.toolasync def generate_image(prompt: str) -> str:"""Get the image path from prompt.Args:prompt: Text used to generate the image"""path = generate_image_from_gemini(prompt)return pathif __name__ == "__main__":# Initialize and run the servermcp.run(transport='stdio')

@mcp.tool 修饰的方法,将会暴露为 MCP 的 Tool 。方法 generate_image_from_gemini 完成了实际的 Gemini 调用。

而最后,通过 mcp.run(transport='stdio') ,我们指明 MCP Server 将会以标准输入接收调用。因此,我们的程序一定不要向标准输出中输出内容,这样会影响 MCP Server 的使用。

VSCode 中打开 Roo Code,在顶部点击 MCP Servers,然后点击 Edit MCP Settings,修改内容为:

json{"mcpServers": {"gemini-image-mcp-server": {"command": "uv","args": ["--directory","D:\\path-of-the-dir\\gemini-image-mcp-server","run","server.py"],"env": {"GEMINI_API_KEY": "your-gemini-api-key"}}}}

主要是修改 args 中我们 gemini-image-mcp-server 的路径,以及你的 GEMINI_API_KEY,这个也可以直接使用我们快速入门中得到的 KEY 。

重启 VSCode ,应该可以在 Roo Code 的 MCP Servers 部分看到我们设置的 gemini-image-mcp-server,有点小激动啊。

下面,验证我的 MCP Server 的时候到了。在对话窗口输入:

请根据本文的内容,发挥一些联想,生成一个可以当作封面的图

Roo Code 给了我令人开心的提示:

Now, I will use the generate_image tool from the gemini-image-mcp-server to generate the image.

啊,已经识别出来了,有点意思。点击继续:

Task CompletedI have generated an image based on the content of the document. The image is located at D:\projects\rocksun\gemini-image-mcp-server\generated-images\cfa92d67-e6aa-4527-85f2-3ae4e1ef6b6d.png.

图片出来了,但是和我预期的略有差别,毕竟我是想让出现在 markdown 文件所在的目录,所以我继续提示:

我希望这个图片保存到 md 的目录,并修改为 cover.png

不负众望,Roo Code 帮我执行了这个命令:

move D:\projects\rocksun\gemini-image-mcp-server\generated-images\cfa92d67-e6aa-4527-85f2-3ae4e1ef6b6d.png 002-create-gemini-image-mcp-server\cover.png

不过这图片,很有 Gemini 特色,大家应该已经看过了。

我意识到,我之前做的许多自动化工作,都可以做成 MCP Server 的 Tool,而且我也不需要像以前那样提供精确的参数,Roo Code 可以帮我省掉许多琐碎的细节,似乎很快就可以实现“动动嘴”就把活干了的阶段。

下一步,也许就是去丰富我自己的 Tools。或者,你有什么想说的,可以联系我,大家一起探讨。

来源:雪松教育

相关推荐