rentahuman-mcp 3.2.1 → 3.3.0
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/README.md +28 -0
- package/dist/serve.js +20 -2
- package/dist/types/index.d.ts +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -211,9 +211,11 @@ worker (`escrow_recipient_mismatch`).
|
|
|
211
211
|
To target every eligible worker in one country, pass `location` with the ISO
|
|
212
212
|
country code and `isRemoteAllowed: false`, omitting `city` and `state`. The
|
|
213
213
|
same shape works with `update_bounty`. Platform-blocked countries are rejected.
|
|
214
|
+
To open one bounty to several countries, pass `supportedCountries` instead.
|
|
214
215
|
|
|
215
216
|
```text
|
|
216
217
|
location: { country: "US", isRemoteAllowed: false }
|
|
218
|
+
supportedCountries: ["US", "CA", "GB", "NZ", "AU"]
|
|
217
219
|
```
|
|
218
220
|
|
|
219
221
|
For ordinary accepted one-shot bounties, the worker marks the task complete by
|
|
@@ -307,6 +309,32 @@ Only workers whose profile country matches can apply or receive automatic
|
|
|
307
309
|
outreach. The country gate still applies when remote work is allowed. Include a
|
|
308
310
|
`city` for city-level targeting instead.
|
|
309
311
|
|
|
312
|
+
To recruit across several countries, pass `supportedCountries` with the ISO
|
|
313
|
+
codes (country names are recognized too). Omit `location.country`, or keep it
|
|
314
|
+
and make sure it appears in the list:
|
|
315
|
+
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"location": { "isRemoteAllowed": true },
|
|
319
|
+
"supportedCountries": ["US", "CA", "GB", "NZ", "AU"],
|
|
320
|
+
"identityRequired": true
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
The list is normalized to uppercase ISO codes and deduplicated; blocked or
|
|
325
|
+
unrecognized countries are rejected with a `400`. With `identityRequired`, the
|
|
326
|
+
list is enforced against the applicant's verified document country. Use
|
|
327
|
+
`isRemoteAllowed: true`: an on-site bounty (`isRemoteAllowed: false`) with a
|
|
328
|
+
location country is gated by that country alone and accepts no other list. On
|
|
329
|
+
`update_bounty`, send the full new list to change it. Omitting it leaves an
|
|
330
|
+
explicit multi-country list in place, so editing `location` alone never drops
|
|
331
|
+
it; legacy bounties that only mirror a country-only `location` keep deriving
|
|
332
|
+
that single country from `location`. An empty array is stored as an explicit
|
|
333
|
+
empty list; it never lifts a country-only or on-site country restriction
|
|
334
|
+
(remove `location.country` first), and a remote city location with a country
|
|
335
|
+
stays unrestricted as before. `aiManaged` bounties do not accept
|
|
336
|
+
`supportedCountries`.
|
|
337
|
+
|
|
310
338
|
#### Completion deadline (auto-reassign)
|
|
311
339
|
|
|
312
340
|
The bounty-level `deadline` is the application cutoff. At or after that time,
|
package/dist/serve.js
CHANGED
|
@@ -1326,6 +1326,7 @@ var agentCheckoutTools = [
|
|
|
1326
1326
|
var BOUNTY_PRICE_TYPES = ["fixed", "hourly"];
|
|
1327
1327
|
var BOUNTY_MIN_PRICE_USD = 3;
|
|
1328
1328
|
var MAX_EXCLUDED_PARTICIPANT_SOURCE_BOUNTIES = 1e3;
|
|
1329
|
+
var MAX_BOUNTY_SUPPORTED_COUNTRIES = 250;
|
|
1329
1330
|
var HUMANIZATION_FORMATS = ["text"];
|
|
1330
1331
|
var HUMANIZATION_TRANSFORMATIONS = [
|
|
1331
1332
|
"paraphrase",
|
|
@@ -1480,6 +1481,11 @@ var BountyLocationRequest = Schema5.Struct({
|
|
|
1480
1481
|
isRemoteAllowed: Schema5.optional(Schema5.Boolean)
|
|
1481
1482
|
});
|
|
1482
1483
|
var BOUNTY_LOCATION_DESCRIPTION = "Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally state/country) for city-level targeting. Platform-blocked countries are rejected.";
|
|
1484
|
+
var BountySupportedCountriesRequest = Schema5.Array(
|
|
1485
|
+
Schema5.String.pipe(Schema5.minLength(1), Schema5.maxLength(100))
|
|
1486
|
+
).pipe(Schema5.maxItems(MAX_BOUNTY_SUPPORTED_COUNTRIES));
|
|
1487
|
+
var BOUNTY_SUPPORTED_COUNTRIES_CREATE_DESCRIPTION = 'Countries whose workers may see and apply, as ISO country codes (country names are also recognized), e.g. ["US", "CA", "GB", "NZ", "AU"]. Omit it to keep the location-derived policy: a country-only location restricts the bounty to that country, an on-site city location keeps its existing country gate, and other locations stay unrestricted. When location.country is set it must appear in this list, and on-site bounties (isRemoteAllowed false) with a location country accept only that one country; use isRemoteAllowed true for a remote multi-country bounty. Platform-blocked countries and unrecognized values are rejected. With identityRequired, the list is enforced against the verified document country. Not accepted on aiManaged bounties.';
|
|
1488
|
+
var BOUNTY_SUPPORTED_COUNTRIES_UPDATE_DESCRIPTION = 'Replace the eligible-country list with the full new list of ISO country codes (country names are also recognized), e.g. ["US", "CA", "GB", "NZ", "AU"]. Omitting it leaves an explicit multi-country list in place, so a location-only edit never drops it; legacy bounties that only mirror a country-only location keep deriving that single country from location. On-site bounties (isRemoteAllowed false) with a location country accept only that one country. An empty array is stored as an explicit empty list; it never lifts a country-only or on-site country restriction (remove location.country first), while a remote city location with a country stays unrestricted as before. When location.country is set it must appear in the list. Platform-blocked countries and unrecognized values are rejected.';
|
|
1483
1489
|
var LIFECYCLE_MESSAGES_DESCRIPTION = "Auto-sent to the doer in the bounty conversation on lifecycle transitions. Supports {{name}}, {{bountyTitle}}, {{deadline}}, {{reason}} interpolation. Accepted/submission templates are only ever delivered to accepted applicants.";
|
|
1484
1490
|
var LifecycleMessageTemplateSchema = Schema5.String.pipe(
|
|
1485
1491
|
Schema5.maxLength(BOUNTY_LIFECYCLE_TEMPLATE_MAX_LENGTH)
|
|
@@ -1627,6 +1633,11 @@ var CreateBountyRequest = Schema5.Struct({
|
|
|
1627
1633
|
location: Schema5.optional(BountyLocationRequest).annotations({
|
|
1628
1634
|
description: BOUNTY_LOCATION_DESCRIPTION
|
|
1629
1635
|
}),
|
|
1636
|
+
supportedCountries: Schema5.optional(
|
|
1637
|
+
BountySupportedCountriesRequest
|
|
1638
|
+
).annotations({
|
|
1639
|
+
description: BOUNTY_SUPPORTED_COUNTRIES_CREATE_DESCRIPTION
|
|
1640
|
+
}),
|
|
1630
1641
|
deadline: Schema5.optional(Schema5.String).annotations({
|
|
1631
1642
|
description: "Application cutoff (ISO 8601 format). At or after this time, the listing is removed from discovery and no new applications or direct uploads are accepted. Use completionWindowHours for a post-acceptance completion deadline."
|
|
1632
1643
|
}),
|
|
@@ -1892,6 +1903,11 @@ var UpdateBountyRequest = Schema5.Struct({
|
|
|
1892
1903
|
location: Schema5.optional(BountyLocationRequest).annotations({
|
|
1893
1904
|
description: BOUNTY_LOCATION_DESCRIPTION
|
|
1894
1905
|
}),
|
|
1906
|
+
supportedCountries: Schema5.optional(
|
|
1907
|
+
BountySupportedCountriesRequest
|
|
1908
|
+
).annotations({
|
|
1909
|
+
description: BOUNTY_SUPPORTED_COUNTRIES_UPDATE_DESCRIPTION
|
|
1910
|
+
}),
|
|
1895
1911
|
status: Schema5.optional(
|
|
1896
1912
|
Schema5.Literal("open", "in_review", "paused", "closed")
|
|
1897
1913
|
).annotations({
|
|
@@ -2383,7 +2399,7 @@ var CancelBountyRequest = BountyCancellationFeedbackRequest.pipe(
|
|
|
2383
2399
|
);
|
|
2384
2400
|
var createBountySpec = {
|
|
2385
2401
|
name: "create_bounty",
|
|
2386
|
-
description: `Create a one-shot task bounty for humans to apply to. Dry-run preview.fundingTotal is the total funding requirement before any existing wallet balance is applied; show that estimate to the operator before posting. Live pending_deposit responses include checkout_total, the exact hosted charge after wallet balance is applied, next to deposit_url. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. Standard application bounties support application detail items via applicationDetails, including text questions, optional or required acknowledgment checkboxes, one-file uploads (allowedFileTypes: image, docx, pdf, txt, video, audio), and one required live_video field whose label is the script applicants record with the in-browser camera. For appearance-based bounties where the worker appears on camera or their presence is part of the deliverable (sign holding, UGC, sponsored posts, on-camera video, promo/GTM appearances), always include one required live_video field with a label asking the applicant to explain in two sentences why they are a good fit. Set liveCaptureRequirement to photo or video when accepted workers must capture new camera evidence after acceptance; neither camera-only workflow is cryptographic liveness verification. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information. Blank rows are ignored; uploads are capped at 3 fields, acknowledgments at 5 fields, and live video at 1 field. Direct-review photo, video, or document collection bounties use submissionMode and matching upload settings instead of applicationDetails. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Set completionWindowHours (any whole number of hours from 1 to 720, e.g. 36) to give confirmed workers a completion deadline: overdue seats are automatically released and reopened for other applicants (auto-reassign), workers can request extensions, and you approve/deny/grant them per worker. Pass optional \`idempotencyKey\` to make this safe to retry (a replayed key returns the original result instead of duplicating). Applicants are auto-reviewed by default (autoAccept, default true): deterministic checks always run and an AI review runs only for free-text screening answers \u2014 qualified applicants are accepted, clear mismatches rejected with a reason, uncertain cases left pending for manual review; pass autoAccept: false to review and accept every application yourself; on micCheckRequired bounties, set autoAcceptMinMicScore (1-5) to make the mic score a hard cutoff: applications below it are auto-rejected, at/above proceed toward acceptance, and unscored recordings stay pending. When omitted, the platform default 3.0 applies and lower scores only stay pending for manual review. To keep previous participants out, pass excludedParticipantSourceBountyIds with up to ${MAX_EXCLUDED_PARTICIPANT_SOURCE_BOUNTIES} ids of your OWN earlier bounties: any worker who was ever accepted on one of them cannot see or apply to the new bounty, and you can change the list later with update_bounty. AI-managed, QA, and taste run bounties, and never-funded drafts are rejected as sources. BETA: pass aiManaged: true to have the platform fully manage the bounty \u2014 automated recruiting, vetting, submission review, payment release, and a final report. Fixed price USD only, 1-50 spots. Poll the bounty's managed run or subscribe to run.report_ready for the finished work.`,
|
|
2402
|
+
description: `Create a one-shot task bounty for humans to apply to. Dry-run preview.fundingTotal is the total funding requirement before any existing wallet balance is applied; show that estimate to the operator before posting. Live pending_deposit responses include checkout_total, the exact hosted charge after wallet balance is applied, next to deposit_url. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. To open one bounty to several countries, pass supportedCountries with the ISO codes (e.g. ["US", "CA", "GB", "NZ", "AU"]); when location.country is set it must be in that list, on-site bounties (isRemoteAllowed=false) accept only their location country, and with identityRequired the list is enforced against the verified document country. Standard application bounties support application detail items via applicationDetails, including text questions, optional or required acknowledgment checkboxes, one-file uploads (allowedFileTypes: image, docx, pdf, txt, video, audio), and one required live_video field whose label is the script applicants record with the in-browser camera. For appearance-based bounties where the worker appears on camera or their presence is part of the deliverable (sign holding, UGC, sponsored posts, on-camera video, promo/GTM appearances), always include one required live_video field with a label asking the applicant to explain in two sentences why they are a good fit. Set liveCaptureRequirement to photo or video when accepted workers must capture new camera evidence after acceptance; neither camera-only workflow is cryptographic liveness verification. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information. Blank rows are ignored; uploads are capped at 3 fields, acknowledgments at 5 fields, and live video at 1 field. Direct-review photo, video, or document collection bounties use submissionMode and matching upload settings instead of applicationDetails. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Set completionWindowHours (any whole number of hours from 1 to 720, e.g. 36) to give confirmed workers a completion deadline: overdue seats are automatically released and reopened for other applicants (auto-reassign), workers can request extensions, and you approve/deny/grant them per worker. Pass optional \`idempotencyKey\` to make this safe to retry (a replayed key returns the original result instead of duplicating). Applicants are auto-reviewed by default (autoAccept, default true): deterministic checks always run and an AI review runs only for free-text screening answers \u2014 qualified applicants are accepted, clear mismatches rejected with a reason, uncertain cases left pending for manual review; pass autoAccept: false to review and accept every application yourself; on micCheckRequired bounties, set autoAcceptMinMicScore (1-5) to make the mic score a hard cutoff: applications below it are auto-rejected, at/above proceed toward acceptance, and unscored recordings stay pending. When omitted, the platform default 3.0 applies and lower scores only stay pending for manual review. To keep previous participants out, pass excludedParticipantSourceBountyIds with up to ${MAX_EXCLUDED_PARTICIPANT_SOURCE_BOUNTIES} ids of your OWN earlier bounties: any worker who was ever accepted on one of them cannot see or apply to the new bounty, and you can change the list later with update_bounty. AI-managed, QA, and taste run bounties, and never-funded drafts are rejected as sources. BETA: pass aiManaged: true to have the platform fully manage the bounty \u2014 automated recruiting, vetting, submission review, payment release, and a final report. Fixed price USD only, 1-50 spots. Poll the bounty's managed run or subscribe to run.report_ready for the finished work.`,
|
|
2387
2403
|
input: CreateBountyRequest
|
|
2388
2404
|
};
|
|
2389
2405
|
var getBountySpec = {
|
|
@@ -2424,7 +2440,7 @@ var decideExtensionSpec = {
|
|
|
2424
2440
|
};
|
|
2425
2441
|
var updateBountySpec = {
|
|
2426
2442
|
name: "update_bounty",
|
|
2427
|
-
description: `Update ordinary one-shot bounty details. You can modify the title, description, price, application-cutoff deadline, location, requiredLinks, applicationDetails, lifecycleMessages, liveCaptureRequirement, reactivate hidden inactive bounties, and more. The deadline stops new applications and direct uploads; completionWindowHours controls post-acceptance completion timing. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. Live capture and required-link requirements can only be changed before applications are received. applicationDetails may be changed after applications are received; existing applications keep their original answers, while future applications use the latest fields. applicationDetails are application detail items for standard application bounties only; blank rows are ignored, uploads are capped at 3 fields, acknowledgments at 5 fields, and camera-only live_video at 1 required field. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Admin-only ongoing bounty settings are intentionally not exposed through MCP. You can also pause/unpause a bounty (status 'paused' stops new applications and outreach, including on a fully staffed bounty; status 'open' resumes it, and the resumed status is derived from its seats: open, partially_filled, or assigned when every seat is still filled), close an unassigned bounty and return its unused funding (status 'closed'), increase seats via spotsAvailable, keep pending applicants on fill via keepApplicantsOnFill, and change the auto-reassign completion deadline via completionWindowHours (any whole number of hours from 1 to 720; null disables; only affects seats confirmed after the edit), and toggle automatic applicant review via autoAccept (applications received while off stay pending; toggling on affects future applications only; ignored on aiManaged bounties) or adjust its mic-quality cutoff via autoAcceptMinMicScore (1-5 \u2014 applications scoring below your configured cutoff are auto-rejected, at/above proceed; null resets to the 3.0 default, below which applications only stay pending). The exclude-previous-participants list can be changed after posting: pass excludedParticipantSourceBountyIds with the full new list of up to ${MAX_EXCLUDED_PARTICIPANT_SOURCE_BOUNTIES} ids of your OWN earlier bounties (an empty array clears it); the same source rules as create_bounty apply, and a bounty can never exclude itself. Use cancel_bounty for cancellation and refund handling. Work completion and payment are system-managed from escrow and payout evidence; status 'completed' and 'paid' cannot be set directly.`,
|
|
2443
|
+
description: `Update ordinary one-shot bounty details. You can modify the title, description, price, application-cutoff deadline, location, requiredLinks, applicationDetails, lifecycleMessages, liveCaptureRequirement, reactivate hidden inactive bounties, and more. The deadline stops new applications and direct uploads; completionWindowHours controls post-acceptance completion timing. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. To change which countries may apply, pass supportedCountries with the full new list of ISO codes; omitting it leaves an explicit multi-country list in place (legacy bounties that only mirror a country-only location keep deriving that country from location), an empty array is stored as an explicit empty list but never lifts a country-only or on-site country restriction, and on-site bounties accept only their location country. Live capture and required-link requirements can only be changed before applications are received. applicationDetails may be changed after applications are received; existing applications keep their original answers, while future applications use the latest fields. applicationDetails are application detail items for standard application bounties only; blank rows are ignored, uploads are capped at 3 fields, acknowledgments at 5 fields, and camera-only live_video at 1 required field. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Admin-only ongoing bounty settings are intentionally not exposed through MCP. You can also pause/unpause a bounty (status 'paused' stops new applications and outreach, including on a fully staffed bounty; status 'open' resumes it, and the resumed status is derived from its seats: open, partially_filled, or assigned when every seat is still filled), close an unassigned bounty and return its unused funding (status 'closed'), increase seats via spotsAvailable, keep pending applicants on fill via keepApplicantsOnFill, and change the auto-reassign completion deadline via completionWindowHours (any whole number of hours from 1 to 720; null disables; only affects seats confirmed after the edit), and toggle automatic applicant review via autoAccept (applications received while off stay pending; toggling on affects future applications only; ignored on aiManaged bounties) or adjust its mic-quality cutoff via autoAcceptMinMicScore (1-5 \u2014 applications scoring below your configured cutoff are auto-rejected, at/above proceed; null resets to the 3.0 default, below which applications only stay pending). The exclude-previous-participants list can be changed after posting: pass excludedParticipantSourceBountyIds with the full new list of up to ${MAX_EXCLUDED_PARTICIPANT_SOURCE_BOUNTIES} ids of your OWN earlier bounties (an empty array clears it); the same source rules as create_bounty apply, and a bounty can never exclude itself. Use cancel_bounty for cancellation and refund handling. Work completion and payment are system-managed from escrow and payout evidence; status 'completed' and 'paid' cannot be set directly.`,
|
|
2428
2444
|
input: UpdateBountyRequest
|
|
2429
2445
|
};
|
|
2430
2446
|
var cancelBountySpec = {
|
|
@@ -3345,6 +3361,7 @@ var handleCreateBounty = (args) => Effect9.gen(function* () {
|
|
|
3345
3361
|
liveCaptureRequirement: params.liveCaptureRequirement || null,
|
|
3346
3362
|
category: params.category || "computer-gigs",
|
|
3347
3363
|
location: params.location || { isRemoteAllowed: true },
|
|
3364
|
+
supportedCountries: params.supportedCountries ?? null,
|
|
3348
3365
|
deadline: params.deadline || null,
|
|
3349
3366
|
estimatedHours: params.estimatedHours,
|
|
3350
3367
|
estimatedDurationUnit: params.estimatedDurationUnit || null,
|
|
@@ -3458,6 +3475,7 @@ var handleCreateBounty = (args) => Effect9.gen(function* () {
|
|
|
3458
3475
|
skillsNeeded: params.skillsNeeded || [],
|
|
3459
3476
|
category: params.category || "computer-gigs",
|
|
3460
3477
|
location: params.location || { isRemoteAllowed: true },
|
|
3478
|
+
...params.supportedCountries !== void 0 ? { supportedCountries: params.supportedCountries } : {},
|
|
3461
3479
|
deadline: params.deadline,
|
|
3462
3480
|
estimatedHours: params.estimatedHours,
|
|
3463
3481
|
priceType: params.priceType,
|
package/dist/types/index.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ declare const CreateBountyRequest: Schema.Struct<{
|
|
|
49
49
|
title: Schema.refine<string, Schema.filter<typeof Schema.String>>;
|
|
50
50
|
description: Schema.refine<string, Schema.filter<typeof Schema.String>>;
|
|
51
51
|
completionCriteria: Schema.refine<string, Schema.filter<typeof Schema.String>>;
|
|
52
|
-
evidenceTypes: Schema.refine<readonly ("
|
|
52
|
+
evidenceTypes: Schema.refine<readonly ("text" | "link" | "photo" | "video")[], Schema.Array$<Schema.Literal<["text", "photo", "video", "link"]>>>;
|
|
53
53
|
evidenceCriteria: Schema.optional<Schema.filter<typeof Schema.String>>;
|
|
54
54
|
liveCaptureRequirement: Schema.optional<Schema.Literal<["photo", "video"]>>;
|
|
55
55
|
requirements: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
|
@@ -61,6 +61,7 @@ declare const CreateBountyRequest: Schema.Struct<{
|
|
|
61
61
|
country: Schema.optional<Schema.filter<typeof Schema.String>>;
|
|
62
62
|
isRemoteAllowed: Schema.optional<typeof Schema.Boolean>;
|
|
63
63
|
}>>;
|
|
64
|
+
supportedCountries: Schema.optional<Schema.filter<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>>;
|
|
64
65
|
deadline: Schema.optional<typeof Schema.String>;
|
|
65
66
|
estimatedHours: Schema.refine<number, Schema.filter<typeof Schema.Number>>;
|
|
66
67
|
priceType: Schema.Literal<["fixed", "hourly"]>;
|
|
@@ -145,6 +146,7 @@ declare const UpdateBountyRequest: Schema.Struct<{
|
|
|
145
146
|
country: Schema.optional<Schema.filter<typeof Schema.String>>;
|
|
146
147
|
isRemoteAllowed: Schema.optional<typeof Schema.Boolean>;
|
|
147
148
|
}>>;
|
|
149
|
+
supportedCountries: Schema.optional<Schema.filter<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>>;
|
|
148
150
|
status: Schema.optional<Schema.Literal<["open", "in_review", "paused", "closed"]>>;
|
|
149
151
|
identityRequired: Schema.optional<typeof Schema.Boolean>;
|
|
150
152
|
excludedParticipantSourceBountyIds: Schema.optional<Schema.filter<Schema.Array$<typeof Schema.String>>>;
|