| /** | ||
| * `meigen init <platform>` — one-command MCP server setup for any AI coding tool | ||
| * | ||
| * Writes the correct MCP config file with the right format and path for each platform. | ||
| * Merges into existing config if one already exists. | ||
| */ | ||
| export declare function init(args: string[]): void; | ||
| //# sourceMappingURL=init.d.ts.map |
| {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8DH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAuEzC"} |
+156
| "use strict"; | ||
| /** | ||
| * `meigen init <platform>` — one-command MCP server setup for any AI coding tool | ||
| * | ||
| * Writes the correct MCP config file with the right format and path for each platform. | ||
| * Merges into existing config if one already exists. | ||
| */ | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || (function () { | ||
| var ownKeys = function(o) { | ||
| ownKeys = Object.getOwnPropertyNames || function (o) { | ||
| var ar = []; | ||
| for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; | ||
| return ar; | ||
| }; | ||
| return ownKeys(o); | ||
| }; | ||
| return function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| })(); | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.init = init; | ||
| const fs = __importStar(require("node:fs")); | ||
| const path = __importStar(require("node:path")); | ||
| const os = __importStar(require("node:os")); | ||
| const PLATFORMS = { | ||
| cursor: { | ||
| name: 'Cursor', | ||
| configPath: '.cursor/mcp.json', | ||
| wrapperKey: 'mcpServers', | ||
| needsType: false, | ||
| }, | ||
| vscode: { | ||
| name: 'VS Code / GitHub Copilot', | ||
| configPath: '.vscode/mcp.json', | ||
| wrapperKey: 'servers', | ||
| needsType: true, | ||
| }, | ||
| windsurf: { | ||
| name: 'Windsurf', | ||
| configPath: path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json'), | ||
| wrapperKey: 'mcpServers', | ||
| needsType: false, | ||
| global: true, | ||
| }, | ||
| roo: { | ||
| name: 'Roo Code', | ||
| configPath: '.roo/mcp.json', | ||
| wrapperKey: 'mcpServers', | ||
| needsType: false, | ||
| }, | ||
| claude: { | ||
| name: 'Claude Code', | ||
| configPath: '.mcp.json', | ||
| wrapperKey: 'mcpServers', | ||
| needsType: false, | ||
| }, | ||
| }; | ||
| function printUsage() { | ||
| console.log('Usage: meigen init <platform>'); | ||
| console.log(); | ||
| console.log('Supported platforms:'); | ||
| for (const [key, config] of Object.entries(PLATFORMS)) { | ||
| console.log(` ${key.padEnd(10)} ${config.name}`); | ||
| } | ||
| console.log(); | ||
| console.log('Examples:'); | ||
| console.log(' npx meigen init cursor'); | ||
| console.log(' npx meigen init vscode'); | ||
| console.log(' npx -y meigen@latest init windsurf'); | ||
| } | ||
| function init(args) { | ||
| const platformKey = args[0]?.toLowerCase(); | ||
| if (!platformKey || platformKey === '--help' || platformKey === '-h') { | ||
| printUsage(); | ||
| return; | ||
| } | ||
| const platform = PLATFORMS[platformKey]; | ||
| if (!platform) { | ||
| console.error(`Unknown platform: "${platformKey}"`); | ||
| console.log(); | ||
| printUsage(); | ||
| process.exit(1); | ||
| } | ||
| const configPath = platform.global | ||
| ? platform.configPath | ||
| : path.resolve(process.cwd(), platform.configPath); | ||
| // Ensure parent directory exists | ||
| const configDir = path.dirname(configPath); | ||
| if (!fs.existsSync(configDir)) { | ||
| fs.mkdirSync(configDir, { recursive: true }); | ||
| } | ||
| // Build server entry | ||
| const serverEntry = { | ||
| command: 'npx', | ||
| args: ['-y', 'meigen@latest'], | ||
| }; | ||
| if (platform.needsType) { | ||
| serverEntry.type = 'stdio'; | ||
| } | ||
| // Read existing config or start fresh | ||
| let config = {}; | ||
| if (fs.existsSync(configPath)) { | ||
| try { | ||
| const raw = fs.readFileSync(configPath, 'utf-8'); | ||
| config = JSON.parse(raw); | ||
| } | ||
| catch { | ||
| // Invalid JSON — start fresh | ||
| config = {}; | ||
| } | ||
| } | ||
| // Merge our server entry | ||
| const wrapper = config[platform.wrapperKey] ?? {}; | ||
| wrapper.meigen = serverEntry; | ||
| config[platform.wrapperKey] = wrapper; | ||
| // Write | ||
| fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n'); | ||
| // Output | ||
| const isNew = !fs.existsSync(configPath) || Object.keys(wrapper).length === 1; | ||
| console.log(); | ||
| console.log(` MeiGen MCP server added to ${platform.name}`); | ||
| console.log(` Config: ${configPath}`); | ||
| console.log(); | ||
| console.log('Next steps:'); | ||
| console.log(' 1. Restart your AI tool to load the new MCP server'); | ||
| console.log(' 2. Start chatting — free features work out of the box:'); | ||
| console.log(' search_gallery, enhance_prompt, get_inspiration'); | ||
| console.log(); | ||
| console.log(' For image generation, set your API token:'); | ||
| console.log(' Get one at https://www.meigen.ai (Settings > API Keys)'); | ||
| console.log(); | ||
| console.log(` Then add to your config's env field, or set in shell:`); | ||
| console.log(' export MEIGEN_API_TOKEN=meigen_sk_...'); | ||
| } | ||
| //# sourceMappingURL=init.js.map |
| {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * User preferences persistence | ||
| * Storage: ~/.config/meigen/preferences.json | ||
| * | ||
| * Completely independent from config.ts (which handles provider credentials). | ||
| * All functions are safe — read errors return defaults, write errors are silently ignored. | ||
| */ | ||
| export interface UserPreferences { | ||
| version: number; | ||
| defaults: { | ||
| style?: string; | ||
| aspectRatio?: string; | ||
| model?: string; | ||
| provider?: string; | ||
| }; | ||
| styleNotes: string; | ||
| favorites: FavoriteEntry[]; | ||
| recentSuccessful: RecentEntry[]; | ||
| } | ||
| export interface FavoriteEntry { | ||
| prompt: string; | ||
| model?: string; | ||
| aspectRatio?: string; | ||
| savedAt: string; | ||
| } | ||
| export interface RecentEntry { | ||
| prompt: string; | ||
| provider: string; | ||
| model?: string; | ||
| aspectRatio?: string; | ||
| generatedAt: string; | ||
| } | ||
| export declare function loadPreferences(): UserPreferences; | ||
| export declare function savePreferences(prefs: UserPreferences): void; | ||
| export declare function updateDefaults(updates: Partial<UserPreferences['defaults']>, styleNotes?: string): UserPreferences; | ||
| export declare function addFavorite(entry: Omit<FavoriteEntry, 'savedAt'>): UserPreferences; | ||
| export declare function removeFavorite(index: number): UserPreferences; | ||
| export declare function addRecentGeneration(entry: { | ||
| prompt: string; | ||
| provider: string; | ||
| model?: string; | ||
| aspectRatio?: string; | ||
| }): void; | ||
| //# sourceMappingURL=preferences.d.ts.map |
| {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/lib/preferences.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,gBAAgB,EAAE,WAAW,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB;AAuBD,wBAAgB,eAAe,IAAI,eAAe,CAajD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAI5D;AAID,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,eAAe,CAYjB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,eAAe,CAWlF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAO7D;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,IAAI,CAcP"} |
| "use strict"; | ||
| /** | ||
| * User preferences persistence | ||
| * Storage: ~/.config/meigen/preferences.json | ||
| * | ||
| * Completely independent from config.ts (which handles provider credentials). | ||
| * All functions are safe — read errors return defaults, write errors are silently ignored. | ||
| */ | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.loadPreferences = loadPreferences; | ||
| exports.savePreferences = savePreferences; | ||
| exports.updateDefaults = updateDefaults; | ||
| exports.addFavorite = addFavorite; | ||
| exports.removeFavorite = removeFavorite; | ||
| exports.addRecentGeneration = addRecentGeneration; | ||
| const fs_1 = require("fs"); | ||
| const path_1 = require("path"); | ||
| const os_1 = require("os"); | ||
| // ── Constants ────────────────────────────────────────────────── | ||
| const MAX_FAVORITES = 20; | ||
| const MAX_RECENT = 10; | ||
| function prefsPath() { | ||
| return (0, path_1.join)((0, os_1.homedir)(), '.config', 'meigen', 'preferences.json'); | ||
| } | ||
| function emptyPreferences() { | ||
| return { | ||
| version: 1, | ||
| defaults: {}, | ||
| styleNotes: '', | ||
| favorites: [], | ||
| recentSuccessful: [], | ||
| }; | ||
| } | ||
| // ── Read / Write ─────────────────────────────────────────────── | ||
| function loadPreferences() { | ||
| try { | ||
| const raw = (0, fs_1.readFileSync)(prefsPath(), 'utf-8'); | ||
| const parsed = JSON.parse(raw); | ||
| // Merge with defaults to ensure all fields exist | ||
| return { | ||
| ...emptyPreferences(), | ||
| ...parsed, | ||
| defaults: { ...emptyPreferences().defaults, ...parsed.defaults }, | ||
| }; | ||
| } | ||
| catch { | ||
| return emptyPreferences(); | ||
| } | ||
| } | ||
| function savePreferences(prefs) { | ||
| const filePath = prefsPath(); | ||
| (0, fs_1.mkdirSync)((0, path_1.join)((0, os_1.homedir)(), '.config', 'meigen'), { recursive: true }); | ||
| (0, fs_1.writeFileSync)(filePath, JSON.stringify(prefs, null, 2) + '\n'); | ||
| } | ||
| // ── Mutations (used by the tool) ─────────────────────────────── | ||
| function updateDefaults(updates, styleNotes) { | ||
| const prefs = loadPreferences(); | ||
| for (const [key, value] of Object.entries(updates)) { | ||
| if (value !== undefined) { | ||
| prefs.defaults[key] = value || undefined; | ||
| } | ||
| } | ||
| if (styleNotes !== undefined) { | ||
| prefs.styleNotes = styleNotes; | ||
| } | ||
| savePreferences(prefs); | ||
| return prefs; | ||
| } | ||
| function addFavorite(entry) { | ||
| const prefs = loadPreferences(); | ||
| prefs.favorites.unshift({ | ||
| ...entry, | ||
| savedAt: new Date().toISOString(), | ||
| }); | ||
| if (prefs.favorites.length > MAX_FAVORITES) { | ||
| prefs.favorites = prefs.favorites.slice(0, MAX_FAVORITES); | ||
| } | ||
| savePreferences(prefs); | ||
| return prefs; | ||
| } | ||
| function removeFavorite(index) { | ||
| const prefs = loadPreferences(); | ||
| if (index >= 0 && index < prefs.favorites.length) { | ||
| prefs.favorites.splice(index, 1); | ||
| } | ||
| savePreferences(prefs); | ||
| return prefs; | ||
| } | ||
| // ── Auto-save (fire-and-forget, called from generate-image.ts) ─ | ||
| function addRecentGeneration(entry) { | ||
| try { | ||
| const prefs = loadPreferences(); | ||
| prefs.recentSuccessful.unshift({ | ||
| ...entry, | ||
| generatedAt: new Date().toISOString(), | ||
| }); | ||
| if (prefs.recentSuccessful.length > MAX_RECENT) { | ||
| prefs.recentSuccessful = prefs.recentSuccessful.slice(0, MAX_RECENT); | ||
| } | ||
| savePreferences(prefs); | ||
| } | ||
| catch { | ||
| // Never fail — this is a background enhancement | ||
| } | ||
| } | ||
| //# sourceMappingURL=preferences.js.map |
| {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../src/lib/preferences.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * manage_preferences Tool — read/write user preferences | ||
| * | ||
| * Single tool with action parameter to keep context footprint small (~600 tokens). | ||
| * Storage: ~/.config/meigen/preferences.json (separate from provider config). | ||
| */ | ||
| import { z } from 'zod'; | ||
| import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; | ||
| export declare const managePreferencesSchema: { | ||
| action: z.ZodEnum<["get", "set", "add_favorite", "remove_favorite"]>; | ||
| style: z.ZodOptional<z.ZodString>; | ||
| aspectRatio: z.ZodOptional<z.ZodString>; | ||
| model: z.ZodOptional<z.ZodString>; | ||
| provider: z.ZodOptional<z.ZodEnum<["openai", "meigen", "comfyui"]>>; | ||
| styleNotes: z.ZodOptional<z.ZodString>; | ||
| prompt: z.ZodOptional<z.ZodString>; | ||
| index: z.ZodOptional<z.ZodNumber>; | ||
| }; | ||
| export declare function registerManagePreferences(server: McpServer): void; | ||
| //# sourceMappingURL=manage-preferences.d.ts.map |
| {"version":3,"file":"manage-preferences.d.ts","sourceRoot":"","sources":["../../src/tools/manage-preferences.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAQxE,eAAO,MAAM,uBAAuB;;;;;;;;;CAuBnC,CAAA;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA2E1D"} |
| "use strict"; | ||
| /** | ||
| * manage_preferences Tool — read/write user preferences | ||
| * | ||
| * Single tool with action parameter to keep context footprint small (~600 tokens). | ||
| * Storage: ~/.config/meigen/preferences.json (separate from provider config). | ||
| */ | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.managePreferencesSchema = void 0; | ||
| exports.registerManagePreferences = registerManagePreferences; | ||
| const zod_1 = require("zod"); | ||
| const preferences_js_1 = require("../lib/preferences.js"); | ||
| exports.managePreferencesSchema = { | ||
| action: zod_1.z.enum(['get', 'set', 'add_favorite', 'remove_favorite']) | ||
| .describe('Action to perform: "get" reads all preferences, "set" updates defaults/styleNotes, "add_favorite" saves a prompt, "remove_favorite" removes by index'), | ||
| // For 'set' action | ||
| style: zod_1.z.string().optional() | ||
| .describe('set: preferred default style (e.g. "realistic", "anime", "illustration")'), | ||
| aspectRatio: zod_1.z.string().optional() | ||
| .describe('set: preferred default aspect ratio (e.g. "16:9", "1:1")'), | ||
| model: zod_1.z.string().optional() | ||
| .describe('set: preferred default model name'), | ||
| provider: zod_1.z.enum(['openai', 'meigen', 'comfyui']).optional() | ||
| .describe('set: preferred default provider'), | ||
| styleNotes: zod_1.z.string().optional() | ||
| .describe('set: free-text style notes (e.g. "cinematic lighting, shallow DOF, brand colors #1A1A2E")'), | ||
| // For 'add_favorite' action | ||
| prompt: zod_1.z.string().optional() | ||
| .describe('add_favorite: the prompt text to save'), | ||
| // For 'remove_favorite' action | ||
| index: zod_1.z.number().optional() | ||
| .describe('remove_favorite: 0-based index of the favorite to remove'), | ||
| }; | ||
| function registerManagePreferences(server) { | ||
| server.tool('manage_preferences', 'Read or update user preferences: default style, aspect ratio, model, style notes, and favorite prompts. Call with action "get" at conversation start to load preferences.', exports.managePreferencesSchema, { readOnlyHint: false }, async ({ action, style, aspectRatio, model, provider, styleNotes, prompt, index }) => { | ||
| switch (action) { | ||
| case 'get': { | ||
| const prefs = (0, preferences_js_1.loadPreferences)(); | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: JSON.stringify(prefs, null, 2), | ||
| }], | ||
| }; | ||
| } | ||
| case 'set': { | ||
| const updates = {}; | ||
| if (style !== undefined) | ||
| updates.style = style; | ||
| if (aspectRatio !== undefined) | ||
| updates.aspectRatio = aspectRatio; | ||
| if (model !== undefined) | ||
| updates.model = model; | ||
| if (provider !== undefined) | ||
| updates.provider = provider; | ||
| const prefs = (0, preferences_js_1.updateDefaults)(updates, styleNotes); | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: `Preferences updated.\n${JSON.stringify(prefs.defaults, null, 2)}` + | ||
| (styleNotes !== undefined ? `\nStyle notes: ${prefs.styleNotes}` : ''), | ||
| }], | ||
| }; | ||
| } | ||
| case 'add_favorite': { | ||
| if (!prompt) { | ||
| return { | ||
| content: [{ type: 'text', text: 'Missing "prompt" parameter for add_favorite action.' }], | ||
| isError: true, | ||
| }; | ||
| } | ||
| const prefs = (0, preferences_js_1.addFavorite)({ prompt, model, aspectRatio }); | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: `Saved to favorites (${prefs.favorites.length} total).`, | ||
| }], | ||
| }; | ||
| } | ||
| case 'remove_favorite': { | ||
| if (index === undefined || index === null) { | ||
| return { | ||
| content: [{ type: 'text', text: 'Missing "index" parameter for remove_favorite action.' }], | ||
| isError: true, | ||
| }; | ||
| } | ||
| const prefs = (0, preferences_js_1.removeFavorite)(index); | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: `Favorite removed (${prefs.favorites.length} remaining).`, | ||
| }], | ||
| }; | ||
| } | ||
| default: | ||
| return { | ||
| content: [{ type: 'text', text: `Unknown action: ${action}` }], | ||
| isError: true, | ||
| }; | ||
| } | ||
| }); | ||
| } | ||
| //# sourceMappingURL=manage-preferences.js.map |
| {"version":3,"file":"manage-preferences.js","sourceRoot":"","sources":["../../src/tools/manage-preferences.ts"],"names":[],"mappings":"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"} |
| #!/usr/bin/env node | ||
| require('../dist/index.js'); | ||
| const args = process.argv.slice(2); | ||
| if (args[0] === 'init') { | ||
| require('../dist/cli/init.js').init(args.slice(1)); | ||
| } else { | ||
| require('../dist/index.js'); | ||
| } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AA2KnE,wBAAgB,YAAY,cAyB3B"} | ||
| {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AA4LnE,wBAAgB,YAAY,cA0B3B"} |
+20
-2
@@ -18,3 +18,4 @@ "use strict"; | ||
| const upload_reference_image_js_1 = require("./tools/upload-reference-image.js"); | ||
| const SERVER_INSTRUCTIONS = `You are an AI image creation assistant powered by MeiGen-Art. | ||
| const manage_preferences_js_1 = require("./tools/manage-preferences.js"); | ||
| const SERVER_INSTRUCTIONS = `You are an AI image creation assistant powered by MeiGen MCP. | ||
@@ -31,2 +32,18 @@ ## Phase 0: Provider Check | ||
| ## Phase 0.5: Load User Preferences | ||
| At the START of a conversation involving image creation, call manage_preferences(action="get") | ||
| ONCE to load saved preferences. Then apply them as defaults throughout the conversation: | ||
| - If user doesn't specify style → use their preferred style from defaults | ||
| - If user doesn't specify aspect ratio → use their preferred aspectRatio | ||
| - Incorporate styleNotes into prompt enhancement (Phase 1B) | ||
| - When presenting results, briefly note if you applied their preferences | ||
| Do NOT call manage_preferences("get") repeatedly — read once, use throughout. | ||
| When a user says something like "always use this style" or "remember this preference", | ||
| call manage_preferences(action="set") to save it. | ||
| When a user particularly likes a prompt, offer to save it with manage_preferences(action="add_favorite"). | ||
| ## Phase 1: Intent Assessment | ||
@@ -182,3 +199,3 @@ | ||
| const apiClient = new meigen_api_js_1.MeiGenApiClient(config); | ||
| const server = new mcp_js_1.McpServer({ name: 'meigen', version: '0.1.0' }, { instructions: SERVER_INSTRUCTIONS }); | ||
| const server = new mcp_js_1.McpServer({ name: 'meigen', version: '1.2.0' }, { instructions: SERVER_INSTRUCTIONS }); | ||
| // Free features (no configuration required) | ||
@@ -189,2 +206,3 @@ (0, enhance_prompt_js_1.registerEnhancePrompt)(server); | ||
| (0, get_inspiration_js_1.registerGetInspiration)(server, apiClient); | ||
| (0, manage_preferences_js_1.registerManagePreferences)(server); | ||
| // Reference image upload (compress + upload to R2) | ||
@@ -191,0 +209,0 @@ (0, upload_reference_image_js_1.registerUploadReferenceImage)(server, config); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA6KH,oCAyBC;AApMD,oEAAmE;AACnE,2CAAwC;AACxC,uDAAqD;AACrD,iEAAiE;AACjE,iEAAiE;AACjE,2DAA2D;AAC3D,mEAAmE;AACnE,iEAAiE;AACjE,qEAAqE;AACrE,iFAAgF;AAEhF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wEA8J4C,CAAA;AAExE,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,+BAAe,CAAC,MAAM,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,IAAI,kBAAS,CAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EACpC,EAAE,YAAY,EAAE,mBAAmB,EAAE,CACtC,CAAA;IAED,4CAA4C;IAC5C,IAAA,yCAAqB,EAAC,MAAM,CAAC,CAAA;IAC7B,IAAA,yCAAqB,EAAC,MAAM,CAAC,CAAA;IAC7B,IAAA,mCAAkB,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC7C,IAAA,2CAAsB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEzC,mDAAmD;IACnD,IAAA,wDAA4B,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE5C,8BAA8B;IAC9B,IAAA,6CAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC,yEAAyE;IACzE,IAAA,yCAAqB,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAA;AACf,CAAC"} | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA8LH,oCA0BC;AAtND,oEAAmE;AACnE,2CAAwC;AACxC,uDAAqD;AACrD,iEAAiE;AACjE,iEAAiE;AACjE,2DAA2D;AAC3D,mEAAmE;AACnE,iEAAiE;AACjE,qEAAqE;AACrE,iFAAgF;AAChF,yEAAyE;AAEzE,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wEA8K4C,CAAA;AAExE,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,+BAAe,CAAC,MAAM,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,IAAI,kBAAS,CAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EACpC,EAAE,YAAY,EAAE,mBAAmB,EAAE,CACtC,CAAA;IAED,4CAA4C;IAC5C,IAAA,yCAAqB,EAAC,MAAM,CAAC,CAAA;IAC7B,IAAA,yCAAqB,EAAC,MAAM,CAAC,CAAA;IAC7B,IAAA,mCAAkB,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC7C,IAAA,2CAAsB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzC,IAAA,iDAAyB,EAAC,MAAM,CAAC,CAAA;IAEjC,mDAAmD;IACnD,IAAA,wDAA4B,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE5C,8BAA8B;IAC9B,IAAA,6CAAuB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC,yEAAyE;IACzE,IAAA,yCAAqB,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAA;AACf,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"generate-image.d.ts","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,cAAc,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA0C3D,eAAO,MAAM,mBAAmB;;;;;;;;;;CAkB/B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,QAiFxG"} | ||
| {"version":3,"file":"generate-image.d.ts","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,cAAc,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA2C3D,eAAO,MAAM,mBAAmB;;;;;;;;;;CAkB/B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,QAiFxG"} |
@@ -20,2 +20,3 @@ "use strict"; | ||
| const semaphore_js_1 = require("../lib/semaphore.js"); | ||
| const preferences_js_1 = require("../lib/preferences.js"); | ||
| // Concurrency control: ComfyUI serial (local GPU), API max 4 parallel | ||
@@ -73,3 +74,3 @@ const apiSemaphore = new semaphore_js_1.Semaphore(4); | ||
| function registerGenerateImage(server, apiClient, config) { | ||
| server.tool('generate_image', 'Generate an image using AI. Supports MeiGen platform, local ComfyUI, or OpenAI-compatible APIs. Tip: get prompts from get_inspiration() or enhance_prompt(), and use gallery image URLs as referenceImages for style guidance.', exports.generateImageSchema, { readOnlyHint: false }, async ({ prompt, model, size, aspectRatio, quality, referenceImages, provider: requestedProvider, workflow, negativePrompt }, extra) => { | ||
| server.tool('generate_image', 'Generate an image using AI. Supports MeiGen platform, local ComfyUI, or OpenAI-compatible APIs. Tip: get prompts from get_inspiration() or enhance_prompt(), and use gallery image URLs as referenceImages for style guidance.', exports.generateImageSchema, { readOnlyHint: false, destructiveHint: true }, async ({ prompt, model, size, aspectRatio, quality, referenceImages, provider: requestedProvider, workflow, negativePrompt }, extra) => { | ||
| const availableProviders = (0, config_js_1.getAvailableProviders)(config); | ||
@@ -158,2 +159,3 @@ if (availableProviders.length === 0) { | ||
| const savedPath = saveImageLocally(result.imageBase64, result.mimeType); | ||
| (0, preferences_js_1.addRecentGeneration)({ prompt, provider: 'openai', model: model || config.openaiModel }); | ||
| const lines = [`Image generated successfully.`]; | ||
@@ -201,2 +203,3 @@ lines.push(`- Provider: OpenAI (${model || config.openaiModel})`); | ||
| const savedPath = saveImageLocally(base64, mimeType); | ||
| (0, preferences_js_1.addRecentGeneration)({ prompt, provider: 'meigen', model: model || 'default', aspectRatio }); | ||
| const lines = [`Image generated successfully.`]; | ||
@@ -233,2 +236,3 @@ lines.push(`- Provider: MeiGen (model: ${model || 'default'})`); | ||
| const savedPath = saveImageLocally(result.imageBase64, result.mimeType); | ||
| (0, preferences_js_1.addRecentGeneration)({ prompt, provider: 'comfyui', model: workflowName }); | ||
| const lines = [`Image generated successfully.`]; | ||
@@ -235,0 +239,0 @@ lines.push(`- Provider: ComfyUI (workflow: ${workflowName})`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"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"} |
@@ -18,3 +18,3 @@ "use strict"; | ||
| function registerUploadReferenceImage(server, config) { | ||
| server.tool('upload_reference_image', 'Upload a local image for use as a reference in generate_image. Compresses large images (max 2MB, max 2048px) and returns a public URL. Call this when the user wants to use a local file as a reference image.', exports.uploadReferenceImageSchema, { readOnlyHint: false }, async ({ filePath }) => { | ||
| server.tool('upload_reference_image', 'Upload a local image for use as a reference in generate_image. Compresses large images (max 2MB, max 2048px) and returns a public URL. Call this when the user wants to use a local file as a reference image.', exports.uploadReferenceImageSchema, { readOnlyHint: false, destructiveHint: true }, async ({ filePath }) => { | ||
| // Validate file exists | ||
@@ -21,0 +21,0 @@ if (!(0, fs_1.existsSync)(filePath)) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"upload-reference-image.js","sourceRoot":"","sources":["../../src/tools/upload-reference-image.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAaH,oEAoDC;AA/DD,6BAAuB;AACvB,2BAA+B;AAG/B,gDAAwD;AAE3C,QAAA,0BAA0B,GAAG;IACxC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;SACjB,QAAQ,CAAC,kLAAkL,CAAC;CAChM,CAAA;AAED,SAAgB,4BAA4B,CAAC,MAAiB,EAAE,MAAoB;IAClF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,gNAAgN,EAChN,kCAA0B,EAC1B,EAAE,YAAY,EAAE,KAAK,EAAE,EACvB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,uBAAuB;QACvB,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,mBAAmB,QAAQ,EAAE;qBACpC,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAqB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAE5D,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,cAAc,CAAA;YAChE,MAAM,QAAQ,GAAG,UAAU;gBACzB,CAAC,CAAC,eAAe,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;gBACzF,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,0BAA0B,CAAA;YAEtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,wCAAwC;4BACxC,EAAE;4BACF,QAAQ,MAAM,CAAC,SAAS,EAAE;4BAC1B,QAAQ;4BACR,EAAE;4BACF,6DAA6D;4BAC7D,kDAAkD,MAAM,CAAC,SAAS,KAAK;yBACxE,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb,CAAC;aACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qCAAqC,OAAO,EAAE;qBACrD,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,GAAG,CAAA;IACpC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAClD,CAAC"} | ||
| {"version":3,"file":"upload-reference-image.js","sourceRoot":"","sources":["../../src/tools/upload-reference-image.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAaH,oEAoDC;AA/DD,6BAAuB;AACvB,2BAA+B;AAG/B,gDAAwD;AAE3C,QAAA,0BAA0B,GAAG;IACxC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;SACjB,QAAQ,CAAC,kLAAkL,CAAC;CAChM,CAAA;AAED,SAAgB,4BAA4B,CAAC,MAAiB,EAAE,MAAoB;IAClF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,gNAAgN,EAChN,kCAA0B,EAC1B,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,EAC9C,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,uBAAuB;QACvB,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,mBAAmB,QAAQ,EAAE;qBACpC,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAqB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAE5D,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,cAAc,CAAA;YAChE,MAAM,QAAQ,GAAG,UAAU;gBACzB,CAAC,CAAC,eAAe,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;gBACzF,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,0BAA0B,CAAA;YAEtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,wCAAwC;4BACxC,EAAE;4BACF,QAAQ,MAAM,CAAC,SAAS,EAAE;4BAC1B,QAAQ;4BACR,EAAE;4BACF,6DAA6D;4BAC7D,kDAAkD,MAAM,CAAC,SAAS,KAAK;yBACxE,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb,CAAC;aACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qCAAqC,OAAO,EAAE;qBACrD,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,GAAG,CAAA;IACpC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAClD,CAAC"} |
+1
-1
| { | ||
| "name": "meigen", | ||
| "version": "1.1.11", | ||
| "version": "1.2.0", | ||
| "description": "Visual creative expert plugin — search inspiration, enhance prompts, and generate AI images with intelligent workflow orchestration", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
+138
-83
@@ -1,26 +0,24 @@ | ||
| <p align="center"> | ||
| <img src="assets/banner.jpg" alt="MeiGen-Art Banner" width="600"> | ||
| </p> | ||
| <h1 align="center"> | ||
| MeiGen-Art — Visual Creative Expert | ||
| MeiGen AI Design MCP | ||
| </h1> | ||
| <p align="center"> | ||
| <strong>Turn your AI assistant into a creative director for image generation</strong><br> | ||
| <sub>MCP plugin for Claude Code, OpenClaw, and any MCP-compatible host</sub> | ||
| <strong>Turn Claude Code / OpenClaw into your personal design assistant rivaling Lovart</strong><br><sub>Local ComfyUI generation, API integration, 1,300+ pro prompt library, multi-direction parallel output</sub> | ||
| </p> | ||
| <p align="center"> | ||
| <a href="https://www.meigen.ai"><img src="https://img.shields.io/badge/Gallery-meigen.ai-blue?style=flat-square" alt="Gallery"></a> | ||
| <a href="#tools"><img src="https://img.shields.io/badge/Tools-7-green?style=flat-square" alt="7 Tools"></a> | ||
| <a href="#providers"><img src="https://img.shields.io/badge/Providers-3-orange?style=flat-square" alt="3 Providers"></a> | ||
| <a href="https://www.npmjs.com/package/meigen"><img src="https://img.shields.io/npm/v/meigen?style=flat-square&color=blue" alt="npm version"></a> | ||
| <a href="https://www.npmjs.com/package/meigen"><img src="https://img.shields.io/npm/dm/meigen?style=flat-square&color=green" alt="npm downloads"></a> | ||
| <img src="https://img.shields.io/badge/Type-MCP_Server-blue?style=flat-square" alt="MCP Server"> | ||
| <img src="https://img.shields.io/badge/Local-ComfyUI-green?style=flat-square" alt="ComfyUI Support"> | ||
| <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-lightgrey?style=flat-square" alt="MIT"></a> | ||
| <a href="https://mcp-cn.com"><img src="https://img.shields.io/badge/MCP_Hub-China-red?style=flat-square" alt="MCP Hub China"></a> | ||
| </p> | ||
| <p align="center"> | ||
| <a href="#quick-start">Quick Start</a> • | ||
| <a href="#what-can-it-do">What Can It Do</a> • | ||
| <a href="#providers">Providers</a> • | ||
| <a href="#configuration">Configuration</a> | ||
| <a href="#quick-start">Quick Start</a> • | ||
| <a href="#see-it-in-action">Demo</a> • | ||
| <a href="#features">Features</a> • | ||
| <a href="#providers">Providers</a> • | ||
| <a href="#slash-commands">Commands</a> | ||
| </p> | ||
@@ -34,19 +32,56 @@ | ||
| ## Why MeiGen-Art? | ||
| ## What Is This? | ||
| Most AI image tools are either simple prompt-in-image-out APIs, or complex UIs that require expertise. | ||
| An open-source MCP Server (installed via plugin marketplace) that gives LLMs creative and aesthetic capabilities through 8 tools and carefully designed skills, enabling them to handle complex design tasks. It teaches LLMs how to use various image generation models effectively, delivering professional results through reference images and multi-direction parallel workflows. | ||
| MeiGen-Art takes a different approach: it gives your AI assistant **professional creative knowledge** — 1,300+ curated trending prompts, style-specific enhancement techniques, and multi-step workflow orchestration — so you can describe what you want in plain language, and get production-quality results. | ||
| - Works with local ComfyUI — no external API dependency; also easily integrates with any custom API | ||
| - Built-in 1,300+ curated prompt templates and fine-tuned prompt engineering techniques that turn requirements into concrete image generation tasks | ||
| - Parallel batch generation and sub-agent execution to keep the main context window clean | ||
| **No prompt engineering skills needed.** Just talk to your AI assistant like you would to a creative director. | ||
| --- | ||
| ## See It in Action | ||
| <p align="center"> | ||
| <a href="https://youtu.be/JQ3DZ1DXqvs"> | ||
| <img src="https://img.youtube.com/vi/JQ3DZ1DXqvs/maxresdefault.jpg" alt="Watch Demo" width="400"> | ||
| </a> | ||
| <br> | ||
| <b><a href="https://youtu.be/JQ3DZ1DXqvs">▶ Watch demo on YouTube</a></b> | ||
| </p> | ||
| ### Product Photo — 4 Directions in Parallel | ||
| > *"Create 4 product display images for this perfume, one of which should feature a model."* | ||
| **Process** — AI uploads the reference image, crafts 4 distinct prompts, then generates all 4 in parallel: | ||
| <p align="center"> | ||
| <img src="assets/demo-process.jpg" alt="Parallel generation process" width="700"> | ||
| </p> | ||
| **Result** — 4 creative directions delivered in under 2 minutes: | ||
| <p align="center"> | ||
| <img src="assets/demo-result.jpg" alt="Generation results" width="700"> | ||
| </p> | ||
| **Generated images:** | ||
| <p align="center"> | ||
| <img src="assets/sample-luxury.jpg" alt="Luxury still life" width="24%"> | ||
| <img src="assets/sample-model.jpg" alt="Model campaign" width="24%"> | ||
| <img src="assets/sample-botanicals.jpg" alt="Nature botanicals" width="24%"> | ||
| <img src="assets/sample-minimal.jpg" alt="Minimalist editorial" width="24%"> | ||
| </p> | ||
| --- | ||
| ## Installation | ||
| ## Quick Start | ||
| ### Claude Code | ||
| ### Claude Code Plugin (Recommended) | ||
| ```bash | ||
| # Add the plugin source | ||
| /plugin marketplace add jau123/MeiGen-Art | ||
| # Add the plugin marketplace | ||
| /plugin marketplace add jau123/MeiGen-AI-Design-MCP | ||
@@ -57,7 +92,7 @@ # Install | ||
| **After installation, restart Claude Code** (close and reopen, or open a new terminal tab) to activate the plugin. | ||
| **Restart Claude Code** after installation (close and reopen, or open a new terminal tab). | ||
| #### First-Time Setup | ||
| Once restarted, free features work immediately — try asking: | ||
| Free features work immediately after restart — try: | ||
@@ -73,13 +108,27 @@ > "Search for some creative inspiration" | ||
| The wizard walks you through: | ||
| 1. **Choose a provider** — MeiGen Platform (recommended, supports Nanobanana Pro / GPT image 1.5 / Seedream 4.5), local ComfyUI, or OpenAI-compatible API | ||
| 2. **Enter credentials** — API token, key, or ComfyUI URL. You can also paste a `curl` command and it auto-extracts everything | ||
| 1. **Choose a provider** — local ComfyUI, MeiGen Cloud, or OpenAI-compatible API | ||
| 2. **Enter credentials** — ComfyUI URL, API token, or key | ||
| 3. **Done** — restart Claude Code once more, then start generating | ||
| ### Cursor / VS Code / Windsurf / Roo Code | ||
| One command to set up MeiGen for any supported AI coding tool: | ||
| ```bash | ||
| npx meigen init cursor # Cursor | ||
| npx meigen init vscode # VS Code / GitHub Copilot | ||
| npx meigen init windsurf # Windsurf | ||
| npx meigen init roo # Roo Code | ||
| npx meigen init claude # Claude Code (project-level) | ||
| ``` | ||
| This writes the correct MCP config file with the right format and path for your tool. If a config file already exists, MeiGen is merged in without overwriting your other servers. | ||
| ### OpenClaw | ||
| Our skills follow the [Agent Skills](https://agentskills.io) open standard. Copy them into your OpenClaw workspace and they work directly. For MCP tools, use OpenClaw's MCP adapter to connect the MeiGen server. | ||
| Our skills follow the [Agent Skills](https://agentskills.io) open standard — copy them into your OpenClaw workspace and they work directly. For MCP tools, use OpenClaw's MCP adapter to connect the MeiGen server. | ||
| ### Other MCP-Compatible Hosts | ||
| Add to your MCP config (e.g. `.mcp.json`, `claude_desktop_config.json`, etc.): | ||
| Add to your MCP config (e.g. `.mcp.json`, `claude_desktop_config.json`): | ||
@@ -100,62 +149,76 @@ ```json | ||
| > **Tip:** Even without an API key, free features (inspiration search, prompt enhancement, model listing) work immediately. Configure your provider via `~/.config/meigen/config.json` or environment variables — see [Configuration](#configuration). | ||
| > Free features (inspiration search, prompt enhancement, model listing) work without any API key. | ||
| --- | ||
| ## What Can It Do | ||
| <h2 id="features">Features</h2> | ||
| ### 1. Explore & Get Inspired | ||
| ### MCP Tools | ||
| > "Help me think of something for a social media post" | ||
| | Tool | Free | Description | | ||
| |------|------|-------------| | ||
| | `search_gallery` | Yes | Search 1,300+ curated trending prompts with visual previews | | ||
| | `get_inspiration` | Yes | Get full prompt, all images, and metadata for any gallery entry | | ||
| | `enhance_prompt` | Yes | Transform a brief idea into a professional image prompt | | ||
| | `list_models` | Yes | List available models across all configured providers | | ||
| | `upload_reference_image` | Yes | Compress and upload a local image for use as a reference | | ||
| | `comfyui_workflow` | Yes | Manage ComfyUI workflow templates: list, view, import, modify, delete | | ||
| | `manage_preferences` | Yes | Remember your preferred style, aspect ratio, model, and favorite prompts | | ||
| | `generate_image` | Key | Generate an image — routes to the best available provider automatically | | ||
| When you're not sure what to create, the assistant browses the curated gallery of 1,300+ trending prompts, shows you visual previews, and lets you pick a style before generating anything. | ||
| ### Slash Commands | ||
| ### 2. Simple Idea to Pro Image | ||
| | Command | Description | | ||
| |---------|-------------| | ||
| | `/meigen:gen <prompt>` | Quick generate — skip conversation, go straight to image | | ||
| | `/meigen:find <keywords>` | Search 1,300+ curated prompts for inspiration | | ||
| | `/meigen:models` | Browse and switch AI models for this session | | ||
| | `/meigen:ref <file>` | Upload a local image as reference, get a URL back | | ||
| | `/meigen:setup` | Interactive provider configuration wizard | | ||
| > "A cat sitting in a Japanese garden" | ||
| ### Smart Agents | ||
| Short descriptions get automatically enhanced into professional prompts with specific visual details — lighting, composition, lens, color palette — then generated. No prompt engineering knowledge needed. | ||
| MeiGen uses specialized sub-agents for efficient parallel execution: | ||
| ### 3. Batch & Variant Generation | ||
| | Agent | Purpose | | ||
| |-------|---------| | ||
| | `image-generator` | Executes `generate_image` in isolated context — enables true parallel generation | | ||
| | `prompt-crafter` | Writes multiple distinct prompts for batch generation (runs on Haiku for cost efficiency) | | ||
| | `gallery-researcher` | Deep gallery exploration without cluttering the main conversation (runs on Haiku) | | ||
| > "Design 4 different logo concepts for a coffee brand" | ||
| ### Output Styles | ||
| The assistant writes distinct creative directions for each variant, generates them in parallel (up to 4 at once), and presents the results with comparative commentary. | ||
| Switch creative modes with `/output-style`: | ||
| ### 4. Multi-Step Creative Workflow | ||
| - **Creative Director** — Art direction mode with visual storytelling, mood boards, and design thinking | ||
| - **Minimal** — Just images and file paths, no commentary. Ideal for batch workflows | ||
| > "Create a logo, then show me how it looks on a mug and a t-shirt" | ||
| ### Automation Hooks | ||
| The assistant chains generation steps: creates the base image first, then uses it as a reference to generate product mockups — maintaining visual consistency across the series. | ||
| - **Config Check** — Validates provider configuration on session start, guides setup if missing | ||
| - **Auto-Open** — Generated images automatically open in Preview (macOS) | ||
| ### 5. Reference Image Style Transfer | ||
| --- | ||
| > "Use this local photo as a style reference for my new image" | ||
| <h2 id="providers">Providers</h2> | ||
| Local images are automatically compressed and uploaded. The returned URL works as a reference across all three providers — for style transfer, composition guidance, or img2img workflows. | ||
| MeiGen MCP supports three image generation backends. Configure one or multiple — the system auto-selects the best available. | ||
| --- | ||
| ### ComfyUI — Local & Free | ||
| <h2 id="tools">Tools</h2> | ||
| Run generation on your own GPU with full control over models, samplers, and workflow parameters. Import any ComfyUI API-format workflow — MeiGen auto-detects KSampler, CLIPTextEncode, EmptyLatentImage, and LoadImage nodes. | ||
| | Tool | Free | Description | | ||
| |------|------|-------------| | ||
| | `search_gallery` | Yes | Search 1,300+ curated trending prompts with visual previews | | ||
| | `get_inspiration` | Yes | Get full prompt, all images, and metadata for any gallery entry | | ||
| | `enhance_prompt` | Yes | Transform a brief idea into a professional image prompt (runs locally) | | ||
| | `list_models` | Yes | List available models across all configured providers | | ||
| | `upload_reference_image` | Yes | Compress and upload a local image for use as a reference | | ||
| | `comfyui_workflow` | Yes | Manage ComfyUI workflow templates: list, view, import, modify, delete | | ||
| | `generate_image` | Key | Generate an image — routes to the best available provider automatically | | ||
| ```json | ||
| { | ||
| "comfyuiUrl": "http://localhost:8188", | ||
| "comfyuiDefaultWorkflow": "txt2img" | ||
| } | ||
| ``` | ||
| --- | ||
| > Perfect for Flux, SDXL, or any model you run locally. Your images never leave your machine. | ||
| <h2 id="providers">Providers</h2> | ||
| ### MeiGen Cloud | ||
| MeiGen-Art supports three image generation backends. You can configure one or multiple — the assistant auto-selects the best available, or you can specify per-request. | ||
| Cloud API with multiple models: Nanobanana Pro, GPT image 1.5, Seedream 4.5, and more. No GPU required. | ||
| ### MeiGen Platform (Recommended) | ||
| Cloud API with multiple model options: Nanobanana Pro, GPT image 1.5, Seedream 4.5, and more. | ||
| **Get your API token:** | ||
@@ -170,16 +233,5 @@ 1. Sign in at [meigen.ai](https://www.meigen.ai) | ||
| ### ComfyUI (Local) | ||
| Run generation on your own GPU with full control over models, samplers, and workflow parameters. Import any ComfyUI API-format workflow. | ||
| ```json | ||
| { | ||
| "comfyuiUrl": "http://localhost:8188", | ||
| "comfyuiDefaultWorkflow": "txt2img" | ||
| } | ||
| ``` | ||
| ### OpenAI-Compatible API | ||
| Bring your own API key for OpenAI (gpt-image-1.5), Together AI, Fireworks AI, or any OpenAI-compatible service. | ||
| Bring your own API key for OpenAI (gpt-image-1.5), Together AI, Fireworks AI, or any compatible service. | ||
@@ -226,11 +278,14 @@ ```json | ||
| ## Development | ||
| ## Privacy | ||
| ```bash | ||
| npm install # Install dependencies | ||
| npm run build # Compile TypeScript → dist/ | ||
| npm run dev # Development mode (tsx) | ||
| npm run typecheck # Type check without emitting | ||
| ``` | ||
| MeiGen MCP respects your privacy. Here's what happens with your data: | ||
| - **ComfyUI (local)** — All processing stays on your machine. No data is sent externally. | ||
| - **MeiGen Cloud** — Prompts and reference images are sent to `api.meigen.ai` for generation. Generated images are stored temporarily on Cloudflare R2. See [meigen.ai/privacy](https://www.meigen.ai/privacy). | ||
| - **OpenAI-compatible** — Prompts and reference images are sent to the configured API endpoint. See your provider's privacy policy. | ||
| - **Reference image upload** — Images are compressed locally (max 2MB) and uploaded to Cloudflare R2 via `gen.meigen.ai`. No authentication required. | ||
| - **Gallery search & prompt enhancement** — Run locally against bundled data. No external API calls. | ||
| No telemetry, analytics, or tracking of any kind. | ||
| --- | ||
@@ -240,2 +295,2 @@ | ||
| MIT | ||
| [MIT](LICENSE) — free for personal and commercial use. |
+139
-84
@@ -1,26 +0,24 @@ | ||
| <p align="center"> | ||
| <img src="assets/banner.jpg" alt="MeiGen-Art Banner" width="600"> | ||
| </p> | ||
| <h1 align="center"> | ||
| MeiGen-Art — AI 视觉创意专家 | ||
| MeiGen AI Design MCP | ||
| </h1> | ||
| <p align="center"> | ||
| <strong>让你的 AI 助手成为图片生成的创意总监</strong><br> | ||
| <sub>适用于 Claude Code、OpenClaw 及任何 MCP 兼容客户端的插件</sub> | ||
| <strong>让 Claude Code / OpenClaw 变成媲美 Lovart 的私人设计助理</strong><br><sub>支持本地 ComfyUI 生图和接入 API,1,300+ 专业提示词库,多方案并行</sub> | ||
| </p> | ||
| <p align="center"> | ||
| <a href="https://www.meigen.ai"><img src="https://img.shields.io/badge/Gallery-meigen.ai-blue?style=flat-square" alt="Gallery"></a> | ||
| <a href="#工具"><img src="https://img.shields.io/badge/Tools-7-green?style=flat-square" alt="7 Tools"></a> | ||
| <a href="#生成后端"><img src="https://img.shields.io/badge/Providers-3-orange?style=flat-square" alt="3 Providers"></a> | ||
| <a href="https://www.npmjs.com/package/meigen"><img src="https://img.shields.io/npm/v/meigen?style=flat-square&color=blue" alt="npm version"></a> | ||
| <a href="https://www.npmjs.com/package/meigen"><img src="https://img.shields.io/npm/dm/meigen?style=flat-square&color=green" alt="npm downloads"></a> | ||
| <img src="https://img.shields.io/badge/Type-MCP_Server-blue?style=flat-square" alt="MCP Server"> | ||
| <img src="https://img.shields.io/badge/Local-ComfyUI-green?style=flat-square" alt="ComfyUI Support"> | ||
| <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-lightgrey?style=flat-square" alt="MIT"></a> | ||
| <a href="https://mcp-cn.com"><img src="https://img.shields.io/badge/MCP_Hub-China-red?style=flat-square" alt="MCP Hub China"></a> | ||
| </p> | ||
| <p align="center"> | ||
| <a href="#安装">安装</a> • | ||
| <a href="#它能做什么">它能做什么</a> • | ||
| <a href="#生成后端">生成后端</a> • | ||
| <a href="#配置">配置</a> | ||
| <a href="#快速开始">快速开始</a> • | ||
| <a href="#实际效果">演示</a> • | ||
| <a href="#功能一览">功能</a> • | ||
| <a href="#生成后端">后端</a> • | ||
| <a href="#快捷命令">命令</a> | ||
| </p> | ||
@@ -34,19 +32,56 @@ | ||
| ## 为什么选择 MeiGen-Art? | ||
| ## 这是什么? | ||
| 大多数 AI 图片工具,要么是简单的"输入提示词 → 输出图片"的 API,要么是需要专业知识的复杂界面。 | ||
| 一个开源 MCP Server(通过插件市场安装),通过 8 个 tools 和精心设计的 skills,让 LLM 具备创意和审美能力,可以完成更复杂的设计任务。它能让 LLM 了解各种生图模型的使用技巧,通过参考图和多方案并行,交付更专业的成果。 | ||
| MeiGen-Art 走了一条不同的路:它赋予你的 AI 助手**专业的创意能力**——1,300+ 精选热门提示词、风格化的提示词增强技术、多步骤工作流编排——你只需要用自然语言描述想要什么,就能得到专业品质的结果。 | ||
| - 可以调用本地 ComfyUI 服务,不依赖外部 API;也可以方便地接入任意自定义 API | ||
| - 内置 1,300+ 优质提示词模板和精心调试的提示词撰写技巧,把需求转化为具象的生图任务 | ||
| - 支持并行批量任务和子 Agent 调用,避免主窗口上下文膨胀 | ||
| **不需要任何提示词工程知识。** 像跟创意总监对话一样,跟你的 AI 助手聊就行了。 | ||
| --- | ||
| ## 实际效果 | ||
| <p align="center"> | ||
| <a href="https://youtu.be/JQ3DZ1DXqvs"> | ||
| <img src="https://img.youtube.com/vi/JQ3DZ1DXqvs/maxresdefault.jpg" alt="观看演示" width="400"> | ||
| </a> | ||
| <br> | ||
| <b><a href="https://youtu.be/JQ3DZ1DXqvs">▶ 在 YouTube 观看演示</a></b> | ||
| </p> | ||
| ### 产品图 — 4 个方向并行生成 | ||
| > *"帮这瓶香水做 4 张产品展示图,其中一张要有模特。"* | ||
| **过程** — AI 自动上传参考图、规划 4 个创意方向、撰写专业提示词: | ||
| <p align="center"> | ||
| <img src="assets/demo-process-zh.jpg" alt="并行生成过程" width="700"> | ||
| </p> | ||
| **结果** — 不到 2 分钟,4 个方向全部完成: | ||
| <p align="center"> | ||
| <img src="assets/demo-result-zh.jpg" alt="生成结果" width="700"> | ||
| </p> | ||
| **生成的图片:** | ||
| <p align="center"> | ||
| <img src="assets/sample-luxury.jpg" alt="奢华静物" width="24%"> | ||
| <img src="assets/sample-model.jpg" alt="优雅模特" width="24%"> | ||
| <img src="assets/sample-botanicals.jpg" alt="梦幻花境" width="24%"> | ||
| <img src="assets/sample-minimal.jpg" alt="极简光影" width="24%"> | ||
| </p> | ||
| --- | ||
| ## 安装 | ||
| ## 快速开始 | ||
| ### Claude Code | ||
| ### Claude Code 插件(推荐) | ||
| ```bash | ||
| # 添加插件源 | ||
| /plugin marketplace add jau123/MeiGen-Art | ||
| /plugin marketplace add jau123/MeiGen-AI-Design-MCP | ||
@@ -57,7 +92,7 @@ # 安装 | ||
| **安装完成后,重启 Claude Code**(关闭再打开,或新建终端标签页)以激活插件。 | ||
| **安装完成后重启 Claude Code**(关闭再打开,或新建终端标签页)。 | ||
| #### 首次配置 | ||
| 重启后,免费功能无需配置即可使用——试试问: | ||
| 重启后,免费功能无需配置即可使用 — 试试问: | ||
@@ -73,13 +108,27 @@ > "帮我搜索一些创意灵感" | ||
| 向导会引导你完成: | ||
| 1. **选择后端** — MeiGen 平台(推荐,支持 Nanobanana Pro / GPT image 1.5 / Seedream 4.5)、本地 ComfyUI、或 OpenAI 兼容 API | ||
| 2. **输入凭证** — API Token、Key 或 ComfyUI 地址。也可以直接粘贴 `curl` 命令,自动提取配置 | ||
| 3. **完成** — 再次重启 Claude Code,即可开始生成图片 | ||
| 1. **选择后端** — 本地 ComfyUI、MeiGen 云端、或 OpenAI 兼容 API | ||
| 2. **输入凭证** — ComfyUI 地址、API Token 或 Key | ||
| 3. **完成** — 再次重启 Claude Code,即可开始生图 | ||
| ### Cursor / VS Code / Windsurf / Roo Code | ||
| 一行命令为任意支持的 AI 编程工具配置 MeiGen: | ||
| ```bash | ||
| npx meigen init cursor # Cursor | ||
| npx meigen init vscode # VS Code / GitHub Copilot | ||
| npx meigen init windsurf # Windsurf | ||
| npx meigen init roo # Roo Code | ||
| npx meigen init claude # Claude Code(项目级) | ||
| ``` | ||
| 自动写入正确格式的 MCP 配置文件。如果配置文件已存在,MeiGen 会合并写入,不会覆盖你的其他 MCP 服务。 | ||
| ### OpenClaw | ||
| 我们的技能遵循 [Agent Skills](https://agentskills.io) 开放标准,可复制到 OpenClaw 工作区直接使用。如需 MCP 工具,通过 OpenClaw 的 MCP adapter 连接 MeiGen server 即可。 | ||
| 我们的技能遵循 [Agent Skills](https://agentskills.io) 开放标准,可直接复制到 OpenClaw 工作区使用。如需 MCP 工具,通过 OpenClaw 的 MCP adapter 连接 MeiGen server 即可。 | ||
| ### 其他 MCP 兼容客户端 | ||
| 添加到 MCP 配置文件(如 `.mcp.json`、`claude_desktop_config.json` 等): | ||
| 添加到 MCP 配置文件(如 `.mcp.json`、`claude_desktop_config.json`): | ||
@@ -100,62 +149,76 @@ ```json | ||
| > **提示:** 即使没有 API Key,免费功能(灵感搜索、提示词增强、模型列表)也可以直接使用。通过 `~/.config/meigen/config.json` 或环境变量配置你的后端——详见[配置](#配置)。 | ||
| > 即使没有 API Key,免费功能(灵感搜索、提示词增强、模型列表)也可以直接使用。 | ||
| --- | ||
| ## 它能做什么 | ||
| <h2 id="功能一览">功能一览</h2> | ||
| ### 1. 探索灵感 | ||
| ### MCP 工具 | ||
| > "帮我想想社交媒体发什么图" | ||
| | 工具 | 免费 | 说明 | | ||
| |------|------|------| | ||
| | `search_gallery` | 是 | 搜索 1,300+ 精选热门提示词,附带视觉预览 | | ||
| | `get_inspiration` | 是 | 获取某条提示词的完整内容、所有图片和元数据 | | ||
| | `enhance_prompt` | 是 | 将简短想法转化为专业图片提示词 | | ||
| | `list_models` | 是 | 列出所有已配置后端的可用模型 | | ||
| | `upload_reference_image` | 是 | 压缩并上传本地图片,用作参考图 | | ||
| | `comfyui_workflow` | 是 | 管理 ComfyUI 工作流模板:列表、查看、导入、修改、删除 | | ||
| | `manage_preferences` | 是 | 记住你偏好的风格、比例、模型和收藏的提示词 | | ||
| | `generate_image` | 需要 Key | 生成图片 — 自动路由到最佳可用后端 | | ||
| 当你还没有明确想法时,助手会浏览 1,300+ 精选热门提示词库,展示视觉预览,让你先挑选喜欢的风格,再开始生成。 | ||
| ### 快捷命令 | ||
| ### 2. 简单想法变专业图片 | ||
| | 命令 | 说明 | | ||
| |------|------| | ||
| | `/meigen:gen <提示词>` | 快速生图 — 跳过对话,直接生成 | | ||
| | `/meigen:find <关键词>` | 搜索 1,300+ 精选提示词获取灵感 | | ||
| | `/meigen:models` | 浏览和切换当前会话的 AI 模型 | | ||
| | `/meigen:ref <文件路径>` | 上传本地图片作为参考图,返回 URL | | ||
| | `/meigen:setup` | 交互式后端配置向导 | | ||
| > "一只猫坐在日式庭院里" | ||
| ### 智能 Agent | ||
| 简短的描述会被自动增强为专业提示词——补充光影、构图、镜头、配色等视觉细节——然后直接生成。不需要任何提示词工程知识。 | ||
| MeiGen 使用专用子 Agent 实现高效并行执行: | ||
| ### 3. 批量变体生成 | ||
| | Agent | 用途 | | ||
| |-------|------| | ||
| | `image-generator` | 在隔离上下文中执行 `generate_image` — 支持真正的并行生成 | | ||
| | `prompt-crafter` | 为批量生成撰写多个不同风格的提示词(使用 Haiku 模型,更节省成本) | | ||
| | `gallery-researcher` | 深度灵感搜索,不会占用主对话的上下文(使用 Haiku 模型) | | ||
| > "设计 4 个不同风格的咖啡品牌 logo" | ||
| ### 输出风格 | ||
| 助手会为每个变体撰写不同的创意方向,最多 4 张并行生成,并附上对比点评。 | ||
| 通过 `/output-style` 切换创意模式: | ||
| ### 4. 多步骤创意工作流 | ||
| - **Creative Director** — 创意总监模式,以视觉叙事、情绪板和设计思维组织回复 | ||
| - **Minimal** — 极简模式,只输出图片和文件路径,无多余解释。适合批量工作流 | ||
| > "先做一个 logo,然后看看印在马克杯和 T 恤上的效果" | ||
| ### 自动化 Hook | ||
| 助手会串联生成步骤:先生成基础图片,再将其作为参考图生成产品效果图——在整个系列中保持视觉一致性。 | ||
| - **配置检查** — 会话启动时自动验证后端配置,缺失时引导完成设置 | ||
| - **自动打开** — 生成的图片自动在预览中打开(macOS) | ||
| ### 5. 参考图风格迁移 | ||
| --- | ||
| > "用这张本地照片的风格来生成新图片" | ||
| <h2 id="生成后端">生成后端</h2> | ||
| 本地图片会自动压缩上传,返回的 URL 可用于所有三种后端——风格迁移、构图参考或 img2img 工作流。 | ||
| MeiGen MCP 支持三种图片生成后端,可以配置一个或多个 — 系统自动选择最佳可用后端。 | ||
| --- | ||
| ### ComfyUI — 本地免费 | ||
| <h2 id="工具">工具</h2> | ||
| 在自己的 GPU 上运行,完全控制模型、采样器和工作流参数。支持导入任意 ComfyUI API 格式的工作流 — MeiGen 自动检测 KSampler、CLIPTextEncode、EmptyLatentImage、LoadImage 节点。 | ||
| | 工具 | 免费 | 说明 | | ||
| |------|------|------| | ||
| | `search_gallery` | 是 | 搜索 1,300+ 精选热门提示词,附带视觉预览 | | ||
| | `get_inspiration` | 是 | 获取某条提示词的完整内容、所有图片和元数据 | | ||
| | `enhance_prompt` | 是 | 将简短想法转化为专业图片提示词(本地运行) | | ||
| | `list_models` | 是 | 列出所有已配置后端的可用模型 | | ||
| | `upload_reference_image` | 是 | 压缩并上传本地图片,用作参考图 | | ||
| | `comfyui_workflow` | 是 | 管理 ComfyUI 工作流模板:列表、查看、导入、修改、删除 | | ||
| | `generate_image` | 需要 Key | 生成图片——自动路由到最佳可用后端 | | ||
| ```json | ||
| { | ||
| "comfyuiUrl": "http://localhost:8188", | ||
| "comfyuiDefaultWorkflow": "txt2img" | ||
| } | ||
| ``` | ||
| --- | ||
| > 适合 Flux、SDXL 或任何你本地运行的模型。图片完全不离开你的机器。 | ||
| <h2 id="生成后端">生成后端</h2> | ||
| ### MeiGen 云端 | ||
| MeiGen-Art 支持三种图片生成后端,可以配置一个或多个——助手会自动选择最佳可用后端,也可以在每次请求时手动指定。 | ||
| 云端 API,支持多种模型:Nanobanana Pro、GPT image 1.5、Seedream 4.5 等。无需 GPU。 | ||
| ### MeiGen 平台(推荐) | ||
| 云端 API,支持多种模型:Nanobanana Pro、GPT image 1.5、Seedream 4.5 等。 | ||
| **获取 API Token:** | ||
@@ -170,16 +233,5 @@ 1. 登录 [meigen.ai](https://www.meigen.ai) | ||
| ### ComfyUI(本地) | ||
| 在自己的 GPU 上运行,完全控制模型、采样器和工作流参数。支持导入任意 ComfyUI API 格式的工作流。 | ||
| ```json | ||
| { | ||
| "comfyuiUrl": "http://localhost:8188", | ||
| "comfyuiDefaultWorkflow": "txt2img" | ||
| } | ||
| ``` | ||
| ### OpenAI 兼容 API | ||
| 使用你自己的 API Key 接入 OpenAI(gpt-image-1.5)、Together AI、Fireworks AI 或任何 OpenAI 兼容服务。 | ||
| 使用你自己的 API Key 接入 OpenAI(gpt-image-1.5)、Together AI、Fireworks AI 或任何兼容服务。 | ||
@@ -206,3 +258,3 @@ ```json | ||
| 配置向导会引导你选择后端、输入 API Key、导入 ComfyUI 工作流。你也可以直接粘贴 API 提供商文档中的 `curl` 命令——自动提取 Key、URL 和模型名。 | ||
| 配置向导会引导你选择后端、输入 API Key、导入 ComfyUI 工作流。你也可以直接粘贴 API 提供商文档中的 `curl` 命令 — 自动提取 Key、URL 和模型名。 | ||
@@ -227,11 +279,14 @@ ### 配置文件 | ||
| ## 开发 | ||
| ## 隐私 | ||
| ```bash | ||
| npm install # 安装依赖 | ||
| npm run build # 编译 TypeScript → dist/ | ||
| npm run dev # 开发模式(tsx) | ||
| npm run typecheck # 类型检查 | ||
| ``` | ||
| MeiGen MCP 尊重你的隐私。以下是数据处理方式: | ||
| - **ComfyUI(本地)** — 所有处理在本机完成,不发送任何数据到外部。 | ||
| - **MeiGen 云端** — 提示词和参考图会发送到 `api.meigen.ai` 进行生成。生成的图片临时存储在 Cloudflare R2。详见 [meigen.ai/privacy](https://www.meigen.ai/privacy)。 | ||
| - **OpenAI 兼容 API** — 提示词和参考图会发送到你配置的 API 端点。请参考你的服务商隐私政策。 | ||
| - **参考图上传** — 图片在本地压缩(最大 2MB)后上传到 Cloudflare R2(通过 `gen.meigen.ai`),无需认证。 | ||
| - **灵感搜索和提示词增强** — 在本地使用内置数据运行,不调用外部 API。 | ||
| 不包含任何遥测、分析或追踪功能。 | ||
| --- | ||
@@ -241,2 +296,2 @@ | ||
| MIT | ||
| [MIT](LICENSE) — 个人和商业用途均免费。 |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 7 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 7 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
3360837
1.06%94
14.63%36897
1.25%290
23.4%27
-3.57%