IndoAds Prompt MCP
IndoAds Prompt MCP
A retrieval-first prompt engine for commercial advertising. It does not generate images. It stores curated visual concepts, ranks them against a product brief, and composes a final prompt that ChatGPT can pass to GPT Image, Nano Banana, Seedream, Midjourney, Flux, or another image model.
What is included
Remote MCP endpoint:
POST /mcpREST API for Custom GPT Actions
OpenAPI schema:
/openapi.yamlCurated concepts across F&B, beauty, fashion, tech, home/property, automotive and general e-commerce
Search/ranking with product fit, objective, style, platform, ratio and contextual product/audience details
Diversity-aware recommendation
Product-reference fidelity protection
Optional Bearer API key
Read-only MCP annotations for prompt tools
Core MCP tools
generateAdPrompt— preferred default for direct ad creation. Selects the best concept and composes the final image-generation prompt in one external call.recommend_ad_prompts— return multiple concept options when the user explicitly wants to choose.search_ad_prompts— browse/search the concept library.get_ad_prompt— inspect one known concept ID.compose_ad_prompt— compose from an already selected concept ID.list_prompt_taxonomy— discover supported filters.
All of the tools above only read/process the server's prompt library. They do not mutate external state. The MCP registrations advertise read-only/idempotent/closed-world annotations supported by the current MCP SDK. These annotations are client hints; they do not guarantee that a ChatGPT permission dialog will be skipped.
Recommended one-call ChatGPT workflow
User uploads/describes a product and asks to make an ad.
ChatGPT infers useful fields such as category, product type, product description, objective, target audience, style, platform and aspect ratio.
ChatGPT calls
generateAdPromptonce.The server ranks concepts internally, selects the best one, composes the final prompt, and returns the prompt plus concept metadata.
ChatGPT uses the returned
promptdirectly with image generation if the user asks to generate.
Do not call recommend_ad_prompts → get_ad_prompt → compose_ad_prompt after generateAdPrompt has already returned a final prompt.
The older multi-step workflow remains available for users who explicitly want multiple concepts before choosing.
Local run
cp .env.example .env
npm install
npm test
npm run devHealth check:
curl http://localhost:3000/healthOne-call generate test:
curl -X POST http://localhost:3000/api/generate \
-H 'content-type: application/json' \
-d '{
"productName":"Lumina Serum",
"brandName":"Lumina",
"productDescription":"Brightening facial serum with niacinamide",
"keyBenefit":"Brighter looking skin",
"targetAudience":"Women 20-35",
"objective":"conversion",
"style":"premium",
"platform":"Instagram",
"aspectRatio":"4:5",
"copyText":"Glow Starts Here"
}'Expected response includes:
{
"prompt": "...final image-generation prompt...",
"concept": {
"id": "...",
"name": "...",
"style": "premium",
"objective": "conversion"
},
"aspectRatio": "4:5",
"platform": "Instagram"
}Recommendation flow when the user wants options:
curl -X POST http://localhost:3000/api/recommend \
-H 'content-type: application/json' \
-d '{"category":"fnb","productType":"sambal","query":"spicy authentic premium","aspectRatio":"4:5","count":6}'Compose from a known ID:
curl -X POST http://localhost:3000/api/compose \
-H 'content-type: application/json' \
-d '{"promptId":"FNB-001","productName":"Sambel Pecel Marimar","productDescription":"standing pouch with red-green label","hasReferenceImage":true,"platform":"Instagram","aspectRatio":"4:5"}'Use from a Custom GPT through Actions
Deploy this project to a public HTTPS domain, then in the GPT editor open Actions → Create new action and import:
https://YOUR_DOMAIN/openapi.yaml
The OpenAPI operation generateAdPrompt is the preferred action for direct “make an ad” requests. Existing operation IDs remain available for backward compatibility.
If you set INDOADS_API_KEY, configure the GPT Action authentication as a Bearer API key with the same value. If the variable is blank, the API remains read-only and unauthenticated.
Use as Remote MCP
Deploy on HTTPS and point the MCP-capable client to:
https://YOUR_DOMAIN/mcp
The MCP implementation is stateless and read-only. The privacy endpoint remains available at /privacy.
Add more prompt concepts
Edit the prompt corpus/seeds used by the project. Each concept stores art-direction components rather than a single giant prompt, including product/category fit, objective, visual concept, style tags, composition, lighting, camera, background/set, effects, copy zone, negative constraints, model hints and quality score.
License
Project scaffold: use/modify privately as needed. Prompt seed data in this project is original starter content and not copied verbatim from third-party prompt repositories.