<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>MCP - EchoPing&#39;s Blog</title>
        <link>/tags/mcp/</link>
        <description>最新内容 - MCP - EchoPing&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="/tags/mcp/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>image-mcp-hub：一个服务，让所有 Agent 共用文生图能力</title>
            <link>/projects/image-mcp-hub/</link>
            <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
            <guid>/projects/image-mcp-hub/</guid>
            <description>&lt;p&gt;社区里现成的文生图 MCP 服务器大多是 stdio 传输方案——每个客户端都要单独配置一遍进程和密钥，如果客户端一多或者多设备环境下就成了配置地狱。&lt;/p&gt;&#xA;&lt;p&gt;image-mcp-hub 换了个思路：它把任意兼容 OpenAI 的文生图接口（&lt;code&gt;/v1/images/generations&lt;/code&gt;）封装成一个常驻的 MCP 服务，通过 streamable HTTP 暴露出来，所有 Agent 共用一份配置，改一处全局生效。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;核心思路：做一个 MCP 中间层。上游接口无论返回 URL 还是 base64，都由它统一下载、解码、保存为本地文件，Agent 拿到的永远是一个可以直接访问的本地图片链接。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;解决什么问题&#34;&gt;解决什么问题&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;多客户端共享&lt;/strong&gt;：多个 MCP 客户端共用同一批模型，无需为每个客户端单独配置 stdio 进程与密钥；客户端仅支持 HTTP 传输的也能接入。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;统一管理&lt;/strong&gt;：Web 界面统一管理模型增删、API key 轮换与用量统计，修改后对所有 Agent 即时生效。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;抹平上游差异&lt;/strong&gt;：上游返回形态不一（部分返回 URL、部分返回 base64），中间层统一处理，Agent 无需关注差异。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;核心特性&#34;&gt;核心特性&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;单端口多路径&lt;/strong&gt;：&lt;code&gt;/mcp&lt;/code&gt;（MCP 端点）、&lt;code&gt;/admin&lt;/code&gt;（Web 管理端）、&lt;code&gt;/images/&lt;/code&gt;（图片访问）复用同一 HTTP 服务。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;模型即工具&lt;/strong&gt;：每个已配置模型对应一个 MCP 工具，工具名使用自定义 alias，支持按需增删。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;参数透传&lt;/strong&gt;：&lt;code&gt;prompt&lt;/code&gt; 必填，&lt;code&gt;size&lt;/code&gt; / &lt;code&gt;n&lt;/code&gt; / &lt;code&gt;quality&lt;/code&gt; / &lt;code&gt;style&lt;/code&gt; / &lt;code&gt;background&lt;/code&gt; / &lt;code&gt;output_format&lt;/code&gt; 可选，均原样转发至上游。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;response_format 内部处理&lt;/strong&gt;：上游返回 &lt;code&gt;url&lt;/code&gt; 时由中间层下载，返回 &lt;code&gt;b64_json&lt;/code&gt; 时由中间层解码，统一保存为本地文件；扩展名按图片实际字节判定，与 &lt;code&gt;output_format&lt;/code&gt; 无关。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;API key 轮询&lt;/strong&gt;：每个模型的 key 列表 round-robin 轮询，游标在内存推进、定时与退出时惰性落盘。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置热加载&lt;/strong&gt;：token、密码、清理规则、模型列表修改后即时生效，无需中断连接。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Web 管理端&lt;/strong&gt;：中英双语、深浅主题、仪表盘（请求统计 / 趋势图 / 最近调用）、模型增删改查、图片浏览与全局设置。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;统计持久化&lt;/strong&gt;：请求统计定期写入 &lt;code&gt;data/stats.json&lt;/code&gt;，重启后数据不丢失。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;架构&#34;&gt;架构&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Agents (A / B / Claude Code / Cursor / ...)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │  POST /mcp   ·   Authorization: Bearer &amp;lt;mcp_token&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ▼&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;image-mcp-hub   (:12300 · Go · MCP)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │  端点：/mcp (MCP·Bearer) · /admin (Web·密码) · /images/ (公开)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ├── POST /v1/images/generations ─────►  OpenAI 兼容上游&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │      上游返回 url → 中间层下载  /  b64_json → 中间层解码&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ├── 保存图片 + sidecar .meta.json ──►  ./data/images/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  └── 写请求统计 ────────────────────►  ./data/stats.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;图片按 &lt;code&gt;20060102-150405_uuid.png&lt;/code&gt; 命名，sidecar 元数据记录模型名、prompt、参数、上游信息；清理支持按时间（&lt;code&gt;max_age_days&lt;/code&gt;）和按数量（&lt;code&gt;max_count&lt;/code&gt;）两条独立规则，均设为 0 时永久留存。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;技术栈&#34;&gt;技术栈&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;项目&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;说明&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;语言&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Go&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;协议&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;MCP streamable HTTP&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;上游&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;OpenAI 兼容文生图接口&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;前端&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;管理端 SPA（go:embed 打包进二进制）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;存储&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;本地文件 + JSON 统计持久化&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;部署&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;单二进制 / Docker（GHCR，linux/amd64 + arm64）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;部署与使用&#34;&gt;部署与使用&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;go build&lt;/code&gt; 后直接运行，或使用 Docker 镜像（配置、图片、统计统一存于卷 &lt;code&gt;/app/data&lt;/code&gt;）。首次启动自动生成默认 &lt;code&gt;config.json&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;在管理端「模型」页面添加模型（alias、model_id、base_url、api_keys），即可供 Agent 调用。客户端接入把端点指向 &lt;code&gt;/mcp&lt;/code&gt; 并携带 Bearer token 即可，Claude Desktop 填 &lt;code&gt;claude_desktop_config.json&lt;/code&gt;，Claude Code 用 &lt;code&gt;claude mcp add --transport http&lt;/code&gt;。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;默认密码 &lt;code&gt;password&lt;/code&gt; 与默认 token &lt;code&gt;sk-123456&lt;/code&gt; 仅供本地体验，部署前务必修改。&lt;code&gt;/images/&lt;/code&gt; 无鉴权且默认开启目录列举，公网部署务必在反向代理层添加访问控制并启用 HTTPS。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;常见问题速览&#34;&gt;常见问题速览&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;修改端口 / 存储目录为何要重启？&lt;/strong&gt; 二者在进程启动时固定；token、密码、清理规则与模型列表走热加载，即时生效。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;重命名工具名后历史统计还在吗？&lt;/strong&gt; 在。统计以模型创建时分配的 UUID 为键，与工具名、模型 id 解耦，升级旧版本时历史数据会自动迁移。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;不同渠道同 model id 怎么统计？&lt;/strong&gt; 各自独立计数，仪表盘以 &lt;code&gt;model_id · 工具名&lt;/code&gt; 分行展示。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;上游无法识别的参数会如何处理？&lt;/strong&gt; 原样透传，由上游自行忽略；&lt;code&gt;response_format&lt;/code&gt; 由中间层接管。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;key 轮询遇到失效的 key 会怎样？&lt;/strong&gt; 错误原样上抛，不做失效标记，可在管理端手动替换。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;统计与图片会随仓库推送吗？&lt;/strong&gt; 不会，&lt;code&gt;data/&lt;/code&gt; 与 &lt;code&gt;config.json&lt;/code&gt; 均已在 &lt;code&gt;.gitignore&lt;/code&gt; 中排除。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;相关链接&#34;&gt;相关链接&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;项目地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/EchoPing07/image-mcp-hub&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;EchoPing07/image-mcp-hub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;仅支持同步 &lt;code&gt;generations&lt;/code&gt; 接口，上游返回 URL 或 base64 两种形态都会被下载/解码为本地文件。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;</description>
        </item></channel>
</rss>
