hermoso 0.1.378 → 0.1.379

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.
Files changed (2) hide show
  1. package/mcp/tools.mjs +9 -3
  2. package/package.json +1 -1
package/mcp/tools.mjs CHANGED
@@ -7633,6 +7633,8 @@ function buildTools(rawServer, opts = {}, sink = null) {
7633
7633
  endTime: z.string().optional().describe('REQUIRED with lifetimeBudgetUsd'),
7634
7634
  adsetSchedule: z.array(z.object({ startMinute: z.number(), endMinute: z.number(), days: z.array(z.number()) })).optional().describe('dayparting — minutes from midnight (0–1440), days 0=Sunday…6=Saturday'),
7635
7635
  attributionSpec: z.array(z.any()).optional().describe('e.g. [{event_type:"CLICK_THROUGH",window_days:7}]'),
7636
+ dsaBeneficiary: z.string().optional().describe("EU AD TRANSPARENCY: the person or organisation this ad promotes (Meta shows it on the ad). Meta requires it whenever the ad set reaches the EU; omit it and Hermoso uses the ad account's own default, else this profile's brand name, else the Page name, and the summary says which was used"),
7637
+ dsaPayor: z.string().optional().describe('EU AD TRANSPARENCY: who pays for the ads (Meta shows it on the ad). Omit it and it matches dsaBeneficiary'),
7636
7638
  };
7637
7639
  server.registerTool('create_meta_ad', {
7638
7640
  title: 'Build a full Meta ad (campaign -> ad set -> ad, paused)',
@@ -17179,13 +17181,15 @@ function buildTools(rawServer, opts = {}, sink = null) {
17179
17181
  status: z.enum(['ACTIVE', 'PAUSED', 'ARCHIVED']).optional().describe('ACTIVE starts spend (needs confirm:true); PAUSED / ARCHIVED are safe'),
17180
17182
  dailyBudgetUsd: z.number().optional().describe('new daily budget in USD (1–10000; ad-set or campaign level)'),
17181
17183
  targeting: z.record(z.any()).optional().describe('replacement targeting spec (ad sets) — a Meta targeting object'),
17184
+ dsaBeneficiary: z.string().optional().describe("ad sets: EU ad transparency, who the ad promotes. Meta requires it once targeting reaches the EU; retarget into the EU without it and the ad account default, else the profile's brand name, else the Page name is used"),
17185
+ dsaPayor: z.string().optional().describe('ad sets: EU ad transparency, who pays (defaults to dsaBeneficiary)'),
17182
17186
  confirm: z.boolean().optional().describe('REQUIRED true ONLY to set status ACTIVE (real spend)'),
17183
17187
  },
17184
- outputSchema: { ok: z.boolean().optional(), objectId: z.string().optional(), updated: z.array(z.string()).optional() },
17188
+ outputSchema: { ok: z.boolean().optional(), objectId: z.string().optional(), updated: z.array(z.string()).optional(), euTransparency: z.string().optional().describe('the EU advertiser / payer names set on this edit, and where they came from') },
17185
17189
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
17186
17190
  }, wrap(async (a) => {
17187
17191
  const d = await apiPost('/api/meta/object/update', a);
17188
- return ok(`Updated ${a.objectId} (${(d.updated || []).join(', ')}).`, d);
17192
+ return ok(`Updated ${a.objectId} (${(d.updated || []).join(', ')}).${d.euTransparency ? ` ${d.euTransparency}` : ''}`, d);
17189
17193
  }));
17190
17194
  // ── LINKEDIN LEAD SYNC (2026-09-04): forms + leads read, notification webhooks managed. Standard Tier granted
17191
17195
  // to app 257800418 that day; the consent dialog was probed for the scope BEFORE a line was written. Needs
@@ -18177,11 +18181,13 @@ function buildTools(rawServer, opts = {}, sink = null) {
18177
18181
  text: z.string().optional().describe('the generated text'),
18178
18182
  model: z.string().optional().describe('the writing model label'),
18179
18183
  creditsUsed: z.number().optional().describe('credits billed for this generation'),
18184
+ modelRequested: z.string().optional().describe('present only when the model you named is no longer offered: the id you asked for'),
18185
+ modelNote: z.string().optional().describe('present only when the model you named is no longer offered: says the default ran instead'),
18180
18186
  },
18181
18187
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
18182
18188
  }, wrap(async ({ prompt, model, raw }) => {
18183
18189
  const d = await apiPost('/api/models/llm', { prompt, ...(model ? { model } : {}), ...(raw === true ? { raw: true } : {}) });
18184
- return ok(`${d.text}${d.model ? `\n\n— ${d.model}` : ''}`, d);
18190
+ return ok(`${d.text}${d.model ? `\n\n— ${d.model}` : ''}${d.modelNote ? `\n\n${d.modelNote}` : ''}`, d);
18185
18191
  }));
18186
18192
 
18187
18193
  // ---------- video / avatar / stitch (job-based, polled to completion) ----------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hermoso",
3
- "version": "0.1.378",
3
+ "version": "0.1.379",
4
4
  "mcpName": "io.github.hermoso-ai/hermoso",
5
5
  "description": "Marketing on autopilot, run from your own AI agent. 897 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",