为什么要实现这个项目

近期使用cursor进行开发的过程中,发现cursor的前端生成能力很强,做landing页面的速度很快,但是存在一个问题-没有办法在生成网页的过程中把图片也配上,还需要自己通过外部工具来进行配图,于是想到是否可以把图像生成工具通过mcp接入到cursor中,这样在cursor进行网站生成时可以直接把图片也生成了,就不用自己再配图了。

cursor现阶段默认不支持直接生成图片

cursor现阶段默认不支持直接生成图片

于是就通过集成腾讯混元文生图模型,使用Anthropic官方提供的python MCP SDK,通过fastmcp实现了一个图像生成的mcp server,支持在cursor这样的 AI IDE(MCP host)中通过简单配置就能够实现直接生成图片的功能。

集成到cursor后自动调用mcp图像生成工具

集成到cursor后自动调用mcp图像生成工具

目前的实现是通过配置一个文件路径,在server运行的服务器上添加一个位置来保存图片,图片就会生成并保存到指定路径下,具体流程后文会再做介绍。

cursor调用工具生成图片并保存

cursor调用工具生成图片并保存

然后我们可以从保存路径下读取这个图片并在其它地方使用,可以看到生成的效果还可以,也遵从了指令(生成一张五一假期的图片,横向的,油画风格)。

cursor调用工具生成的图片

cursor调用工具生成的图片

MCP对于这个项目的实用价值

MCP最近讨论的比较多,相关的文章也很多,此处就不做详细介绍。可以从图像生成这个场景来看一下MCP的实际作用和价值,比如对于混元生图模型,官方提供了生成图像的API[1],API包括提交任务和生成任务,提交任务就是建立连接并把生图任务提交,生成任务就是调用文生图模型来生成用户期望的图片。

我们来看生像图片这个接口,我们主要用到的参数包括四个:Prompt, NegativePrompt,Style,Resolution。其中Prompt和NegativePrompt可以传任意字符串参数,而Style,Resolution只能从默认的可选值列表中选择,可能出现传的参数不在默认支持的参数列表的情况,如LLM产生幻觉,在function call的过程中给Resolution传了一个不支持的分辨率,API调用就会出错。

 

我们可以从两个角度来谈一下MCP的实用价值,对于LLM适配来说,因为不同LLM API的function call格式要求不一样,开发者如果同时使用多个LLM API,需要给每个LLM API去做适配,而有了MCP呢,适配这个活就交给client就行,server端提供统一的资源和工具,client来做统一的LLM适配,就不需要每个开发者都自己做LLM的适配。

另外一个角度就是资源和工具和适配,我们以工具举例。如果我们在多个项目(五个A,B,C,D,E五个项目)中要使用这个API,每个项目都需要集成这个API进去,或者我们可以再封装一层,部署一个统一的生成接口X,由多个应用端来调用。这样存在的一个问题是,一旦这个api的参数发生变动,那需要A-E五个项目都要做适配,才能保证调用不会出错。原因在于X的服务改变了,A-E五个项目是无感知,需要重新做适配才行。

而使用MCP呢,把X接口集成为MCP server。如果X服务端的工具发生改动,client在调用工具前,会先到server端获取工具的相关信息,再由LLM来决定使用什么工具和对应的参数。相当于只要client去调用server集成的X接口,X更新的信息会立马同步到client,这样A-E无需对当前的代码做任何适配,LLM会根据获取到的X上工具参数的改动信息来做参数自动适配。

从目前笔者的实际经验来谈,MCP的一个实用价值就是建立了一个LLM与外部(资源)工具的统一通信标准,降低了开发者集成LLM和工具的开发工作量,也为更多agent工具生态的拓展提供了边界扩展的通信参考模板。

 

项目技术思路

现在MCP server的开发主要使用anthropic 官方的MCP开源代码库,另外一些项目则是抽象了MCP底层代码进行了集成,方便开发者进行快速开发,比如FastMCP。FastMCP 提供了一个高层次的 Pythonic 接口,使得构建 MCP 服务器变得更加简洁和直观。通过使用装饰器,开发者可以轻松地定义工具、资源和提示等组件,减少了大量的样板代码 。现在FastMCP 已经被集成到官方的 MCP Python SDK 中,不需要单独安装FastMCP,本项目就是通过MCP的FastMCP来进行实现的。

实现步骤

1.实现图像生成API功能

在MCP server对工具进行集成前,我们需要这个工具具备完整的功能,即这个工具实现了什么功能,这些工具具体的函数需要先进行定义和实现。在我们这个项目里,image_generation_tool.py实现了混元文生图接口的建立连接,提交任务和生成任务。

2.使用MCP框架对工具API进行MCP server服务封装

接下来就是用MCP(实际用的FastMCP)对工具提供的函数进行封装,目的就是让client知道这个server上是什么工具,这个工具用来干嘛,需要怎么用。在此项目中,通过mcp_image_server.py进行了实现,fastmcp提供了简单的装饰器语法来实现工具封装,对工具执行的方法使用@mcp.tool()就完成了集成,然后FastMCP可以对方法参数进行自动转换,不需要再显示的schema中在进行方法的参数定义和描述。

 

3.实现一个用于测试MCP client

为了测试开发MCP server是否可用,需要实现一个client来对server服务进行测试,MCP服务支持stdio和SSE两种方式,我们这个项目使用stdio(example_client.py),所以就使用mcp的stdio_client来搭建一个client进行通信调用。

client运行测试

client运行测试

4.一个开发demo测试

为了体现实际的效果,这个项目还实现了一个前端项目demo,这个项目的作用是展示如何在cursor等AI IDE自动实现一个网页搭建的过程中,使用MCP提供的图像生成工具,自动完成配图,不需要自己再单独用另外的ide或者LLM来生成配图。

web demo 配图实现效果

web demo 配图实现效果

如何使用

项目代码目前已经上传github,项目地址: https://github.com/ChristopheZhao/image-gen-mcp-server 。具体的操作可参考Readme文件,此处就使用步骤做一个简单说明。

1.安装python环境

在调用mcp工具的时候,需要一个配置好的python环境给工具进行执行,推荐使用uv进行python环境安装。

# 安装 UV(Windows)
curl -sSf https://astral.sh/uv/install.ps1 | powershell

# 安装 UV(macOS/Linux)
curl -sSf https://astral.sh/uv/install.sh | bash

# 克隆项目并进入目录
cd path/to/image-gen-mcp-server

# 创建 UV 虚拟环境
uv venv
# 或指定环境名
# uv venv my-env-name

# 激活虚拟环境(Windows)
.venv\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source .venv/bin/activate

# 安装依赖(推荐)
uv pip install -e .

# 或使用锁定文件安装精确版本
uv pip install -r requirements.lock.txt

2.配置变量环境

项目需要提供腾讯元的secret_id和secret_key来访问混元生图服务,另外还需要指定一个路径来保存文件。原本项目使用二进制文件来传输图片,但是发现客户端解析不太方便,因此改为server直接将图片保存到指定位置,然后用户自己再来提取图片。

将项目的.env.example改为.env配置自己的key和路径即可。

TENCENT_SECRET_ID="Your tencent secret id"
TENCENT_SECRET_KEY="Your tencent secret key"
MCP_IMAGE_SAVE_DIR="Your save image dir"

3.客户端配置集成

接下来就可以在MCP客户端配置server信息,实现MCP的整体集成。

3.1获取python环境执行器地址

MCP在调用server服务时是执行python开发的工具函数,因此需要找到python环境的执行器地址,这个地址在mcp配置中会用到。我们使用uv安装,python环境默认就在就在.venv目录下。

python执行器路径文件

python执行器路径文件

如果项目目录对应

'D:\\code\\image-gen-mcp-server'

那python执行器路径就加一个默认的\.venv\Scripts\python.exe

"D:\\code\\image-gen-mcp-server\\.venv\\Scripts\\python.exe"

3.2在ide(cursor)中配置mcp.json

在cursor中点击File,依次选择preference,vs code Settings,点击打开settings界面。

 

settings左侧选择MCP,点击右上角的蓝色按钮"Add new global MCP server"打开mcp.json配置文件。

 

需要在配置文件中添加mcp server的相关配置信息,其中command对应3.1获取的路径,args就是项目的mcp_image_server.py文件路径。

{
  "mcpServers": {
    "image-generation": {
      "name": "图像生成服务",
      "description": "使用腾讯混元AI生成图像的MCP服务",
      "type": "stdio",
      "command": "{Your_path}\\image-gen-mcp-server\\.venv\\Scripts\\python.exe",
      "args": ["{Your_path}\\image-gen-mcp-server\\mcp_image_server.py"],
      "environment": ["TENCENT_SECRET_ID", "TENCENT_SECRET_KEY","MCP_SERVER_PORT"],
      "autoRestart": true,
      "startupTimeoutMs": 30000
    }
  }
} 

配置完成后我们在settings界面的MCP Servers界面看对应的这个tool的左上角的小点如果是绿色,就说明配置完成了。

 

体验使用

在配置好之后,我们就可以在cursor中来试一下效果了。

Cursor执行体验

在 Cursor 中输入生成图片的命令,cursor会识别到用户意图然后发起Image tool的调用

 

这里需要用户授权,点击'run'蓝色按钮,然后就开始调用我们配置的图像生成mcp服务,生成图像后就会保存到指定的文件夹位置下。

 

我么可以在指定目录(MCP_IMAGE_SAVE_DIR)下查看或使用保存的图片,发现还是按照需求生成了一张水平的山景图。

 

实际开发体验

回到文初提到的需求,搭建这个mcp server的目的是为了使用cursor开发,可以直接让它配图。实际上实现这个项目了吗?测试下来,基本需求已经实现,但如果要更准确的指令遵从,或者使用云空间来存储图片,会更方便。

以我最近的写的一个项目页面为例,原本有一个博客界面,展示了三篇博客但是没有配图。

 


然后cursor中要求进行配图,cursor会调用三次我们的工具生成三张图,这样一次性就完成了网页配图了。

 


在执行这个过程中有意思的是,cursor知道我们调用mcp工具保存的图片在另外一个路径,然后它会规划把图片复制移动到这个项目的资源文件夹中。

 


你只需要点击确认,图片就拷贝过来了。

 


这也可以看到cursor配合使用推理模型在实际编程中的实用价值和潜力。

结语

以上就是对开发一个图像生成 mcp server的记录和思考,欢迎大家交流,项目目前支持在cursor和windsurf中配置使用,如果有需要请到GitHub进行clone使用。

参考资料:

[1] https://cloud.tencent.com/document/product/1729/97730
[2] https://github.com/modelcontextprotocol/python-sdk
[3] https://github.com/jlowin/fastmcp

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐