Image Search
БесплатноНе проверен一个基于Spring Boot + Spring AI的图片搜索 MCP Server。它把「从 Pexels 搜索图片」的能力以标准 MCP 协议暴露出来,任何支持 MCP 的 AI 客户端(Trae、Claude、Cherry Studio 等)都能直接调用。
Описание
一个基于Spring Boot + Spring AI的图片搜索 MCP Server。它把「从 Pexels 搜索图片」的能力以标准 MCP 协议暴露出来,任何支持 MCP 的 AI 客户端(Trae、Claude、Cherry Studio 等)都能直接调用。
README
一个基于 Spring Boot + Spring AI 的图片搜索 MCP Server。它把「从 Pexels 搜索图片」的能力以标准 MCP 协议暴露出来,任何支持 MCP 的 AI 客户端(Trae、Claude、Cherry Studio 等)都能直接调用。
功能特性
- MCP 协议服务端:对外暴露
searchImage工具,返回图片 URL 列表。 - 双传输模式:
stdio:本地子进程模式,由 AI 客户端直接拉起程序,通过标准输入输出通信。sse:服务部署在服务器上,多个客户端通过网络远程连接。
- 每个客户端可用自己的 API Key:客户端通过 URL 查询参数
?key=携带 Pexels Key;未携带时回退到服务端环境变量。 - 数量安全边界:返回数量被限制在
1~30,防止大模型传入离谱的值。
技术栈
| 组件 | 版本 |
|---|---|
| Java | 21 |
| Spring Boot | 3.5.16 |
| Spring AI MCP Server | 1.1.6 |
| Hutool | 5.8.46 |
| Lombok | 1.18.48 |
目录结构
image-search-mcp
├── src/main/java/com/yupi/yuimagesearchmap
│ ├── YuImageSearchMapApplication.java # 启动类
│ ├── config
│ │ ├── PexelsProperties.java # Pexels 配置(api-key / api-url / defaultCount)
│ │ └── StreamableTransportConfig.java # 网络模式:把客户端 ?key= 透传到工具层
│ └── tools
│ ├── ImageSearchTool.java # searchImage 工具实现
│ └── McpServerApplication.java
├── src/main/resources
│ ├── application.yaml # 主配置:profiles.active 决定用哪套模式
│ ├── application-stdio.yml # stdio 模式配置
│ ├── application-sse.yml # 网络模式配置(Streamable HTTP)
│ └── logback-spring.xml
└── pom.xml
快速开始
1. 前置条件
- JDK 21+(命令行执行
java -version能打出版本即可) - Maven(或直接使用仓库自带的
mvnw) - 一个 Pexels API Key(免费注册即可申请)
2. 构建
./mvnw clean package -DskipTests
构建完成后得到 jar:target/yu-image-search-map-0.0.1-SNAPSHOT.jar
记住这个 jar 的完整绝对路径,
绝对路径/target/yu-image-search-map-0.0.1-SNAPSHOT.jar,后面配置要用。
3. 三种使用方案
配置前,先记住三个问题(新手按这三步想就不会乱):
- 用哪种模式?
stdio(本地子进程)还是sse(网络服务) - 服务端怎么处理? stdio 不用你启动;sse 必须由你先启动
- Key 放哪里? stdio 放客户端
env;sse 放客户端url的?key=(服务端可兜底)
| 方案 | 模式 | 一句话说明 |
|---|---|---|
| 方案一:本地 stdio 模式 | stdio |
客户端临时拉起 jar,不用自己启动、不占端口 |
| 方案二:本地 HTTP 模式 | sse |
自己先启动服务,客户端按网址连 |
| 方案三:在 Trae 中配置 | stdio / sse |
方案一、二的客户端配置,在 Trae 里怎么放 |
方案一:本地 stdio 模式(新手建议先跑通这个)
先理解一句话:stdio 模式下,程序不是「常驻服务」,而是客户端在需要时临时拉起的一个子进程,用完即走。所以你不需要自己启动它,也不会有端口占用。
第一步:服务端设置 —— 告诉程序「这次用 stdio」
项目默认是 sse 模式,需要切换。两种方式二选一:
| 方式 | 怎么做 | 特点 |
|---|---|---|
| A. 启动参数(推荐) | 在客户端 args 里加 -Dspring.profiles.active=stdio |
不改项目文件、不用重新打包,最省事 |
| B. 改配置文件 | 把 application.yaml 的 active 改成 stdio,再重新打包 |
一劳永逸,但每次切换模式都要重新打包 |
方式 B 的具体改法(application.yaml),只需把模式改成stdio模式即可:
spring:
profiles:
active: stdio
第二步:客户端配置 —— 把 jar 交给客户端拉起
以推荐的方式 A 为例(注意 args 的顺序)
若你是自建 Spring AI 客户端(自己写 Java 程序去连这个服务),在客户端工程的 application.yaml 里加上:
spring:
ai:
mcp:
client:
enabled: true
stdio:
servers-configuration: classpath:mcp-servers.json
上面这行只是「声明去读哪个文件」,真正描述怎么拉起服务的是 mcp-servers.json(放在客户端工程的 src/main/resources/ 下,Trae / Claude Desktop 通用格式):
{
"mcpServers": {
"image-search-mcp": {
"command": "java",
"args": [
"-Dspring.profiles.active=stdio",
"-jar",
"绝对路径/target/yu-image-search-map-0.0.1-SNAPSHOT.jar"
],
"env": {
"PEXELS_API_KEY": "你的 Pexels API Key"
}
}
}
}
| 字段 | 填什么 |
|---|---|
command |
装好 JDK 21 就是 java |
args[0] |
-Dspring.profiles.active=stdio,必须在 -jar 前面 |
args[2] |
上一步记下的 jar 绝对路径 |
env.PEXELS_API_KEY |
你的 Pexels Key,必填 |
第三步:验证
在客户端里让它调用 searchImage 搜索「猫」,能返回一串图片 URL 就成功了。
新手最容易踩的 3 个坑
-Dspring.profiles.active=stdio必须写在-jar之前(它是给 JVM 的参数,顺序错了不生效)。- 路径要用绝对路径;JSON 里写反斜杠必须双写
\\,或者干脆统一用正斜杠/(Windows 也认)。 - stdio 模式没有网络上下文,
?key=无效,Key 只能放在env.PEXELS_API_KEY里。
方案二:本地 HTTP 模式(Streamable HTTP,配置为 sse)
先理解一句话:这一模式下,程序是一个常驻的网络服务,必须由你先启动、并保持运行;客户端再通过网络连上来。
第一步:服务端设置 —— 先启动服务
确认用
sse模式(application.yaml 默认就是sse,通常无需改动):spring: profiles: active: sse server: port: 8127启动服务,Key 有两种给法(任选一种):
# 方式一:命令行参数 java -jar target/yu-image-search-map-0.0.1-SNAPSHOT.jar --pexels.api-key=你的 Pexels API Key# 方式二:先设环境变量再启动(Key 不出现在命令行里) # Windows PowerShell $env:PEXELS_API_KEY="你的 Pexels API Key" java -jar target/yu-image-search-map-0.0.1-SNAPSHOT.jar这里的 Key 是服务端自己的 Key,属于兜底:客户端带了
?key=就用客户端的,没带才用这个。想让每个用户用自己的 Key,服务端甚至可以先不配。启动后不要关闭这个终端窗口,关了服务就停了。
第二步:客户端配置 —— 按网址连
若你是自建 Spring AI 客户端,在客户端工程的 application.yaml 里加上:
spring:
ai:
mcp:
client:
enabled: true
streamable-http:
connections:
image-search-mcp:
url: http://localhost:8127
endpoint: /mcp?key=你的 Pexels API Key
若用的是 Trae / Claude Desktop 这类通用 MCP 客户端,则改填
url(见方案三),格式不同但含义一致。
url是服务端地址,/mcp是固定接入路径。?key=可选:带上就用这个 Key,不带则用服务端启动时配的 Key。- 服务在远程服务器时,把
url: http://localhost:8127换成服务器地址,例如url: http://106.53.54.220:8127。
第三步:验证
在服务器开启的情况下,浏览器访问 http://localhost:8127/mcp ,返回 Invalid Accept header. Expected TEXT_EVENT_STREAM 就说明服务已就绪(这是 MCP 的正常协议响应,不是报错)。
新手最容易踩的 3 个坑
- 必须先启动服务,否则客户端连不上(这点和 stdio 正好相反)。
?key=直接拼在url后面,注意不要多空格、不要漏掉?。- 连远程服务器时,要确保服务器防火墙 / 云安全组已放行
8127端口。
方案三:在 Trae 中配置
上面两种模式的客户端配置都能直接用在 Trae 里,这一节只说明在 Trae 中的放置位置和操作步骤。
1)找到 MCP 配置文件(任选其一)
- 全局配置文件:
C:\Users\<用户名>\AppData\Roaming\Trae CN\User\mcp.json - 或打开 Trae → 设置 → MCP → 添加 → 手动配置,粘贴 JSON
2)粘贴对应模式的配置(二选一,或两个都加)
- 想用 stdio:粘贴「方案一 → 第二步」的 JSON(由 Trae 拉起 jar,无需另启服务)
- 想用 HTTP:粘贴「方案二 → 第二步」的 JSON(需先启动服务)
若两个都想加,可在 mcpServers 里写两条,用不同的名字区分:
{
"mcpServers": {
"image-search-stdio": {
"command": "java",
"args": [
"-Dspring.profiles.active=stdio",
"-jar",
"绝对路径/target/yu-image-search-map-0.0.1-SNAPSHOT.jar"
],
"env": {
"PEXELS_API_KEY": "你的 Pexels API Key"
}
},
"image-search-http": {
"url": "http://localhost:8127/mcp?key=你的 Pexels API Key"
}
}
}
3)验证:保存后在 Trae 的 MCP 面板确认 image-search-mcp 状态为「已连接」,然后在对话里让它调用 searchImage 即可。
两种模式的区别:stdio 由 Trae 自己拉起 jar、不占端口、Key 只能走
env;HTTP 需要先启动服务、可远程共享、Key 可走?key=。
方案四:远程部署(直接用作者已部署的服务)
先理解一句话:作者已把服务部署在公网服务器上并保持运行,你不需要自己搭建或启动,让客户端直接连下面的地址即可。
服务地址:http://image-search-mcp.websi.vip:8127/mcp
怎么用:把方案二、方案三里客户端配置的本机地址 http://localhost:8127 换成 http://image-search-mcp.websi.vip:8127,其余配置保持不变。
以 Trae 为例(对应方案三第 2 步):
{
"mcpServers": {
"image-search-http": {
"url": "http://image-search-mcp.websi.vip:8127/mcp?key=你的 Pexels API Key"
}
}
}
三点注意:
- 端口
8127和路径/mcp都不能省略。- 请通过
?key=带上你自己的 Pexels Key,走自己的额度;不带则依赖服务端是否预置了 Key。- 这是作者的私人服务器,仅作体验分享,随时可能失效;正式使用请按方案二自行部署。
验证:保存后在 Trae 的 MCP 面板确认状态为「已连接」,再让它调用 searchImage 搜索「猫」即可。
配置说明
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
pexels.api-key |
PEXELS_API_KEY |
空 | Pexels API Key,为空时启动只告警不阻断 |
pexels.api-url |
— | https://api.pexels.com/v1/search |
Pexels 搜索接口地址,缺失会导致启动失败 |
pexels.default-count |
— | 5 |
未指定数量时的默认返回张数 |
server.port |
— | 8127 |
网络模式监听端口 |
API Key 取值优先级:客户端查询参数 ?key= > 环境变量 PEXELS_API_KEY > 配置文件默认值。
MCP 工具
searchImage
从 Pexels 搜索图片,返回图片 URL 列表(换行分隔)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query |
String | 是 | 搜索关键词,例如 猫 |
count |
Integer | 否 | 期望返回的图片数量,范围 1~30,不填使用服务端默认值 |
返回示例:
https://images.pexels.com/photos/xxx/pexels-photo-xxx.jpeg?auto=compress&cs=tinysrgb&h=350
https://images.pexels.com/photos/yyy/pexels-photo-yyy.jpeg?auto=compress&cs=tinysrgb&h=350
部署
以腾讯云轻量应用服务器 + 宝塔面板为例:
/www/server/java/jdk-21.0.2/bin/java \
-Xmx512m -Xms256m \
-jar /www/wwwroot/yu-image-search-map-0.0.1-SNAPSHOT.jar \
--server.port=8127 \
--pexels.api-key=你的 Pexels API Key
部署后需放行端口:
- 服务器防火墙(如宝塔防火墙)放行 TCP
8127 - 云厂商安全组 / 防火墙放行 TCP
8127
验证:浏览器访问 http://<服务器地址>:8127/mcp,返回 Invalid Accept header. Expected TEXT_EVENT_STREAM 说明服务对外可达(这是正常的 MCP 协议响应)。
常见问题
Q:启动时提示未配置 Pexels API Key?
A:这是告警而非错误。网络模式下可由客户端通过 ?key= 携带 Key;stdio 模式必须在客户端 env 里配置 PEXELS_API_KEY。
Q:为什么用 Streamable HTTP 而不是旧的 SSE? A:MCP 1.1.6 起 SSE 传输已被标记为废弃,且旧 SSE 拿不到请求中携带的信息,无法实现「每个客户端用自己的 Key」。
Q:搜索返回鉴权失败?
A:检查 Key 是否正确,或客户端是否携带了 ?key=。
Q:客户端显示连接失败 / 工具没出现?
A:stdio 先检查 -Dspring.profiles.active=stdio 是否写在 -jar 前面、jar 路径是否正确;HTTP 先检查服务是否已在运行、url 是否可访问。
License
本项目基于 MIT License 开源,可自由使用、修改和分发(需保留版权声明)。
Copyright (c) 2026 202009064
Установка Image Search
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/202009064/image-search-mcpFAQ
Image Search MCP бесплатный?
Да, Image Search MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Image Search?
Нет, Image Search работает без API-ключей и переменных окружения.
Image Search — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Image Search в Claude Desktop, Claude Code или Cursor?
Открой Image Search на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
ARA
Generate images, video and audio from any AI agent — one connector.
автор: ARAOmni Video
An MCP server that transforms LLM-enabled IDEs into professional video editors by pre-processing footage into text proxies, generating motion graphics via HTML/
автор: buildwithtazaYouTube
Transcripts, channel stats, search
автор: YouTubeEverArt
AI image generation using various models.
автор: modelcontextprotocolgpu-bridge/mcp-server
GPU inference API for LLMs, image and video generation, TTS, Whisper, embeddings, reranking and OCR, paid per use via x402 or an API key.
автор: gpu-bridgemerterbak/Grok-MCP
Access xAI's Grok API with agentic tool calling, image generation, vision and file support.
автор: merterbakSureScaleAI/openai-gpt-image-mcp
Image generation and editing with OpenAI's GPT image models.
автор: SureScaleAIYangLiangwei/PersonalizationMCP
Aggregate personal data from Steam, YouTube, Bilibili, Spotify, Reddit and other gaming, music, video and social platforms, with OAuth2 and token management.
автор: YangLiangweiAceDataCloud/MCPFlux
Flux image generation and editing from Black Forest Labs via the Ace Data Cloud API.
автор: AceDataCloudAceDataCloud/MCPNanoBanana
Nano Banana image generation and editing, including virtual try-on and product placement in realistic scenes.
автор: AceDataCloudCompare Image Search with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории media
