hermoso 0.1.402 → 0.1.403
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mcp/tools.mjs +5 -1
- package/package.json +1 -1
package/mcp/tools.mjs
CHANGED
|
@@ -18068,6 +18068,8 @@ function buildTools(rawServer, opts = {}, sink = null) {
|
|
|
18068
18068
|
outputSchema: {
|
|
18069
18069
|
image: z.string().optional().describe('the served absolute URL of the edited image'),
|
|
18070
18070
|
model: z.string().optional().describe('the model label that rendered it'),
|
|
18071
|
+
editUnchanged: z.boolean().optional().describe('true when the returned picture matches the one sent: the edit changed nothing (productNote says what to try)'),
|
|
18072
|
+
productNote: z.string().optional(),
|
|
18071
18073
|
},
|
|
18072
18074
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
18073
18075
|
}, wrap(async ({ image, instruction, removal, mask, dryRun, fixLabel }) => {
|
|
@@ -18077,7 +18079,9 @@ function buildTools(rawServer, opts = {}, sink = null) {
|
|
|
18077
18079
|
if (dryRun) { const d = await apiPost('/api/static/edit', { image: src, instruction, ...(removal === true ? { removal: true } : {}), ...(maskRef ? { mask: maskRef } : {}), ...fl, dryRun: true }); return ok(quoteText(d && d.quote, 'This image edit (a change to the existing image, not a new render)'), {}); }
|
|
18078
18080
|
const d = await apiPost('/api/static/edit', { image: src, instruction, ...(removal === true ? { removal: true } : {}), ...(maskRef ? { mask: maskRef } : {}), ...fl });
|
|
18079
18081
|
const img = await imageBlock(abs(d.image));
|
|
18080
|
-
|
|
18082
|
+
// editUnchanged (2026-10-06): the server compared the result with the picture sent and nothing changed, so this
|
|
18083
|
+
// never says "Edited image" over it; productNote opens with the plain sentence and what to try instead.
|
|
18084
|
+
return { content: [{ type: 'text', text: `${d.editUnchanged ? 'The edit came back UNCHANGED, nothing was fixed. Returned image' : 'Edited image'}: ${abs(d.image)}${d.model ? ` (${d.model})` : ''}${d.productNote ? `\n${d.productNote}` : ''}` }, ...(img ? [img] : [])], structuredContent: { ...d, image: abs(d.image) } };
|
|
18081
18085
|
}));
|
|
18082
18086
|
server.registerTool('headline_variants', {
|
|
18083
18087
|
title: 'Headline variants of a static ad',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hermoso",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.403",
|
|
4
4
|
"mcpName": "io.github.hermoso-ai/hermoso",
|
|
5
5
|
"description": "Marketing on autopilot, run from your own AI agent. 906 tools. Publishing, scheduling, ad campaign management, comments, DMs and analytics cost no credits on every plan; credits are only for generating creative and for Ad Spy research. AD PLATFORMS: Meta, Google Ads, TikTok Ads, LinkedIn Ads, Reddit Ads, X Ads, Pinterest Ads, Snapchat Ads, Microsoft Advertising, Apple Search Ads, ChatGPT Ads and AppLovin Ads, plus product feeds in Google Merchant Center. PUBLISHING AND SCHEDULING: Facebook, Instagram, Threads, TikTok, YouTube, X, LinkedIn, Pinterest, Bluesky and Telegram. INSTAGRAM DM AUTOMATIONS: a keyword comment, a DM, a story reply or an ig.me link gets an automatic private reply from the brand. AD RESEARCH: the Meta, Google and LinkedIn ad libraries plus organic TikTok, Instagram, YouTube, Threads and Reddit. ANALYTICS: Google Analytics 4, Google Search Console and every connected platform's own post and campaign insights. Also brand onboarding, 50+ image and video generation models, ad scoring, competitor teardowns, Google Drive and OneDrive, a CLI and installable Claude skills.",
|
|
6
6
|
"type": "module",
|