@50heads/mcp 2026.925.2 → 2026.1006.1

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.
@@ -408,6 +408,68 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
408
408
  }>;
409
409
  };
410
410
  };
411
+ interestAudiences: {
412
+ list: (query?: Partial<import("@50heads/shared").AudienceListQuery>) => Promise<{
413
+ audiences: import("@50heads/shared").AudienceCard[];
414
+ }>;
415
+ get: (slug: string) => Promise<{
416
+ audience: import("@50heads/shared").PublicAudience;
417
+ }>;
418
+ ref: (code: string) => Promise<{
419
+ slug: string;
420
+ }>;
421
+ view: (slug: string, input: import("zod").input<typeof import("@50heads/shared").AudienceViewInput>) => Promise<{
422
+ ok: true;
423
+ }>;
424
+ join: (slug: string, input?: import("zod").input<typeof import("@50heads/shared").JoinStartInput>) => Promise<{
425
+ pj: string;
426
+ secret: string;
427
+ }>;
428
+ state: (slug: string, pj: string, secret: string, gpc?: boolean) => Promise<{
429
+ state: import("@50heads/shared").JoinState;
430
+ }>;
431
+ consent: (slug: string, pj: string, input: {
432
+ s: string;
433
+ measure: boolean;
434
+ }, gpc?: boolean) => Promise<{
435
+ ok: true;
436
+ }>;
437
+ answer: (slug: string, pj: string, input: {
438
+ s: string;
439
+ itemId: string;
440
+ answer: number;
441
+ }) => Promise<{
442
+ step: import("@50heads/shared").JoinState["step"];
443
+ }>;
444
+ claim: (slug: string, pj: string, secret: string) => Promise<{
445
+ membership: import("@50heads/shared").MyMembership;
446
+ }>;
447
+ mine: () => Promise<{
448
+ memberships: import("@50heads/shared").MyMembership[];
449
+ }>;
450
+ gradeUp: (slug: string) => Promise<{
451
+ pj: string;
452
+ secret: string;
453
+ }>;
454
+ workEmail: (slug: string, email: string) => Promise<{
455
+ domain: string;
456
+ }>;
457
+ workEmailVerify: (slug: string, code: string) => Promise<{
458
+ membership: import("@50heads/shared").MyMembership;
459
+ }>;
460
+ orgCode: (slug: string, code: string) => Promise<{
461
+ membership: import("@50heads/shared").MyMembership;
462
+ }>;
463
+ requestReview: (slug: string) => Promise<{
464
+ membership: import("@50heads/shared").MyMembership;
465
+ }>;
466
+ membership: (slug: string) => Promise<{
467
+ membership: import("@50heads/shared").MyMembership;
468
+ }>;
469
+ leave: (slug: string) => Promise<{
470
+ ok: true;
471
+ }>;
472
+ };
411
473
  me: () => Promise<{
412
474
  user: import("@50heads/shared").User;
413
475
  }>;
@@ -602,6 +664,12 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
602
664
  } | undefined;
603
665
  scheduledFor?: string | undefined;
604
666
  contentFlag?: "medical" | "violence" | "distressing" | "alcohol_gambling" | "political" | "none" | undefined;
667
+ interestAudienceId?: string | undefined;
668
+ minGrade?: 1 | 2 | 3 | undefined;
669
+ interestPrice?: {
670
+ perAnswerPence: number;
671
+ headShareBps: number;
672
+ } | undefined;
605
673
  teamId?: string | null | undefined;
606
674
  askedBy?: {
607
675
  id: string;
@@ -842,7 +910,9 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
842
910
  emailResults: boolean;
843
911
  emailLowCredits: boolean;
844
912
  emailWeeklyDigest: boolean;
913
+ quietDays?: number[] | undefined;
845
914
  emailExpiringCredits?: boolean | undefined;
915
+ emailAudiences?: boolean | undefined;
846
916
  }>;
847
917
  setNotifications: (prefs: import("@50heads/shared").NotificationPrefs) => Promise<{
848
918
  questionsWaiting: boolean;
@@ -856,7 +926,9 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
856
926
  emailResults: boolean;
857
927
  emailLowCredits: boolean;
858
928
  emailWeeklyDigest: boolean;
929
+ quietDays?: number[] | undefined;
859
930
  emailExpiringCredits?: boolean | undefined;
931
+ emailAudiences?: boolean | undefined;
860
932
  }>;
861
933
  prompts: () => Promise<{
862
934
  due: ("verify_phone" | "verify_id" | "rating_first_payout" | "rating_tier2" | "rating_milestone_100" | "rating_milestone_500" | "rating_first_result" | "notifications" | "add_tags" | "invite_friend" | "set_payout_method" | "feed_first" | "feed_tier2_pays")[];
@@ -926,6 +998,12 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
926
998
  ok: true;
927
999
  }>;
928
1000
  };
1001
+ deviceCheck: {
1002
+ nonce: (device: import("zod").infer<typeof import("@50heads/shared").DeviceCheckNonceInput>["device"]) => Promise<import("@50heads/shared").AttestNonce>;
1003
+ verify: (input: import("@50heads/shared").DeviceCheckRequest) => Promise<{
1004
+ ok: true;
1005
+ }>;
1006
+ };
929
1007
  uploads: {
930
1008
  create: (input: {
931
1009
  kind: "image" | "audio";
@@ -994,6 +1072,12 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
994
1072
  publicResults?: boolean | undefined;
995
1073
  reason?: "off" | "optional" | "required" | undefined;
996
1074
  contentFlag?: "medical" | "violence" | "distressing" | "alcohol_gambling" | "political" | "none" | undefined;
1075
+ interestAudienceId?: string | undefined;
1076
+ minGrade?: 1 | 2 | 3 | undefined;
1077
+ interestPrice?: {
1078
+ perAnswerPence: number;
1079
+ headShareBps: number;
1080
+ } | undefined;
997
1081
  };
998
1082
  updatedAt: string;
999
1083
  }>;
@@ -1242,6 +1326,9 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
1242
1326
  save: (input: import("zod").infer<typeof import("@50heads/shared").SavedAudienceInput>) => Promise<{
1243
1327
  audience: import("@50heads/shared").SavedAudience;
1244
1328
  }>;
1329
+ update: (id: string, input: import("zod").infer<typeof import("@50heads/shared").SavedAudienceInput>) => Promise<{
1330
+ audience: import("@50heads/shared").SavedAudience;
1331
+ }>;
1245
1332
  remove: (id: string) => Promise<{
1246
1333
  ok: true;
1247
1334
  }>;
@@ -1362,7 +1449,7 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
1362
1449
  currency: string;
1363
1450
  };
1364
1451
  arrives: string;
1365
- blocker: "tax_details_required" | "no_method" | "below_minimum" | "reverify_required" | "frozen" | "method_cooling_off" | null;
1452
+ blocker: "tax_details_required" | "no_method" | "below_minimum" | "reverify_required" | "frozen" | "method_cooling_off" | "method_unavailable" | null;
1366
1453
  quoteId: string;
1367
1454
  usableFrom?: string | null | undefined;
1368
1455
  }>;
@@ -1373,8 +1460,29 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
1373
1460
  withdrawals: import("@50heads/shared").Withdrawal[];
1374
1461
  }>;
1375
1462
  payoutMethods: () => Promise<{
1376
- methods: import("@50heads/shared").PayoutMethod[];
1463
+ methods: {
1464
+ id: string;
1465
+ rail: "paypal" | "bank_uk" | "wise" | "venmo";
1466
+ masked: string;
1467
+ holderName: string | null;
1468
+ currency: string;
1469
+ isDefault: boolean;
1470
+ status: "active" | "failed" | "pending_confirmation";
1471
+ copResult: "match" | "close_match" | "no_match" | "unavailable" | null;
1472
+ unavailableReason: string | null;
1473
+ usableFrom?: string | null | undefined;
1474
+ label?: string | undefined;
1475
+ }[];
1377
1476
  available: string[];
1477
+ offered?: {
1478
+ rail: "paypal" | "bank_uk" | "wise" | "venmo";
1479
+ label: string;
1480
+ line: string;
1481
+ currency: string;
1482
+ lockedReason: string | null;
1483
+ }[] | undefined;
1484
+ addDefault?: "paypal" | "bank_uk" | "wise" | "venmo" | undefined;
1485
+ withdrawDefault?: string | null | undefined;
1378
1486
  }>;
1379
1487
  addPayoutMethod: (input: import("@50heads/shared").AddPayoutMethodInput, reauthToken: string) => Promise<{
1380
1488
  method: import("@50heads/shared").PayoutMethod;
@@ -1388,6 +1496,13 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
1388
1496
  removePayoutMethod: (id: string, reauthToken: string) => Promise<{
1389
1497
  ok: true;
1390
1498
  }>;
1499
+ acknowledgeNotice: (version: string) => Promise<{
1500
+ ok: true;
1501
+ version: string;
1502
+ }>;
1503
+ decisions: () => Promise<{
1504
+ decisions: import("@50heads/shared").HeadDecision[];
1505
+ }>;
1391
1506
  setAutoPayout: (enabled: boolean) => Promise<{
1392
1507
  ok: true;
1393
1508
  }>;
@@ -1480,12 +1595,14 @@ export declare function makeApi(opts: StdioOptions): (tool: string, client?: str
1480
1595
  ageBand: string | null;
1481
1596
  declaredAgeBand?: "18-24" | "25-34" | "35-44" | "45-54" | "55-64" | "65+" | null | undefined;
1482
1597
  gender?: "woman" | "man" | "non_binary" | null | undefined;
1598
+ answers?: Record<string, "none" | "not_sure" | "prefer_not"> | undefined;
1483
1599
  }>;
1484
1600
  setTags: (tagIds: string[], about?: Omit<import("@50heads/shared").MyTagsInput, "tagIds">) => Promise<{
1485
1601
  tagIds: string[];
1486
1602
  ageBand: string | null;
1487
1603
  declaredAgeBand?: "18-24" | "25-34" | "35-44" | "45-54" | "55-64" | "65+" | null | undefined;
1488
1604
  gender?: "woman" | "man" | "non_binary" | null | undefined;
1605
+ answers?: Record<string, "none" | "not_sure" | "prefer_not"> | undefined;
1489
1606
  }>;
1490
1607
  appeals: () => Promise<{
1491
1608
  appeals: import("@50heads/shared").Appeal[];
@@ -4,9 +4,9 @@
4
4
  */
5
5
  export declare const SERVER_NAME = "50heads";
6
6
  /** Calendar version (YYYY.MDD.N). Stamped at release by scripts/release.ts; never edit by hand. */
7
- export declare const SERVER_VERSION = "2026.925.2";
7
+ export declare const SERVER_VERSION = "2026.1006.1";
8
8
  /** Sent by the CLI on every request, so the API can tell releases apart. */
9
- export declare const USER_AGENT = "50heads-mcp/2026.925.2";
9
+ export declare const USER_AGENT = "50heads-mcp/2026.1006.1";
10
10
  export declare const MCP_RESOURCE_URL = "https://mcp.50heads.com/mcp";
11
11
  /** The scope each tool needs (spec: Authorization → Scopes). null: no sign-in needed. */
12
12
  export declare const TOOL_SCOPES: {
@@ -25,6 +25,7 @@ export declare const TOOL_SCOPES: {
25
25
  readonly export: "questions:read";
26
26
  readonly build_ask_link: null;
27
27
  readonly list_targeting: null;
28
+ readonly list_audiences: null;
28
29
  readonly search_help: null;
29
30
  readonly send_feedback: null;
30
31
  };
@@ -1,5 +1,5 @@
1
1
  /** The skill's version (front matter metadata.version); advertised as skillVersion. */
2
- export declare const SKILL_VERSION = "2026.925.2";
2
+ export declare const SKILL_VERSION = "2026.1006.1";
3
3
  /** SKILL.md without its front matter: the 50heads://guide resource. */
4
4
  export declare const SKILL_BODY = "# Asking 50heads\n\n50heads puts one short question to verified people on their phones and returns how they split. Answers cost credits, priced in your currency; fifty take about ten minutes.\n\n## When to ask\n\nAsk when the answer is a human reaction: which name, headline, image or menu people prefer, whether copy is clear, what they notice first. Never ask for facts, predictions, advice or research. Before asking again, call `list_questions` and reuse a recent answer.\n\n## Eight rules for a good question\n\n1. One question a head can answer in five seconds.\n2. Ask about a preference or first impression, never a fact.\n3. Show the thing: images (`ab_image`, `upload_image`) for anything visual.\n4. Keep options short, parallel and few: two to four is best. Add Neither when a forced pick would mislead.\n5. Word it neutrally. No leading words, no hint of the answer you want.\n6. Put background in `context`, one line, only when a head needs it.\n7. Pick the type that fits: `single_choice` to pick, `pairwise` for two, `ranking` for order, `scale_1_5` for strength, `free_text` (Tier 2) for why.\n8. Match heads and tier to the stakes: 50 at Tier 1 for a quick read, 100 or more or Tier 2 for a decision; target the countries and language of the real audience.\n\n## How to ask\n\n1. Call `estimate` and, when a person is present, show them the price and time together: \"50 answers, about 10 minutes, $12.70.\"\n2. Call `ask` with a fresh UUID as `idempotency_key`. Reuse that key if you retry.\n3. Wait on the task, or call `wait_for_results` on older hosts. `get_results` shows it while live.\n\n## Reading results\n\nLead with the winner, the margin in points and the confidence. With 50 heads a margin under 10 points is noise: say so and suggest more heads, not a verdict. Report underfilled as underfilled. Quote the split, not adjectives.\n\n## Worked example\n\n\"Which menu would you order from?\" with two menu photos, `ab_image`, 50 heads, Tier 1. Menu B 68%, Menu A 32%: \"Menu B wins by 36 points. Confidence high.\" Follow up with 20 Tier 2 heads saying why.\n\n## Avoid\n\n- Double questions (\"Is it clear and friendly?\").\n- Yes-or-no questions that lead.\n- Asking for personal data or anything that identifies someone.\n- Re-asking the same question to fish for a different answer.\n\nMore: `references/question-types.md`, `pricing.md`, `tools.md`.\n";
5
5
  /** Every file in the skill bundle, by path relative to skills/50heads. */
@@ -93,7 +93,6 @@ export declare function registryServerJson(): {
93
93
  repository: {
94
94
  url: string;
95
95
  source: string;
96
- subfolder: string;
97
96
  };
98
97
  icons: {
99
98
  src: string;
@@ -23,6 +23,11 @@ export declare function formatPrice(p: {
23
23
  amount: number;
24
24
  currency: string;
25
25
  }, locale?: string): string;
26
+ /**
27
+ * Opening line of the package README. Generated into README.md so the published credit
28
+ * total stays the Tier 1 price from packages/shared (50 × per-answer credits).
29
+ */
30
+ export declare function readmeLead(): string;
26
31
  /** "about 10 minutes", "about 2 hours". */
27
32
  export declare function aboutMinutes(minutes: number): string;
28
33
  /** Cost and time in one sentence, per BRAND.md: "50 answers, about 10 minutes, $12.70." */
@@ -34,6 +34,12 @@ export declare const TargetingInput: z.ZodObject<{
34
34
  }>>>;
35
35
  verified_age: z.ZodOptional<z.ZodBoolean>;
36
36
  }, z.core.$strip>;
37
+ /** Ask-schema copy for `tier`. Built from `packages/shared` so it cannot drift from the price charged. */
38
+ export declare function tierFieldDescription(): string;
39
+ export declare const AudienceInput: z.ZodObject<{
40
+ id: z.ZodString;
41
+ min_grade: z.ZodOptional<z.ZodNumber>;
42
+ }, z.core.$strip>;
37
43
  export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
38
44
  options: z.ZodArray<z.ZodObject<{
39
45
  label: z.ZodString;
@@ -82,6 +88,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
82
88
  }>>>;
83
89
  verified_age: z.ZodOptional<z.ZodBoolean>;
84
90
  }, z.core.$strip>>;
91
+ audience: z.ZodOptional<z.ZodObject<{
92
+ id: z.ZodString;
93
+ min_grade: z.ZodOptional<z.ZodNumber>;
94
+ }, z.core.$strip>>;
85
95
  type: z.ZodLiteral<"single_choice">;
86
96
  }, z.core.$strip>, z.ZodObject<{
87
97
  options: z.ZodArray<z.ZodObject<{
@@ -130,6 +140,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
130
140
  }>>>;
131
141
  verified_age: z.ZodOptional<z.ZodBoolean>;
132
142
  }, z.core.$strip>>;
143
+ audience: z.ZodOptional<z.ZodObject<{
144
+ id: z.ZodString;
145
+ min_grade: z.ZodOptional<z.ZodNumber>;
146
+ }, z.core.$strip>>;
133
147
  type: z.ZodLiteral<"multi_choice">;
134
148
  }, z.core.$strip>, z.ZodObject<{
135
149
  options: z.ZodArray<z.ZodObject<{
@@ -179,6 +193,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
179
193
  }>>>;
180
194
  verified_age: z.ZodOptional<z.ZodBoolean>;
181
195
  }, z.core.$strip>>;
196
+ audience: z.ZodOptional<z.ZodObject<{
197
+ id: z.ZodString;
198
+ min_grade: z.ZodOptional<z.ZodNumber>;
199
+ }, z.core.$strip>>;
182
200
  type: z.ZodLiteral<"ab_image">;
183
201
  }, z.core.$strip>, z.ZodObject<{
184
202
  options: z.ZodArray<z.ZodObject<{
@@ -228,6 +246,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
228
246
  }>>>;
229
247
  verified_age: z.ZodOptional<z.ZodBoolean>;
230
248
  }, z.core.$strip>>;
249
+ audience: z.ZodOptional<z.ZodObject<{
250
+ id: z.ZodString;
251
+ min_grade: z.ZodOptional<z.ZodNumber>;
252
+ }, z.core.$strip>>;
231
253
  type: z.ZodLiteral<"pairwise">;
232
254
  }, z.core.$strip>, z.ZodObject<{
233
255
  reason: z.ZodOptional<z.ZodEnum<{
@@ -272,6 +294,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
272
294
  }>>>;
273
295
  verified_age: z.ZodOptional<z.ZodBoolean>;
274
296
  }, z.core.$strip>>;
297
+ audience: z.ZodOptional<z.ZodObject<{
298
+ id: z.ZodString;
299
+ min_grade: z.ZodOptional<z.ZodNumber>;
300
+ }, z.core.$strip>>;
275
301
  type: z.ZodLiteral<"scale_1_5">;
276
302
  }, z.core.$strip>, z.ZodObject<{
277
303
  options: z.ZodArray<z.ZodObject<{
@@ -320,6 +346,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
320
346
  }>>>;
321
347
  verified_age: z.ZodOptional<z.ZodBoolean>;
322
348
  }, z.core.$strip>>;
349
+ audience: z.ZodOptional<z.ZodObject<{
350
+ id: z.ZodString;
351
+ min_grade: z.ZodOptional<z.ZodNumber>;
352
+ }, z.core.$strip>>;
323
353
  type: z.ZodLiteral<"ranking">;
324
354
  }, z.core.$strip>, z.ZodObject<{
325
355
  reason: z.ZodOptional<z.ZodEnum<{
@@ -364,6 +394,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
364
394
  }>>>;
365
395
  verified_age: z.ZodOptional<z.ZodBoolean>;
366
396
  }, z.core.$strip>>;
397
+ audience: z.ZodOptional<z.ZodObject<{
398
+ id: z.ZodString;
399
+ min_grade: z.ZodOptional<z.ZodNumber>;
400
+ }, z.core.$strip>>;
367
401
  type: z.ZodLiteral<"yes_mostly_no">;
368
402
  }, z.core.$strip>, z.ZodObject<{
369
403
  tier: z.ZodOptional<z.ZodNumber>;
@@ -403,6 +437,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
403
437
  }>>>;
404
438
  verified_age: z.ZodOptional<z.ZodBoolean>;
405
439
  }, z.core.$strip>>;
440
+ audience: z.ZodOptional<z.ZodObject<{
441
+ id: z.ZodString;
442
+ min_grade: z.ZodOptional<z.ZodNumber>;
443
+ }, z.core.$strip>>;
406
444
  type: z.ZodLiteral<"free_text">;
407
445
  }, z.core.$strip>, z.ZodObject<{
408
446
  stimulus: z.ZodObject<{
@@ -442,6 +480,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
442
480
  }>>>;
443
481
  verified_age: z.ZodOptional<z.ZodBoolean>;
444
482
  }, z.core.$strip>>;
483
+ audience: z.ZodOptional<z.ZodObject<{
484
+ id: z.ZodString;
485
+ min_grade: z.ZodOptional<z.ZodNumber>;
486
+ }, z.core.$strip>>;
445
487
  type: z.ZodLiteral<"click_test">;
446
488
  }, z.core.$strip>, z.ZodObject<{
447
489
  text: z.ZodString;
@@ -481,6 +523,10 @@ export declare const QuestionInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
481
523
  }>>>;
482
524
  verified_age: z.ZodOptional<z.ZodBoolean>;
483
525
  }, z.core.$strip>>;
526
+ audience: z.ZodOptional<z.ZodObject<{
527
+ id: z.ZodString;
528
+ min_grade: z.ZodOptional<z.ZodNumber>;
529
+ }, z.core.$strip>>;
484
530
  type: z.ZodLiteral<"reaction">;
485
531
  }, z.core.$strip>], "type">;
486
532
  export type QuestionInput = z.infer<typeof QuestionInput>;
@@ -573,6 +619,10 @@ export declare const EstimateInput: z.ZodObject<{
573
619
  }>>>;
574
620
  verified_age: z.ZodOptional<z.ZodBoolean>;
575
621
  }, z.core.$strip>>;
622
+ audience: z.ZodOptional<z.ZodObject<{
623
+ id: z.ZodString;
624
+ min_grade: z.ZodOptional<z.ZodNumber>;
625
+ }, z.core.$strip>>;
576
626
  type: z.ZodLiteral<"single_choice">;
577
627
  }, z.core.$strip>, z.ZodObject<{
578
628
  options: z.ZodArray<z.ZodObject<{
@@ -621,6 +671,10 @@ export declare const EstimateInput: z.ZodObject<{
621
671
  }>>>;
622
672
  verified_age: z.ZodOptional<z.ZodBoolean>;
623
673
  }, z.core.$strip>>;
674
+ audience: z.ZodOptional<z.ZodObject<{
675
+ id: z.ZodString;
676
+ min_grade: z.ZodOptional<z.ZodNumber>;
677
+ }, z.core.$strip>>;
624
678
  type: z.ZodLiteral<"multi_choice">;
625
679
  }, z.core.$strip>, z.ZodObject<{
626
680
  options: z.ZodArray<z.ZodObject<{
@@ -670,6 +724,10 @@ export declare const EstimateInput: z.ZodObject<{
670
724
  }>>>;
671
725
  verified_age: z.ZodOptional<z.ZodBoolean>;
672
726
  }, z.core.$strip>>;
727
+ audience: z.ZodOptional<z.ZodObject<{
728
+ id: z.ZodString;
729
+ min_grade: z.ZodOptional<z.ZodNumber>;
730
+ }, z.core.$strip>>;
673
731
  type: z.ZodLiteral<"ab_image">;
674
732
  }, z.core.$strip>, z.ZodObject<{
675
733
  options: z.ZodArray<z.ZodObject<{
@@ -719,6 +777,10 @@ export declare const EstimateInput: z.ZodObject<{
719
777
  }>>>;
720
778
  verified_age: z.ZodOptional<z.ZodBoolean>;
721
779
  }, z.core.$strip>>;
780
+ audience: z.ZodOptional<z.ZodObject<{
781
+ id: z.ZodString;
782
+ min_grade: z.ZodOptional<z.ZodNumber>;
783
+ }, z.core.$strip>>;
722
784
  type: z.ZodLiteral<"pairwise">;
723
785
  }, z.core.$strip>, z.ZodObject<{
724
786
  reason: z.ZodOptional<z.ZodEnum<{
@@ -763,6 +825,10 @@ export declare const EstimateInput: z.ZodObject<{
763
825
  }>>>;
764
826
  verified_age: z.ZodOptional<z.ZodBoolean>;
765
827
  }, z.core.$strip>>;
828
+ audience: z.ZodOptional<z.ZodObject<{
829
+ id: z.ZodString;
830
+ min_grade: z.ZodOptional<z.ZodNumber>;
831
+ }, z.core.$strip>>;
766
832
  type: z.ZodLiteral<"scale_1_5">;
767
833
  }, z.core.$strip>, z.ZodObject<{
768
834
  options: z.ZodArray<z.ZodObject<{
@@ -811,6 +877,10 @@ export declare const EstimateInput: z.ZodObject<{
811
877
  }>>>;
812
878
  verified_age: z.ZodOptional<z.ZodBoolean>;
813
879
  }, z.core.$strip>>;
880
+ audience: z.ZodOptional<z.ZodObject<{
881
+ id: z.ZodString;
882
+ min_grade: z.ZodOptional<z.ZodNumber>;
883
+ }, z.core.$strip>>;
814
884
  type: z.ZodLiteral<"ranking">;
815
885
  }, z.core.$strip>, z.ZodObject<{
816
886
  reason: z.ZodOptional<z.ZodEnum<{
@@ -855,6 +925,10 @@ export declare const EstimateInput: z.ZodObject<{
855
925
  }>>>;
856
926
  verified_age: z.ZodOptional<z.ZodBoolean>;
857
927
  }, z.core.$strip>>;
928
+ audience: z.ZodOptional<z.ZodObject<{
929
+ id: z.ZodString;
930
+ min_grade: z.ZodOptional<z.ZodNumber>;
931
+ }, z.core.$strip>>;
858
932
  type: z.ZodLiteral<"yes_mostly_no">;
859
933
  }, z.core.$strip>, z.ZodObject<{
860
934
  tier: z.ZodOptional<z.ZodNumber>;
@@ -894,6 +968,10 @@ export declare const EstimateInput: z.ZodObject<{
894
968
  }>>>;
895
969
  verified_age: z.ZodOptional<z.ZodBoolean>;
896
970
  }, z.core.$strip>>;
971
+ audience: z.ZodOptional<z.ZodObject<{
972
+ id: z.ZodString;
973
+ min_grade: z.ZodOptional<z.ZodNumber>;
974
+ }, z.core.$strip>>;
897
975
  type: z.ZodLiteral<"free_text">;
898
976
  }, z.core.$strip>, z.ZodObject<{
899
977
  stimulus: z.ZodObject<{
@@ -933,6 +1011,10 @@ export declare const EstimateInput: z.ZodObject<{
933
1011
  }>>>;
934
1012
  verified_age: z.ZodOptional<z.ZodBoolean>;
935
1013
  }, z.core.$strip>>;
1014
+ audience: z.ZodOptional<z.ZodObject<{
1015
+ id: z.ZodString;
1016
+ min_grade: z.ZodOptional<z.ZodNumber>;
1017
+ }, z.core.$strip>>;
936
1018
  type: z.ZodLiteral<"click_test">;
937
1019
  }, z.core.$strip>, z.ZodObject<{
938
1020
  text: z.ZodString;
@@ -972,6 +1054,10 @@ export declare const EstimateInput: z.ZodObject<{
972
1054
  }>>>;
973
1055
  verified_age: z.ZodOptional<z.ZodBoolean>;
974
1056
  }, z.core.$strip>>;
1057
+ audience: z.ZodOptional<z.ZodObject<{
1058
+ id: z.ZodString;
1059
+ min_grade: z.ZodOptional<z.ZodNumber>;
1060
+ }, z.core.$strip>>;
975
1061
  type: z.ZodLiteral<"reaction">;
976
1062
  }, z.core.$strip>], "type">;
977
1063
  currency: z.ZodOptional<z.ZodEnum<{
@@ -1030,6 +1116,10 @@ export declare const AskInput: z.ZodObject<{
1030
1116
  }>>>;
1031
1117
  verified_age: z.ZodOptional<z.ZodBoolean>;
1032
1118
  }, z.core.$strip>>;
1119
+ audience: z.ZodOptional<z.ZodObject<{
1120
+ id: z.ZodString;
1121
+ min_grade: z.ZodOptional<z.ZodNumber>;
1122
+ }, z.core.$strip>>;
1033
1123
  type: z.ZodLiteral<"single_choice">;
1034
1124
  }, z.core.$strip>, z.ZodObject<{
1035
1125
  options: z.ZodArray<z.ZodObject<{
@@ -1078,6 +1168,10 @@ export declare const AskInput: z.ZodObject<{
1078
1168
  }>>>;
1079
1169
  verified_age: z.ZodOptional<z.ZodBoolean>;
1080
1170
  }, z.core.$strip>>;
1171
+ audience: z.ZodOptional<z.ZodObject<{
1172
+ id: z.ZodString;
1173
+ min_grade: z.ZodOptional<z.ZodNumber>;
1174
+ }, z.core.$strip>>;
1081
1175
  type: z.ZodLiteral<"multi_choice">;
1082
1176
  }, z.core.$strip>, z.ZodObject<{
1083
1177
  options: z.ZodArray<z.ZodObject<{
@@ -1127,6 +1221,10 @@ export declare const AskInput: z.ZodObject<{
1127
1221
  }>>>;
1128
1222
  verified_age: z.ZodOptional<z.ZodBoolean>;
1129
1223
  }, z.core.$strip>>;
1224
+ audience: z.ZodOptional<z.ZodObject<{
1225
+ id: z.ZodString;
1226
+ min_grade: z.ZodOptional<z.ZodNumber>;
1227
+ }, z.core.$strip>>;
1130
1228
  type: z.ZodLiteral<"ab_image">;
1131
1229
  }, z.core.$strip>, z.ZodObject<{
1132
1230
  options: z.ZodArray<z.ZodObject<{
@@ -1176,6 +1274,10 @@ export declare const AskInput: z.ZodObject<{
1176
1274
  }>>>;
1177
1275
  verified_age: z.ZodOptional<z.ZodBoolean>;
1178
1276
  }, z.core.$strip>>;
1277
+ audience: z.ZodOptional<z.ZodObject<{
1278
+ id: z.ZodString;
1279
+ min_grade: z.ZodOptional<z.ZodNumber>;
1280
+ }, z.core.$strip>>;
1179
1281
  type: z.ZodLiteral<"pairwise">;
1180
1282
  }, z.core.$strip>, z.ZodObject<{
1181
1283
  reason: z.ZodOptional<z.ZodEnum<{
@@ -1220,6 +1322,10 @@ export declare const AskInput: z.ZodObject<{
1220
1322
  }>>>;
1221
1323
  verified_age: z.ZodOptional<z.ZodBoolean>;
1222
1324
  }, z.core.$strip>>;
1325
+ audience: z.ZodOptional<z.ZodObject<{
1326
+ id: z.ZodString;
1327
+ min_grade: z.ZodOptional<z.ZodNumber>;
1328
+ }, z.core.$strip>>;
1223
1329
  type: z.ZodLiteral<"scale_1_5">;
1224
1330
  }, z.core.$strip>, z.ZodObject<{
1225
1331
  options: z.ZodArray<z.ZodObject<{
@@ -1268,6 +1374,10 @@ export declare const AskInput: z.ZodObject<{
1268
1374
  }>>>;
1269
1375
  verified_age: z.ZodOptional<z.ZodBoolean>;
1270
1376
  }, z.core.$strip>>;
1377
+ audience: z.ZodOptional<z.ZodObject<{
1378
+ id: z.ZodString;
1379
+ min_grade: z.ZodOptional<z.ZodNumber>;
1380
+ }, z.core.$strip>>;
1271
1381
  type: z.ZodLiteral<"ranking">;
1272
1382
  }, z.core.$strip>, z.ZodObject<{
1273
1383
  reason: z.ZodOptional<z.ZodEnum<{
@@ -1312,6 +1422,10 @@ export declare const AskInput: z.ZodObject<{
1312
1422
  }>>>;
1313
1423
  verified_age: z.ZodOptional<z.ZodBoolean>;
1314
1424
  }, z.core.$strip>>;
1425
+ audience: z.ZodOptional<z.ZodObject<{
1426
+ id: z.ZodString;
1427
+ min_grade: z.ZodOptional<z.ZodNumber>;
1428
+ }, z.core.$strip>>;
1315
1429
  type: z.ZodLiteral<"yes_mostly_no">;
1316
1430
  }, z.core.$strip>, z.ZodObject<{
1317
1431
  tier: z.ZodOptional<z.ZodNumber>;
@@ -1351,6 +1465,10 @@ export declare const AskInput: z.ZodObject<{
1351
1465
  }>>>;
1352
1466
  verified_age: z.ZodOptional<z.ZodBoolean>;
1353
1467
  }, z.core.$strip>>;
1468
+ audience: z.ZodOptional<z.ZodObject<{
1469
+ id: z.ZodString;
1470
+ min_grade: z.ZodOptional<z.ZodNumber>;
1471
+ }, z.core.$strip>>;
1354
1472
  type: z.ZodLiteral<"free_text">;
1355
1473
  }, z.core.$strip>, z.ZodObject<{
1356
1474
  stimulus: z.ZodObject<{
@@ -1390,6 +1508,10 @@ export declare const AskInput: z.ZodObject<{
1390
1508
  }>>>;
1391
1509
  verified_age: z.ZodOptional<z.ZodBoolean>;
1392
1510
  }, z.core.$strip>>;
1511
+ audience: z.ZodOptional<z.ZodObject<{
1512
+ id: z.ZodString;
1513
+ min_grade: z.ZodOptional<z.ZodNumber>;
1514
+ }, z.core.$strip>>;
1393
1515
  type: z.ZodLiteral<"click_test">;
1394
1516
  }, z.core.$strip>, z.ZodObject<{
1395
1517
  text: z.ZodString;
@@ -1429,6 +1551,10 @@ export declare const AskInput: z.ZodObject<{
1429
1551
  }>>>;
1430
1552
  verified_age: z.ZodOptional<z.ZodBoolean>;
1431
1553
  }, z.core.$strip>>;
1554
+ audience: z.ZodOptional<z.ZodObject<{
1555
+ id: z.ZodString;
1556
+ min_grade: z.ZodOptional<z.ZodNumber>;
1557
+ }, z.core.$strip>>;
1432
1558
  type: z.ZodLiteral<"reaction">;
1433
1559
  }, z.core.$strip>], "type">;
1434
1560
  idempotency_key: z.ZodUUID;
@@ -1942,6 +2068,27 @@ export declare const BuildAskLinkOutput: z.ZodObject<{
1942
2068
  }, z.core.$strip>>;
1943
2069
  notes: z.ZodArray<z.ZodString>;
1944
2070
  }, z.core.$strip>;
2071
+ export declare const ListAudiencesInput: z.ZodObject<{
2072
+ q: z.ZodOptional<z.ZodString>;
2073
+ country: z.ZodOptional<z.ZodString>;
2074
+ }, z.core.$strip>;
2075
+ export declare const ListAudiencesOutput: z.ZodObject<{
2076
+ audiences: z.ZodArray<z.ZodObject<{
2077
+ id: z.ZodString;
2078
+ slug: z.ZodString;
2079
+ name: z.ZodString;
2080
+ summary: z.ZodString;
2081
+ countries: z.ZodArray<z.ZodString>;
2082
+ pool_band: z.ZodString;
2083
+ credits_per_answer: z.ZodObject<{
2084
+ member: z.ZodNumber;
2085
+ verified: z.ZodNumber;
2086
+ trusted: z.ZodNumber;
2087
+ }, z.core.$strip>;
2088
+ page_url: z.ZodString;
2089
+ }, z.core.$strip>>;
2090
+ rules: z.ZodArray<z.ZodString>;
2091
+ }, z.core.$strip>;
1945
2092
  export declare const ListTargetingInput: z.ZodObject<{
1946
2093
  language: z.ZodOptional<z.ZodString>;
1947
2094
  }, z.core.$strip>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@50heads/mcp",
3
- "version": "2026.925.2",
3
+ "version": "2026.1006.1",
4
4
  "mcpName": "com.50heads/mcp",
5
5
  "description": "50heads MCP: ask fifty verified real people from Claude, ChatGPT, Cursor or your own agent.",
6
6
  "keywords": [
@@ -13,8 +13,7 @@
13
13
  "homepage": "https://50heads.com/docs/mcp",
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "https://github.com/50heads/mcp.git",
17
- "directory": "packages/mcp"
16
+ "url": "https://github.com/50heads/mcp.git"
18
17
  },
19
18
  "bugs": "https://github.com/50heads/mcp/issues",
20
19
  "license": "MIT",
@@ -54,14 +53,14 @@
54
53
  "zod": "^4.6.5"
55
54
  },
56
55
  "devDependencies": {
57
- "@modelcontextprotocol/client": "2.0.0",
56
+ "@modelcontextprotocol/client": "2.2.0",
58
57
  "@types/node": "^22.18.0",
59
58
  "esbuild": "^0.28.2",
60
59
  "typescript": "^5.9.3",
61
- "@50heads/brand": "0.0.0",
60
+ "@50heads/shared": "0.0.0",
62
61
  "@50heads/login": "0.0.0",
63
- "@50heads/tsconfig": "0.0.0",
64
- "@50heads/shared": "0.0.0"
62
+ "@50heads/brand": "0.0.0",
63
+ "@50heads/tsconfig": "0.0.0"
65
64
  },
66
65
  "scripts": {
67
66
  "generate": "node scripts/generate.ts",