前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >创建图片生成MCP Server

创建图片生成MCP Server

作者头像
云云众生s
发布2025-03-20 11:04:18
发布2025-03-20 11:04:18
60800
代码可运行
举报
文章被收录于专栏:云云众生s云云众生s
运行总次数:0
代码可运行

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

创建项目

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

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

代码语言:javascript
代码运行次数:0
运行
复制
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.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.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建项目
  • 集成到 Roo Code
  • 验证
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档