最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

创建图片生成MCP Server

网站源码admin1浏览0评论

创建图片生成MCP Server

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

创建项目

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

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

代码语言:javascript代码运行次数:0运行复制
powershell -ExecutionPolicy ByPass -c "irm .ps1 | iex"

然后创建项目:

代码语言:javascript代码运行次数:0运行复制
# Create a new directory for our project
uv init gemini-image-mcp-server
cd gemini-image-mcp-server

# Create virtual environment and activate it
uv venv
.venv\Scripts\activate

# Install dependencies
uv add mcp[cli] httpx

# Create our server file
new-item server.py

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

代码语言:javascript代码运行次数:0运行复制
uv add google-genai

然后编写我们的 server.py :

代码语言:javascript代码运行次数:0运行复制
from typing import Any
from mcp.server.fastmcp import FastMCP
from google import genai
from google.genai import types
from io import BytesIO
import os
import uuid
from PIL import Image
import sys

# Initialize FastMCP server
mcp = 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.tool()
async 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 path

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

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

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

集成到 Roo Code

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

代码语言:javascript代码运行次数:0运行复制
{
  "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 的时候到了。在对话窗口输入:

代码语言:javascript代码运行次数:0运行复制
请根据本文的内容,发挥一些联想,生成一个可以当作封面的图

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

代码语言:javascript代码运行次数:0运行复制
Now, I will use the generate_image tool from the gemini-image-mcp-server to generate the image.

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

代码语言:javascript代码运行次数:0运行复制
Task Completed
I 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 文件所在的目录,所以我继续提示:

代码语言:javascript代码运行次数:0运行复制
我希望这个图片保存到 md 的目录,并修改为 cover.png

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

代码语言:javascript代码运行次数:0运行复制
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。或者,你有什么想说的,可以联系我,大家一起探讨。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-192,如有侵权请联系 cloudcommunity@tencent 删除importserver工作入门image

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论