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 +21 -0
- package/README.md +40 -29
- package/dist/http.js +0 -0
- package/dist/index.js +0 -0
- package/dist/tools.js +146 -29
- package/package.json +2 -2
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
|
-
|
|
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
|
|
63
|
+
## Agent Registration
|
|
55
64
|
|
|
56
|
-
|
|
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
|
-
###
|
|
67
|
+
### Registration Flow
|
|
59
68
|
|
|
60
69
|
```
|
|
61
|
-
register_agent →
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
> "
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 —
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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: '
|
|
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
|
|
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
|
|
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:**
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
1220
|
-
human.
|
|
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
|
+
"version": "1.2.4",
|
|
4
4
|
"mcpName": "io.github.human-pages-ai/humanpages",
|
|
5
|
-
"description": "MCP
|
|
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": {
|