{"_id":"@ayaka209/assets-gen-mcp","_rev":"6-92fca88c4a3d22f150ec14fd395dede1","name":"@ayaka209/assets-gen-mcp","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.0":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.0","keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","_id":"@ayaka209/assets-gen-mcp@0.1.0","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"bin":{"assets-gen-mcp":"dist/index.js"},"dist":{"shasum":"8d304fdb9e819d9335ec8fc6011e7b8f742cefb0","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.0.tgz","fileCount":63,"integrity":"sha512-+GanWDDHjfcvNEgaXYqA9Mx3u+u3DvgzFWinpj+ljs8VdlGpnh5wN+AXwRI2O02Shjr7ky1MrYOcXpT1/1IHLg==","signatures":[{"sig":"MEYCIQC7hj2IACbsXiRAveEvuOvUw7YLT2/pL8og0RvsrkS1GgIhAJ0nF/VdaIMy82QmB9KkC+7RyrksJ8iYEgJ9dAyV1ziJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151472},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"36b66944f16dba5ef7b6cc7f0544d71b62141167","scripts":{"test":"vitest run --exclude src/integration.test.ts","build":"tsc","watch":"tsc --watch","models":"npx tsx src/list-models.ts","prepare":"npm run build","test:watch":"vitest --exclude src/integration.test.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts"},"_npmUser":{"name":"weloveayaka","email":"weloveayaka@gmail.com"},"_npmVersion":"11.6.2","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","directories":{},"_nodeVersion":"24.11.1","dependencies":{"openai":"^4.77.3","@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.2.3","vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/assets-gen-mcp_0.1.0_1771605736625_0.6591211840532287","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.2","keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","_id":"@ayaka209/assets-gen-mcp@0.1.2","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"bin":{"assets-gen-mcp":"dist/index.js"},"dist":{"shasum":"2bc9aa4371457eebcfbe0419d417c9a99028e4e3","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.2.tgz","fileCount":60,"integrity":"sha512-cvvgswob8foVSS6rO4TF4ZbqSCfgawY+hj4kBebB42IGn8eYsWKIFcVM3SwD6H770WrvqbWUSdLEo/a6o4LTew==","signatures":[{"sig":"MEYCIQCMsLeRAZNny0bS2urh5NXkKUYl7NqDb1MMhOtouJBqSQIhAII7Xk+ZNBYlvHqVJLQtr5SKsK8XzW5m7qBj9YOCWoDz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ayaka209%2fassets-gen-mcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172483},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e857473263b8a325ae91da9edb9bfd3379d3d531","scripts":{"test":"vitest run --exclude src/integration.test.ts","build":"tsc","watch":"tsc --watch","models":"npx tsx src/list-models.ts","prepare":"npm run build","test:watch":"vitest --exclude src/integration.test.ts","models:openai":"npx tsx src/list-openai-models.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts","test:openai-proxy":"npx tsx src/test-openai-proxy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c2532df3-ffc1-41d3-b86e-fb2abdc3cf94"}},"repository":{"url":"git+https://github.com/ayaka209/assets-gen-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^17.2.3","openai":"^4.77.3","@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/assets-gen-mcp_0.1.2_1777100061291_0.1489763803547155","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.3","keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","_id":"@ayaka209/assets-gen-mcp@0.1.3","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"bin":{"assets-gen-mcp":"dist/index.js"},"dist":{"shasum":"8d3a8858bc71bd98811f0078f828e35e4e611b3b","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.3.tgz","fileCount":60,"integrity":"sha512-1TDGk1wMB7A+s05YeYxmmKe9W4ebcu6+SpC3HAJNpyHqUYH0JC2KBBWfhlpqcfONFXAj/DYhFLRz4WiVikpxKw==","signatures":[{"sig":"MEUCIA68mYtoYIX9zWOPfEBA0uq0oj+hVpb61QB5f8PTx6eHAiEAjtO/KfPvNYYABnOzhjFUurdb5yzfvtgWDR7X1q7ri30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ayaka209%2fassets-gen-mcp@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":189784},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"f6795ed4acfb41408ea8ef3a4c54cede3a3cb38f","scripts":{"test":"vitest run --exclude src/integration.test.ts","build":"tsc","watch":"tsc --watch","models":"npx tsx src/list-models.ts","prepare":"npm run build","test:watch":"vitest --exclude src/integration.test.ts","models:openai":"npx tsx src/list-openai-models.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts","test:openai-proxy":"npx tsx src/test-openai-proxy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c2532df3-ffc1-41d3-b86e-fb2abdc3cf94"}},"repository":{"url":"git+https://github.com/ayaka209/assets-gen-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^17.2.3","openai":"^4.77.3","@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/assets-gen-mcp_0.1.3_1777113661527_0.3741563579332656","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.4","keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","_id":"@ayaka209/assets-gen-mcp@0.1.4","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"bin":{"assets-gen-mcp":"dist/index.js"},"dist":{"shasum":"c1ca5a3e297413041f510c7aa0cfc96d6e966772","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.4.tgz","fileCount":61,"integrity":"sha512-1dxDsYkjL/N1xq3Alru4GUqCq+NzOfPP64yHTgcKL4VrB8hc1DyD/AxiENygUKj/EBjWxdFaZWVAyEaWeNjvjg==","signatures":[{"sig":"MEQCIE9u8AauYx9x6+cEzWhBEgtJa8aGV6GB4x0OnKsvDlEDAiBkjjoUu1QC1n7c5cCSynR0BWYa7x2uDBKGBClYovVSyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ayaka209%2fassets-gen-mcp@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204307},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b24c977549e70f191a135f60175c379a64417957","scripts":{"test":"vitest run --exclude src/integration.test.ts","build":"tsc","watch":"tsc --watch","models":"npx tsx src/list-models.ts","prepare":"npm run build","test:watch":"vitest --exclude src/integration.test.ts","models:openai":"npx tsx src/list-openai-models.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts","test:openai-proxy":"npx tsx src/test-openai-proxy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c2532df3-ffc1-41d3-b86e-fb2abdc3cf94"}},"repository":{"url":"git+https://github.com/ayaka209/assets-gen-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^17.2.3","openai":"^4.77.3","@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/assets-gen-mcp_0.1.4_1777539903834_0.08677033614514706","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.5","keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","_id":"@ayaka209/assets-gen-mcp@0.1.5","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"bin":{"assets-gen-mcp":"dist/index.js"},"dist":{"shasum":"917245889ff93b69afb53a72d0fcc042129a5954","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.5.tgz","fileCount":61,"integrity":"sha512-xdQqDbKlEOJzKUYVdRQwgg8+A97IKViv0Xia6shtF58valhaVNuUvKgZPrqTluvgx/NR76rFEJgl2VDxifo4PQ==","signatures":[{"sig":"MEYCIQC4eThRQeTfNqxfqqV5vH5CCRQBymSZwLwB6jbm32g4DAIhAJuTTArwi5AEeUs/RS/2yrWH/qes1XURl9C4krZDzq2k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ayaka209%2fassets-gen-mcp@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":206142},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ed5627587e85620a04b7c522f81b81f376194f0c","scripts":{"test":"vitest run --exclude src/integration.test.ts","build":"tsc","watch":"tsc --watch","models":"npx tsx src/list-models.ts","prepare":"npm run build","test:watch":"vitest --exclude src/integration.test.ts","models:openai":"npx tsx src/list-openai-models.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts","test:openai-proxy":"npx tsx src/test-openai-proxy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c2532df3-ffc1-41d3-b86e-fb2abdc3cf94"}},"repository":{"url":"git+https://github.com/ayaka209/assets-gen-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^17.2.3","openai":"^4.77.3","@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.7.2","@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/assets-gen-mcp_0.1.5_1777541394689_0.7355287092086193","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@ayaka209/assets-gen-mcp","version":"0.1.7","description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","type":"module","main":"dist/index.js","bin":{"assets-gen-mcp":"dist/index.js"},"scripts":{"build":"tsc","prepare":"npm run build","watch":"tsc --watch","models":"npx tsx src/list-models.ts","models:openai":"npx tsx src/list-openai-models.ts","test:openai-proxy":"npx tsx src/test-openai-proxy.ts","test":"vitest run --exclude src/integration.test.ts","test:watch":"vitest --exclude src/integration.test.ts","test:coverage":"vitest run --coverage --exclude src/integration.test.ts","test:integration":"vitest run src/integration.test.ts"},"keywords":["mcp","image-generation","openai","gemini","dalle"],"author":"","license":"MIT","homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"repository":{"type":"git","url":"git+https://github.com/ayaka209/assets-gen-mcp.git"},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"dependencies":{"@google/genai":"^1.42.0","@modelcontextprotocol/sdk":"^1.0.4","dotenv":"^17.2.3","openai":"^4.77.3"},"devDependencies":{"@types/node":"^22.10.2","@vitest/coverage-v8":"^4.0.18","typescript":"^5.7.2","vitest":"^4.0.18"},"engines":{"node":">=18"},"gitHead":"aff55a80a029e15a3e3e32e47308d86985345f5b","types":"./dist/index.d.ts","_id":"@ayaka209/assets-gen-mcp@0.1.7","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-jUXTSiuC398k21/Rf5+wJxW11rCocL02vBXuX/PH5HSZW3XaPMuN1m/OjOg1SCCoqID1EPLbS1Su/CcQ6uJ+3A==","shasum":"4f97d2d2478e0b6078145e8a94f6e8ae633532f5","tarball":"https://registry.npmjs.org/@ayaka209/assets-gen-mcp/-/assets-gen-mcp-0.1.7.tgz","fileCount":61,"unpackedSize":207978,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ayaka209%2fassets-gen-mcp@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD2h33st/3hTsQo2ilMGzV0s81FR5MGJkk0BdkJlWuXpgIhAIrAdcune7C4ZQxb/olcBNMRDi5spS6P73NIrm7bYs9D"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c2532df3-ffc1-41d3-b86e-fb2abdc3cf94"}},"directories":{},"maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/assets-gen-mcp_0.1.7_1778219404689_0.3917464518562199"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-20T16:42:16.508Z","modified":"2026-05-08T05:50:05.137Z","0.1.0":"2026-02-20T16:42:16.804Z","0.1.2":"2026-04-25T06:54:21.441Z","0.1.3":"2026-04-25T10:41:01.681Z","0.1.4":"2026-04-30T09:05:04.002Z","0.1.5":"2026-04-30T09:29:54.840Z","0.1.7":"2026-05-08T05:50:04.830Z"},"bugs":{"url":"https://github.com/ayaka209/assets-gen-mcp/issues"},"license":"MIT","homepage":"https://github.com/ayaka209/assets-gen-mcp#readme","keywords":["mcp","image-generation","openai","gemini","dalle"],"repository":{"type":"git","url":"git+https://github.com/ayaka209/assets-gen-mcp.git"},"description":"MCP server for image generation, supports OpenAI DALL-E and Google Gemini","maintainers":[{"name":"weloveayaka","email":"weloveayaka@gmail.com"}],"readme":"# Assets Generation MCP Server\n\n[English](README.md) | [简体中文](README.zh-CN.md)\n\nAI 图片生成 MCP 服务器，支持 OpenAI 兼容模型和 Google Gemini 双 provider，返回标准 MCP `ImageContent`。\n\n## 特性\n\n- 根据模型名自动选择 provider（OpenAI / Gemini）\n- 同时配置 OpenAI + Gemini 时，**按模型名选择 provider**；未指定模型时使用 `DEFAULT_MODEL`\n- 图片以 MCP 标准 `ImageContent` 格式返回（`{ type: \"image\", data, mimeType }`），AI 客户端可直接使用\n- 支持三种 transport：stdio（默认）、SSE、HTTP\n- 支持自定义 API 代理地址（`OPENAI_BASE_URL` / `GEMINI_BASE_URL`）\n- 支持 `.env` 自动加载，也支持通过 CLI 参数传配置（适合不支持 `env` 的 MCP 客户端）\n- 未配置 API Key 的 provider 自动禁用，不影响另一个 provider 使用\n\n## 快速开始\n\n```bash\nnpm install\nnpm run build\ncp .env.example .env  # 填入 API Key\n```\n\n## 环境变量\n\n| 变量 | 必填 | 默认值 | 说明 |\n|------|------|--------|------|\n| `GEMINI_API_KEY` | 至少一个 | - | Google Gemini API Key |\n| `OPENAI_API_KEY` | 至少一个 | - | OpenAI API Key |\n| `DEFAULT_MODEL` | 否 | `gemini-2.5-flash-image` | 默认模型，工具调用时可覆盖 |\n| `GEMINI_BASE_URL` | 否 | - | Gemini API 代理地址 |\n| `OPENAI_BASE_URL` | 否 | - | OpenAI API 代理地址 |\n| `OPENAI_IMAGE_MODEL` | 否 | `gpt-image-2` | 集成测试时使用的 OpenAI 图片模型 |\n| `MCP_TRANSPORT` | 否 | `stdio` | 传输模式：`stdio` / `sse` / `http` |\n| `MCP_STDIO_LOGS` | 否 | `false` | 在 stdio 模式下启用启动/运行日志（调试时设为 `true`） |\n| `MCP_HOST` | 否 | `localhost` | SSE/HTTP 监听地址 |\n| `MCP_PORT` | 否 | `3000` | SSE/HTTP 监听端口 |\n\n> 至少配置 `GEMINI_API_KEY` 或 `OPENAI_API_KEY` 其中一个，未配置的 provider 会自动禁用。\n>\n> `.env` 中如果还是示例占位值（如 `your-gemini-api-key`），现在会被自动忽略，不会误判为已启用。\n>\n> 配置优先级：**CLI 参数 > 进程环境变量 > 当前工作目录 `.env` > 内置默认值**。\n\n## 工具：`generate_image`\n\n| 参数 | 必填 | 默认值 | 说明 |\n|------|------|--------|------|\n| `prompt` | 是 | - | 详细的图片描述 |\n| `model` | 否 | `DEFAULT_MODEL` | 模型名，见下方支持模型列表 |\n| `size` | 否 | `auto` / `1024x1024` | 图片尺寸（仅 OpenAI-compatible 模型有效） |\n| `quality` | 否 | `standard` | gpt-image-* 支持 `high`/`medium`/`low`/`standard`；dall-e-3 支持 `hd`/`standard` |\n| `n` | 否 | `1` | 生成数量（gpt-image-*: 1–10；dall-e-3: 1；Gemini: 1） |\n| `aspect_ratio` | 否 | `1:1` | 宽高比，仅 Gemini 有效：`1:1` `3:4` `4:3` `9:16` `16:9` |\n| `response_format` | 否 | `auto` | `url` / `base64` / `auto` — 详见下方 [响应格式](#响应格式) |\n| `timeout` | 否 | `120` | 最长等待时间（**秒**）。代理慢或使用高质量模型时可适当增大 |\n\n支持的模型：\n\n- **OpenAI / OpenAI-compatible**: `gpt-image-2`, `gpt-image-1`, `dall-e-3`, `dall-e-2`, `doubao-*`, `volcengine/doubao-*`\n- **Gemini**: `gemini-2.5-flash-image`, `gemini-2.0-flash-exp`, `imagen-3.0-generate-001`\n\n### 响应格式\n\n`response_format` 控制在 base64 `ImageContent` 之外是否返回图片 URL 或本地文件路径：\n\n| 值 | 行为 |\n|-------|----------|\n| `auto`（默认） | **一定返回本地文件路径** 的响应文本（`Saved to: /tmp/abc123.png`），同时附带 base64 `ImageContent`。图片以随机文件名保存到 `os.tmpdir()`。这是最兼容的模式，无论 provider 默认返回什么格式，都能保证图片始终可访问。 |\n| `base64` | 仅返回 `ImageContent`（OpenAI 强制 `b64_json`）。 |\n| `url` | **一定返回文件路径或 URL**：<br>• 如果 API 返回了 `url` → 响应文本包含 `Image URL: https://...` <br>• 如果 API 只返回 base64 → 图片以随机文件名保存到 `os.tmpdir()` → 响应文本包含 `Saved to: /tmp/abc123.png` |\n\n> **安全性**：保存到临时目录的文件使用 `crypto.randomBytes(16)` 生成随机文件名，配合 `wx`（独占创建）和 `0o600`（仅所有者可读写）标志，无路径遍历风险，无文件名冲突。\n\n### 使用方式\n\n### Claude Desktop / Kiro（stdio 模式）\n\n```json\n{\n  \"mcpServers\": {\n    \"assets-gen\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/assets-gen-mcp/dist/index.js\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your-key\",\n        \"GEMINI_BASE_URL\": \"https://your-proxy.com\"\n      }\n    }\n  }\n}\n```\n\n也可以不用 `env`，直接走 `args`：\n\n```json\n{\n  \"mcpServers\": {\n    \"assets-gen\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ayaka209/assets-gen-mcp\",\n        \"--openai-api-key\",\n        \"your-key\",\n        \"--openai-base-url\",\n        \"https://your-proxy.com/gptapi\",\n        \"--default-model\",\n        \"gpt-image-2\"\n      ]\n    }\n  }\n}\n```\n\nmacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`  \nWindows: `%APPDATA%\\\\Claude\\\\claude_desktop_config.json`\n\n### MCP SDK Client（编程接入）\n\n```typescript\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\n\nconst transport = new StdioClientTransport({\n  command: \"node\",\n  args: [\"dist/index.js\"],\n  env: { GEMINI_API_KEY: \"your-key\" },\n});\nconst client = new Client({ name: \"my-app\", version: \"1.0.0\" }, { capabilities: {} });\nawait client.connect(transport);\n\nconst result = await client.callTool({\n  name: \"generate_image\",\n  arguments: { prompt: \"A cat in space\" },\n});\n// result.content → [{ type: \"image\", data: \"<base64>\", mimeType: \"image/png\" }]\n```\n\n### Provider 选择规则\n\n1. 工具调用里**显式传了 `model`**：按 `model` 前缀选 provider\n2. 工具调用里**没传 `model`**：使用 `DEFAULT_MODEL`\n3. `gpt-image-*` / `dall-e-*` / `doubao-*` / `volcengine/doubao-*` → OpenAI-compatible；`gemini-*` / `imagen-*` → Gemini\n4. 你的当前 `.env` 如果保持 `DEFAULT_MODEL=gpt-image-2`，那么**默认会走 OpenAI**\n\n### SSE / HTTP 模式\n\n```bash\nMCP_TRANSPORT=sse MCP_PORT=3000 node dist/index.js\n```\n\n端点：\n\n- `GET /sse` — SSE 连接\n- `POST /message?sessionId=xxx` — 发送消息\n- `GET /` — 健康检查\n\n### OpenAI 兼容代理联调\n\n```bash\nOPENAI_API_KEY=your-key\nOPENAI_BASE_URL=https://your-openai-compatible-endpoint\nOPENAI_IMAGE_MODEL=gpt-image-2\nnpm run test:integration\n```\n\n如果你只想做一次快速真实联调，可以直接跑：\n\n```bash\nOPENAI_API_KEY=your-key\nOPENAI_BASE_URL=https://your-openai-compatible-endpoint\nOPENAI_IMAGE_MODEL=gpt-image-2\nnpm run test:openai-proxy\n```\n\n这个脚本会依次验证：\n\n1. 直连 `OPENAI_BASE_URL` 的 `images.generate`\n2. 启动本仓库 MCP 服务后，通过 `generate_image` 走一遍 stdio 链路\n\n如果只想检查代理实际暴露了哪些 OpenAI 模型：\n\n```bash\nOPENAI_API_KEY=your-key\nOPENAI_BASE_URL=https://your-openai-compatible-endpoint\nnpm run models:openai\n```\n\n如果 MCP 客户端不支持传 `env`，可以直接这样启动：\n\n```bash\nnpx -y @ayaka209/assets-gen-mcp --openai-api-key sk-... --openai-base-url https://your-openai-compatible-endpoint --default-model gpt-image-2\n```\n\n查看所有 CLI 参数：\n\n```bash\nnpx -y @ayaka209/assets-gen-mcp --help\n```\n\n## 开发\n\n```bash\nnpm run build             # 编译\nnpm run watch             # 监听编译\nnpm test                  # 单元测试\nnpm run test:integration  # 集成测试（需要 API Key）\nnpm run test:openai-proxy # 一键测试 OpenAI 兼容代理\nnpm run models:openai     # 列出代理可见的 OpenAI 模型\nnpm run models            # 列出可用 Gemini 模型\n```\n\n## 技术栈\n\n- [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — MCP 服务端/客户端 SDK\n- [`@google/genai`](https://www.npmjs.com/package/@google/genai) — Google Gemini SDK\n- [`openai`](https://www.npmjs.com/package/openai) — OpenAI SDK\n\n## License\n\nMIT\n","readmeFilename":"README.zh-CN.md"}