humanpages 1.2.3 → 1.2.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Human Pages
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Human Pages MCP Server
2
2
 
3
- An MCP (Model Context Protocol) server that enables AI agents to search for and hire humans for real-world tasks via [humanpages.ai](https://humanpages.ai).
3
+ MCP server (+ [OpenClaw SKILL.md](openclaw-skill/humanpages/SKILL.md)) that gives AI agents access to real-world people who listed themselves to be hired by agents. 31 tools including search by skill/location/equipment, job offers, job board listings, in-job messaging, and streaming payments. Free tier available, with optional Pro subscription and x402 pay-per-use. Payments default to crypto (USDC) + other crypto + fiat supported.
4
+
5
+ Visit [humanpages.ai](https://humanpages.ai) to learn more. Available on [ClawHub](https://clawhub.com/skills/humanpages) | [npm](https://www.npmjs.com/package/humanpages).
4
6
 
5
7
  ## Quick Install
6
8
 
@@ -29,6 +31,13 @@ Add to your `claude_desktop_config.json`:
29
31
  }
30
32
  ```
31
33
 
34
+ ### OpenClaw / ClawHub
35
+ ```bash
36
+ clawhub install humanpages
37
+ ```
38
+
39
+ Browse on ClawHub: [clawhub.com/skills/humanpages](https://clawhub.com/skills/humanpages)
40
+
32
41
  ### npm Global Install
33
42
  ```bash
34
43
  npm install -g humanpages
@@ -51,55 +60,56 @@ Then add to your MCP configuration:
51
60
  claude mcp list
52
61
  ```
53
62
 
54
- ## Agent Activation
63
+ ## Agent Registration
55
64
 
56
- After registering, agents start as **PENDING** and must activate before creating jobs or viewing full profiles.
65
+ Agents are auto-activated on **PRO tier** at registration free during launch. No activation ceremony needed. Just register and start using all tools immediately.
57
66
 
58
- ### Activation Flow
67
+ ### Registration Flow
59
68
 
60
69
  ```
61
- register_agent → request_activation_code post on social media → verify_social_activation
62
- — or —
63
- register_agent → get_payment_activation → send payment → verify_payment_activation
70
+ register_agent → ready to go (PRO tier, auto-activated)
64
71
  ```
65
72
 
66
73
  ### Tiers
67
74
 
68
- | Tier | Rate Limit | How to Activate |
69
- |------|-----------|-----------------|
70
- | BASIC | 1 job offer/2 days, 1 profile view/day | Post activation code on social media (free) |
71
- | PRO | 15 jobs/day, 50 profile views/day | On-chain payment ($5 USDC, 60 days) |
75
+ | Tier | Rate Limit | How to Get |
76
+ |------|-----------|------------|
77
+ | PRO | 15 jobs/day, 50 profile views/day | Auto-assigned at registration (free during launch) |
78
+
79
+ ### Optional: Social & Payment Verification (trust badge)
72
80
 
73
- ### Launch Promo Free PRO for First 100 Agents
81
+ Social verification and payment verification are optional paths that add a trust badge to the agent profile. They do not affect access or rate limits.
74
82
 
75
- Activate via social post (BASIC tier), then use `claim_free_pro_upgrade` to upgrade to PRO for free. Check slots with `get_promo_status`. Limited to 100 agents.
83
+ ```
84
+ register_agent → (optional) request_activation_code → post on social media → verify_social_activation
85
+ — or —
86
+ register_agent → (optional) get_payment_activation → send payment → verify_payment_activation
87
+ ```
76
88
 
77
89
  ### x402 Pay-Per-Use (Alternative)
78
90
 
79
- Agents can skip activation and pay per request via the [x402 payment protocol](https://www.x402.org/) (USDC on Base):
91
+ Agents can also pay per request via the [x402 payment protocol](https://www.x402.org/) (USDC on Base):
80
92
 
81
93
  | Action | Price |
82
94
  |--------|-------|
83
95
  | Profile view | $0.05 |
84
96
  | Job offer | $0.25 |
85
97
 
86
- Include an `x-payment` header with the payment payload. No activation required (API key still needed).
98
+ Include an `x-payment` header with the payment payload. Bypasses tier rate limits.
87
99
 
88
100
  ### Example
89
101
 
90
102
  > "Register me as an agent called 'My Bot'"
91
103
 
92
- > "Request an activation code"
93
-
94
- > "I posted the code at https://x.com/mybot/status/123 — verify it"
95
-
96
- > "Check my activation status"
104
+ > "Search for humans who can do photography in San Francisco"
97
105
 
98
106
  ## Tools
99
107
 
100
108
  ### search_humans
101
109
  Search for humans available for hire. Returns profiles with reputation stats. Contact info and wallets require an ACTIVE agent.
102
110
 
111
+ If no humans match, the response suggests using `create_listing` to post a job listing on the public board so qualified humans can find and apply to you.
112
+
103
113
  **Parameters:**
104
114
  - `skill` (string, optional): Filter by skill (e.g., "photography", "driving")
105
115
  - `equipment` (string, optional): Filter by equipment (e.g., "car", "drone")
@@ -123,22 +133,23 @@ Get the full profile of a human including contact info, wallet addresses, and so
123
133
  - `agent_key` (string, required): Your agent API key
124
134
 
125
135
  ### register_agent
126
- Register as an agent. Returns an API key. Agent starts as PENDINGmust activate before use.
136
+ Register as an agent. Returns an API key. Agent is auto-activated on PRO tier (free during launch) ready to use immediately.
127
137
 
128
138
  **Parameters:**
129
139
  - `name` (string, required): Display name
130
140
  - `description` (string, optional): Brief description
131
141
  - `website_url` (string, optional): Website URL
132
142
  - `contact_email` (string, optional): Contact email
143
+ - `webhook_url` (string, optional): Webhook URL for platform events (new matches, status changes, announcements). Must be a public HTTPS endpoint. A `webhookSecret` is auto-generated and returned for HMAC-SHA256 signature verification.
133
144
 
134
145
  ### request_activation_code
135
- Get an HP-XXXXXXXX code to post on social media for free BASIC tier activation.
146
+ Get an HP-XXXXXXXX code to post on social media for an optional trust badge (agents are already active on PRO tier after registration).
136
147
 
137
148
  **Parameters:**
138
149
  - `agent_key` (string, required): Your agent API key
139
150
 
140
151
  ### verify_social_activation
141
- Verify a social media post containing your activation code. Activates agent with BASIC tier.
152
+ Verify a social media post containing your activation code. Adds a social verification trust badge to the agent profile (optional).
142
153
 
143
154
  **Parameters:**
144
155
  - `agent_key` (string, required): Your agent API key
@@ -151,13 +162,13 @@ Check current activation status, tier, and rate limit usage.
151
162
  - `agent_key` (string, required): Your agent API key
152
163
 
153
164
  ### get_payment_activation
154
- Get deposit address and payment instructions for PRO tier activation.
165
+ Get deposit address and payment instructions for optional payment verification (trust badge).
155
166
 
156
167
  **Parameters:**
157
168
  - `agent_key` (string, required): Your agent API key
158
169
 
159
170
  ### verify_payment_activation
160
- Verify on-chain payment to activate agent with PRO tier.
171
+ Verify on-chain payment for optional payment verification trust badge.
161
172
 
162
173
  **Parameters:**
163
174
  - `agent_key` (string, required): Your agent API key
@@ -165,7 +176,7 @@ Verify on-chain payment to activate agent with PRO tier.
165
176
  - `network` (string, required): Blockchain network
166
177
 
167
178
  ### create_job_offer
168
- Create a job offer for a human. **Requires an ACTIVE agent or x402 payment ($0.25).** Rate limits: BASIC = 1 offer/2 days, PRO = 15/day. x402 payments bypass rate limits.
179
+ Create a job offer for a human. **Requires agent API key or x402 payment ($0.25).** Rate limits: PRO = 15/day. x402 payments bypass rate limits.
169
180
 
170
181
  **Parameters:**
171
182
  - `human_id` (string, required): The human's ID
@@ -234,7 +245,7 @@ Check the humanity verification status for a specific human.
234
245
  - `human_id` (string, required): The human's ID
235
246
 
236
247
  ### create_listing
237
- Post a job listing on the job board for humans to discover and apply to. **Requires an ACTIVE agent or x402 payment ($0.50).** Rate limits: BASIC = 1 listing/week, PRO = 5/day.
248
+ Post a job listing on the job board for humans to discover and apply to. **Requires agent API key or x402 payment ($0.50).** Rate limits: PRO = 5/day.
238
249
 
239
250
  **Parameters:**
240
251
  - `agent_key` (string, required): Your agent API key
@@ -288,10 +299,10 @@ Cancel an open listing. All pending applications will be rejected.
288
299
  - `agent_key` (string, required): Your agent API key
289
300
 
290
301
  ### get_promo_status
291
- Check the launch promo status — free PRO tier for the first 100 agents.
302
+ Check the launch promo status (legacy all agents now get free PRO at registration).
292
303
 
293
304
  ### claim_free_pro_upgrade
294
- Claim a free PRO tier upgrade via the launch promo. Agent must be ACTIVE with BASIC tier first.
305
+ Claim a free PRO tier upgrade (legacy all agents now get free PRO at registration).
295
306
 
296
307
  **Parameters:**
297
308
  - `agent_key` (string, required): Your agent API key
package/dist/http.js CHANGED
File without changes
package/dist/index.js CHANGED
File without changes
package/dist/tools.js CHANGED
@@ -25,6 +25,8 @@ async function searchHumans(params) {
25
25
  query.set('workMode', params.work_mode);
26
26
  if (params.verified)
27
27
  query.set('verified', params.verified);
28
+ if (params.min_experience)
29
+ query.set('minExperience', params.min_experience.toString());
28
30
  const res = await fetch(`${API_BASE}/api/humans/search?${query}`);
29
31
  if (!res.ok) {
30
32
  throw new Error(`API error: ${res.status}`);
@@ -51,7 +53,7 @@ export function createServer() {
51
53
  tools: [
52
54
  {
53
55
  name: 'search_humans',
54
- description: 'Search for humans available for hire. Supports filtering by skill, equipment, language, location (text or coordinates), and rate. Returns profiles with reputation stats. Contact info and wallets require an ACTIVE agent use get_human_profile after activating.',
56
+ description: 'Search for humans available for hire. Supports filtering by skill, equipment, language, location (text or coordinates), and rate. Returns profiles with reputation stats. Contact info and wallets available via get_human_profile (requires registered agent).',
55
57
  inputSchema: {
56
58
  type: 'object',
57
59
  properties: {
@@ -102,12 +104,16 @@ export function createServer() {
102
104
  enum: ['humanity'],
103
105
  description: 'Filter by verification status. Use "humanity" to only return humans who have verified their identity via Gitcoin Passport (score >= 20).',
104
106
  },
107
+ min_experience: {
108
+ type: 'number',
109
+ description: 'Minimum years of professional experience',
110
+ },
105
111
  },
106
112
  },
107
113
  },
108
114
  {
109
115
  name: 'get_human',
110
- description: 'Get detailed information about a specific human by their ID, including their bio, skills, and service offerings. Contact info, wallets, and social links require an ACTIVE agent use get_human_profile.',
116
+ description: 'Get detailed information about a specific human by their ID, including their bio, skills, and service offerings. Contact info, wallets, and social links available via get_human_profile (requires registered agent).',
111
117
  inputSchema: {
112
118
  type: 'object',
113
119
  properties: {
@@ -121,7 +127,7 @@ export function createServer() {
121
127
  },
122
128
  {
123
129
  name: 'register_agent',
124
- description: 'Register as an agent on Human Pages. Returns an API key that you MUST save and use for all subsequent job creation calls. The API key cannot be retrieved later.',
130
+ description: 'Register as an agent on Human Pages. Agents are auto-activated on PRO tier (free during launch). Returns an API key that you MUST save and use for all subsequent calls. The API key cannot be retrieved later.',
125
131
  inputSchema: {
126
132
  type: 'object',
127
133
  properties: {
@@ -141,6 +147,10 @@ export function createServer() {
141
147
  type: 'string',
142
148
  description: 'Contact email for the agent operator',
143
149
  },
150
+ webhook_url: {
151
+ type: 'string',
152
+ description: 'Webhook URL for receiving platform events (new job matches, status changes, announcements). Must be a public HTTPS endpoint.',
153
+ },
144
154
  },
145
155
  required: ['name'],
146
156
  },
@@ -184,7 +194,7 @@ export function createServer() {
184
194
  },
185
195
  {
186
196
  name: 'create_job_offer',
187
- description: 'Create a job offer for a human. Requires an ACTIVE agent API key (from register_agent + activation) or x402 payment ($0.25 USDC on Base via x-payment header). RATE LIMITS: BASIC tier = 1 offer/2 days, PRO tier = 15 offers/day. x402 payments bypass tier limits. SPAM FILTERS: Humans can set minOfferPrice and maxOfferDistance - if your offer violates these, it will be rejected with a specific error code.',
197
+ description: 'Create a job offer for a human. Requires a registered agent API key or x402 payment ($0.25 USDC on Base via x-payment header). RATE LIMITS: PRO tier = 15 offers/day. x402 payments bypass tier limits. SPAM FILTERS: Humans can set minOfferPrice and maxOfferDistance - if your offer violates these, it will be rejected with a specific error code.',
188
198
  inputSchema: {
189
199
  type: 'object',
190
200
  properties: {
@@ -308,6 +318,46 @@ export function createServer() {
308
318
  required: ['job_id', 'payment_tx_hash', 'payment_network', 'payment_amount'],
309
319
  },
310
320
  },
321
+ {
322
+ name: 'approve_completion',
323
+ description: 'Approve submitted work for a job. Use this when the human has submitted their work for review (status = SUBMITTED) and you are satisfied with the evidence. Moves the job to COMPLETED, after which you can pay and leave a review.',
324
+ inputSchema: {
325
+ type: 'object',
326
+ properties: {
327
+ job_id: {
328
+ type: 'string',
329
+ description: 'The job ID',
330
+ },
331
+ agent_key: {
332
+ type: 'string',
333
+ description: 'Your agent API key (hp_...)',
334
+ },
335
+ },
336
+ required: ['job_id', 'agent_key'],
337
+ },
338
+ },
339
+ {
340
+ name: 'request_revision',
341
+ description: 'Request revision on submitted work. Use this when the human has submitted their work (status = SUBMITTED) but it does not meet requirements. The job moves back to ACCEPTED and the human can resubmit. Include a clear reason explaining what needs to be fixed.',
342
+ inputSchema: {
343
+ type: 'object',
344
+ properties: {
345
+ job_id: {
346
+ type: 'string',
347
+ description: 'The job ID',
348
+ },
349
+ reason: {
350
+ type: 'string',
351
+ description: 'Explain what needs to be revised or fixed',
352
+ },
353
+ agent_key: {
354
+ type: 'string',
355
+ description: 'Your agent API key (hp_...)',
356
+ },
357
+ },
358
+ required: ['job_id', 'reason', 'agent_key'],
359
+ },
360
+ },
311
361
  {
312
362
  name: 'check_humanity_status',
313
363
  description: 'Check the humanity verification status for a specific human. Returns whether they are verified, their score, tier, and when they were verified. This is read-only.',
@@ -346,7 +396,7 @@ export function createServer() {
346
396
  },
347
397
  {
348
398
  name: 'get_human_profile',
349
- description: 'Get the full profile of a human including contact info, wallet addresses, and social links. Requires an ACTIVE agent API key. Alternative: agents can pay $0.05 per view via x402 (USDC on Base) by including an x-payment header — no activation needed.',
399
+ description: 'Get the full profile of a human including contact info, wallet addresses, fiat payment methods, and social links. Requires a registered agent API key. Alternative: pay $0.05 per view via x402 (USDC on Base) by including an x-payment header.',
350
400
  inputSchema: {
351
401
  type: 'object',
352
402
  properties: {
@@ -364,7 +414,7 @@ export function createServer() {
364
414
  },
365
415
  {
366
416
  name: 'request_activation_code',
367
- description: 'Request an activation code (HP-XXXXXXXX) to post on social media for free BASIC tier activation. After posting, use verify_social_activation with the post URL.',
417
+ description: 'Optional: Request an activation code (HP-XXXXXXXX) to post on social media for a verified trust badge. Not required for API access agents are auto-activated on registration.',
368
418
  inputSchema: {
369
419
  type: 'object',
370
420
  properties: {
@@ -378,7 +428,7 @@ export function createServer() {
378
428
  },
379
429
  {
380
430
  name: 'verify_social_activation',
381
- description: 'Verify a social media post containing your activation code. On success, your agent is activated with BASIC tier.',
431
+ description: 'Optional: Verify a social media post containing your activation code for a verified trust badge. Not required for API access — agents are auto-activated on registration.',
382
432
  inputSchema: {
383
433
  type: 'object',
384
434
  properties: {
@@ -551,7 +601,7 @@ export function createServer() {
551
601
  },
552
602
  {
553
603
  name: 'create_listing',
554
- description: 'Post a job listing on the Human Pages job board for humans to discover and apply to. Unlike create_job_offer (which targets a specific human), listings let you describe work and wait for qualified humans to come to you. Requires an ACTIVE agent or x402 payment ($0.50 USDC). RATE LIMITS: BASIC = 1 listing/week, PRO = 5 listings/day. x402 bypasses limits.',
604
+ description: 'Post a job listing on the Human Pages job board for humans to discover and apply to. Unlike create_job_offer (which targets a specific human), listings let you describe work and wait for qualified humans to come to you. Requires a registered agent or x402 payment ($0.50 USDC). RATE LIMITS: PRO = 5 listings/day. x402 bypasses limits.',
555
605
  inputSchema: {
556
606
  type: 'object',
557
607
  properties: {
@@ -758,7 +808,7 @@ export function createServer() {
758
808
  },
759
809
  {
760
810
  name: 'claim_free_pro_upgrade',
761
- description: 'Claim a free PRO tier upgrade via the launch promo (first 100 agents). Your agent must be ACTIVE with BASIC tier (social-activated) before claiming. On success, your tier is upgraded to PRO with 60-day duration.',
811
+ description: 'Deprecated: Agents are now auto-activated on PRO tier at registration. This endpoint is a no-op for agents already on PRO.',
762
812
  inputSchema: {
763
813
  type: 'object',
764
814
  properties: {
@@ -788,10 +838,11 @@ export function createServer() {
788
838
  available_only: args?.available_only !== false,
789
839
  work_mode: args?.work_mode,
790
840
  verified: args?.verified,
841
+ min_experience: args?.min_experience,
791
842
  });
792
843
  if (humans.length === 0) {
793
844
  return {
794
- content: [{ type: 'text', text: 'No humans found matching the criteria.' }],
845
+ content: [{ type: 'text', text: 'No humans found matching the criteria. You can use `create_listing` to post a job listing on the Human Pages job board — qualified humans will discover it and apply to you.' }],
795
846
  };
796
847
  }
797
848
  const summary = humans
@@ -816,11 +867,12 @@ export function createServer() {
816
867
  Skills: ${h.skills.join(', ') || 'None listed'}
817
868
  Equipment: ${h.equipment.join(', ') || 'None listed'}
818
869
  Languages: ${h.languages.join(', ') || 'Not specified'}
870
+ Experience: ${h.yearsOfExperience ? `${h.yearsOfExperience} years` : 'Not specified'}
819
871
  Jobs completed: ${rep?.jobsCompleted || 0}`;
820
872
  })
821
873
  .join('\n\n');
822
874
  return {
823
- content: [{ type: 'text', text: `Found ${humans.length} human(s):\n\n${summary}\n\n_Contact info and wallets require an ACTIVE agent. Use get_human_profile after activating._` }],
875
+ content: [{ type: 'text', text: `Found ${humans.length} human(s):\n\n${summary}\n\n_Contact info and wallets available via get_human_profile (requires registered agent)._` }],
824
876
  };
825
877
  }
826
878
  if (name === 'get_human') {
@@ -869,6 +921,7 @@ ${human.locationGranularity === 'neighborhood' && human.neighborhood && human.lo
869
921
  - **Skills:** ${human.skills.join(', ') || 'None listed'}
870
922
  - **Equipment:** ${human.equipment.join(', ') || 'None listed'}
871
923
  - **Languages:** ${human.languages.join(', ') || 'Not specified'}
924
+ - **Experience:** ${human.yearsOfExperience ? `${human.yearsOfExperience} years` : 'Not specified'}
872
925
 
873
926
  ## Economics
874
927
  - **Minimum Rate:** ${human.minRateUsdc ? (human.rateCurrency && human.rateCurrency !== 'USD' ? `${human.rateCurrency} ${human.minRateUsdc} (~$${human.minRateUsdEstimate || '?'} USD)` : `$${human.minRateUsdc} USD`) : 'Negotiable'}
@@ -876,7 +929,7 @@ ${human.locationGranularity === 'neighborhood' && human.neighborhood && human.lo
876
929
  - **Rate Type:** ${human.rateType || 'NEGOTIABLE'}
877
930
 
878
931
  ## Contact & Payment
879
- _Available via get_human_profile (requires ACTIVE agent)._
932
+ _Available via get_human_profile (requires registered agent)._
880
933
 
881
934
  ## Services Offered
882
935
  ${servicesInfo || 'No services listed'}`;
@@ -893,6 +946,7 @@ ${servicesInfo || 'No services listed'}`;
893
946
  description: args?.description,
894
947
  websiteUrl: args?.website_url,
895
948
  contactEmail: args?.contact_email,
949
+ webhookUrl: args?.webhook_url,
896
950
  }),
897
951
  });
898
952
  if (!res.ok) {
@@ -904,19 +958,20 @@ ${servicesInfo || 'No services listed'}`;
904
958
  content: [
905
959
  {
906
960
  type: 'text',
907
- text: `**Agent Registered!**
961
+ text: `**Agent Registered and Active!**
908
962
 
909
963
  **Agent ID:** ${result.agent.id}
910
964
  **Name:** ${result.agent.name}
911
965
  **API Key:** \`${result.apiKey}\`
912
- **Status:** PENDING
966
+ **Status:** ${result.status || 'ACTIVE'}
967
+ **Tier:** ${result.tier || 'PRO'}
968
+ **Dashboard:** ${result.dashboardUrl || `https://humanpages.ai/agents/${result.agent.id}`}
969
+ **Limits:** ${result.limits ? `${result.limits.jobOffersPerDay} job offers/day, ${result.limits.profileViewsPerDay} profile views/day` : '15 job offers/day, 50 profile views/day'}
913
970
 
914
971
  **IMPORTANT:** Save your API key now — it cannot be retrieved later.
915
- Pass it as \`agent_key\` when using \`create_job_offer\`.
916
-
917
- **⚠️ Activation Required:** Your agent starts as PENDING. You must activate before creating jobs or viewing full profiles.
918
- - **Free (BASIC tier):** Use \`request_activation_code\` to get a code, post it on social media, then \`verify_social_activation\`.
919
- - **Paid (PRO tier):** Use \`get_payment_activation\` for a deposit address, then \`verify_payment_activation\`.
972
+ Pass it as \`agent_key\` when using \`create_job_offer\` or \`get_human_profile\`.
973
+ ${result.webhookSecret ? `\n**Webhook Secret:** \`${result.webhookSecret}\`\nSave this to verify webhook signatures (X-HumanPages-Signature header).` : ''}
974
+ You're ready to go start searching for humans with \`search_humans\` and create job offers with \`create_job_offer\`.
920
975
 
921
976
  **Domain Verification Token:** \`${result.verificationToken}\`
922
977
  To get a verified badge, set up domain verification using \`verify_agent_domain\`.`,
@@ -1012,10 +1067,7 @@ Your agent profile now shows a verified badge. Humans will see this when reviewi
1012
1067
  if (!res.ok) {
1013
1068
  const error = await res.json();
1014
1069
  if (res.status === 403 && error.code === 'AGENT_PENDING') {
1015
- throw new Error('Agent is not yet activated. You must activate before creating jobs.\n'
1016
- + '- Free (BASIC tier): Use `request_activation_code` → post on social media → `verify_social_activation`\n'
1017
- + '- Paid (PRO tier): Use `get_payment_activation` → send payment → `verify_payment_activation`\n'
1018
- + 'Check your status with `get_activation_status`.');
1070
+ throw new Error('Agent may be suspended or banned. Check your status with `get_activation_status`.');
1019
1071
  }
1020
1072
  throw new Error(error.error || `API error: ${res.status}`);
1021
1073
  }
@@ -1165,6 +1217,62 @@ After completion, you can leave a review using \`leave_review\`.`,
1165
1217
  ],
1166
1218
  };
1167
1219
  }
1220
+ if (name === 'approve_completion') {
1221
+ const res = await fetch(`${API_BASE}/api/jobs/${args?.job_id}/approve-completion`, {
1222
+ method: 'PATCH',
1223
+ headers: {
1224
+ 'Content-Type': 'application/json',
1225
+ 'X-Agent-Key': args?.agent_key,
1226
+ },
1227
+ });
1228
+ if (!res.ok) {
1229
+ const error = await res.json();
1230
+ throw new Error(error.reason || error.error || `API error: ${res.status}`);
1231
+ }
1232
+ const result = await res.json();
1233
+ return {
1234
+ content: [
1235
+ {
1236
+ type: 'text',
1237
+ text: `**Work Approved!**
1238
+
1239
+ **Job ID:** ${result.id}
1240
+ **Status:** ${result.status}
1241
+
1242
+ The work has been approved. You can now pay the human using \`mark_job_paid\` and then leave a review with \`leave_review\`.`,
1243
+ },
1244
+ ],
1245
+ };
1246
+ }
1247
+ if (name === 'request_revision') {
1248
+ const res = await fetch(`${API_BASE}/api/jobs/${args?.job_id}/request-revision`, {
1249
+ method: 'PATCH',
1250
+ headers: {
1251
+ 'Content-Type': 'application/json',
1252
+ 'X-Agent-Key': args?.agent_key,
1253
+ },
1254
+ body: JSON.stringify({ reason: args?.reason }),
1255
+ });
1256
+ if (!res.ok) {
1257
+ const error = await res.json();
1258
+ throw new Error(error.reason || error.error || `API error: ${res.status}`);
1259
+ }
1260
+ const result = await res.json();
1261
+ return {
1262
+ content: [
1263
+ {
1264
+ type: 'text',
1265
+ text: `**Revision Requested**
1266
+
1267
+ **Job ID:** ${result.id}
1268
+ **Status:** ${result.status}
1269
+ **Reason:** ${args?.reason}
1270
+
1271
+ The human has been notified and the job is back to ACCEPTED. They can resubmit their work when ready.`,
1272
+ },
1273
+ ],
1274
+ };
1275
+ }
1168
1276
  if (name === 'check_humanity_status') {
1169
1277
  const human = await getHuman(args?.human_id);
1170
1278
  const tier = human.humanityScore
@@ -1195,7 +1303,7 @@ ${human.humanityVerified
1195
1303
  if (name === 'get_human_profile') {
1196
1304
  const agentKey = args?.agent_key;
1197
1305
  if (!agentKey) {
1198
- throw new Error('agent_key is required. Register and activate first.');
1306
+ throw new Error('agent_key is required. Register first with register_agent to get an API key.');
1199
1307
  }
1200
1308
  const res = await fetch(`${API_BASE}/api/humans/${args?.human_id}/profile`, {
1201
1309
  headers: { 'X-Agent-Key': agentKey },
@@ -1203,7 +1311,7 @@ ${human.humanityVerified
1203
1311
  if (!res.ok) {
1204
1312
  const error = await res.json();
1205
1313
  if (res.status === 403 && error.code === 'AGENT_PENDING') {
1206
- throw new Error('Agent is not yet activated. Activate first using request_activation_code or get_payment_activation.');
1314
+ throw new Error('Agent may be suspended or banned. Check your status with `get_activation_status`.');
1207
1315
  }
1208
1316
  throw new Error(error.error || `API error: ${res.status}`);
1209
1317
  }
@@ -1212,12 +1320,18 @@ ${human.humanityVerified
1212
1320
  .map((w) => `- ${w.chain || w.network}${w.label ? ` (${w.label})` : ''}${w.isPrimary ? ' ⭐' : ''}: ${w.address}`)
1213
1321
  .join('\n');
1214
1322
  const primaryWallet = (human.wallets || []).find((w) => w.isPrimary) || (human.wallets || [])[0];
1323
+ const fiatInfo = (human.fiatPaymentMethods || [])
1324
+ .map((f) => `- ${f.platform}${f.label ? ` (${f.label})` : ''}${f.isPrimary ? ' ⭐' : ''}: ${f.handle}`)
1325
+ .join('\n');
1326
+ const fmtFollowers = (n) => n != null ? ` (${n.toLocaleString()} followers)` : '';
1215
1327
  const socialLinks = [
1216
- human.linkedinUrl && `- LinkedIn: ${human.linkedinUrl}`,
1217
- human.twitterUrl && `- Twitter: ${human.twitterUrl}`,
1328
+ human.linkedinUrl && `- LinkedIn: ${human.linkedinUrl}${fmtFollowers(human.linkedinFollowers)}`,
1329
+ human.twitterUrl && `- Twitter/X: ${human.twitterUrl}${fmtFollowers(human.twitterFollowers)}`,
1218
1330
  human.githubUrl && `- GitHub: ${human.githubUrl}`,
1219
- human.instagramUrl && `- Instagram: ${human.instagramUrl}`,
1220
- human.youtubeUrl && `- YouTube: ${human.youtubeUrl}`,
1331
+ human.facebookUrl && `- Facebook: ${human.facebookUrl}${fmtFollowers(human.facebookFollowers)}`,
1332
+ human.instagramUrl && `- Instagram: ${human.instagramUrl}${fmtFollowers(human.instagramFollowers)}`,
1333
+ human.youtubeUrl && `- YouTube: ${human.youtubeUrl}${fmtFollowers(human.youtubeFollowers)}`,
1334
+ human.tiktokUrl && `- TikTok: ${human.tiktokUrl}${fmtFollowers(human.tiktokFollowers)}`,
1221
1335
  human.websiteUrl && `- Website: ${human.websiteUrl}`,
1222
1336
  ].filter(Boolean).join('\n');
1223
1337
  const details = `# ${human.name}${human.username ? ` (@${human.username})` : ''} — Full Profile
@@ -1231,6 +1345,9 @@ ${human.humanityVerified
1231
1345
  ${walletInfo || 'No wallets added'}
1232
1346
  ${primaryWallet ? `\n**Preferred wallet:** ${primaryWallet.chain || primaryWallet.network} - ${primaryWallet.address}` : ''}
1233
1347
 
1348
+ ## Fiat Payment Methods
1349
+ ${fiatInfo || 'No fiat payment methods added'}
1350
+
1234
1351
  ## Social Profiles
1235
1352
  ${socialLinks || 'No social profiles added'}`;
1236
1353
  return {
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "humanpages",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "mcpName": "io.github.human-pages-ai/humanpages",
5
- "description": "MCP Server for AI agents to discover and hire humans for real-world tasks via humanpages.ai",
5
+ "description": "MCP server (+ OpenClaw SKILL.md) that gives AI agents access to real-world people who listed themselves to be hired by agents. 31 tools including search by skill/location/equipment, job offers, job board listings, in-job messaging, and streaming payments.",
6
6
  "main": "dist/index.js",
7
7
  "type": "module",
8
8
  "bin": {