@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.
- package/CHANGELOG.md +9 -2
- package/README.md +7 -4
- package/dist/cli.js +1873 -1018
- package/dist/index.js +1874 -1019
- package/dist/types/cli/stdio.d.ts +119 -2
- package/dist/types/constants.d.ts +3 -2
- package/dist/types/generated/skill.d.ts +1 -1
- package/dist/types/manifest.d.ts +0 -1
- package/dist/types/pricing.d.ts +5 -0
- package/dist/types/schemas.d.ts +147 -0
- package/package.json +6 -7
- package/server.json +4 -5
- package/skills/50heads/SKILL.md +1 -1
- package/skills/50heads/references/pricing.md +1 -1
- package/skills/50heads/references/tools.md +3 -2
- package/skills/50heads/scripts/estimate.py +31 -3
- package/skills/50heads.zip +0 -0
|
@@ -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:
|
|
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.
|
|
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.
|
|
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.
|
|
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. */
|
package/dist/types/manifest.d.ts
CHANGED
package/dist/types/pricing.d.ts
CHANGED
|
@@ -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." */
|
package/dist/types/schemas.d.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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/
|
|
60
|
+
"@50heads/shared": "0.0.0",
|
|
62
61
|
"@50heads/login": "0.0.0",
|
|
63
|
-
"@50heads/
|
|
64
|
-
"@50heads/
|
|
62
|
+
"@50heads/brand": "0.0.0",
|
|
63
|
+
"@50heads/tsconfig": "0.0.0"
|
|
65
64
|
},
|
|
66
65
|
"scripts": {
|
|
67
66
|
"generate": "node scripts/generate.ts",
|