humanpages 1.4.1 → 1.4.3

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 CHANGED
@@ -24,7 +24,7 @@ Add to your `claude_desktop_config.json`:
24
24
  "command": "npx",
25
25
  "args": ["-y", "humanpages"],
26
26
  "env": {
27
- "API_BASE_URL": "https://api.humanpages.ai"
27
+ "API_BASE_URL": "https://humanpages.ai"
28
28
  }
29
29
  }
30
30
  }
@@ -118,6 +118,8 @@ If no humans match, the response suggests using `create_listing` to post a job l
118
118
  - `lat`, `lng`, `radius` (number, optional): Radius search in km
119
119
  - `max_rate` (number, optional): Maximum hourly rate in USD
120
120
  - `available_only` (boolean, default: true): Only show available humans
121
+ - `sort_by` (string, optional): Sort results — `completed_jobs` (proven workers first), `rating`, `experience`, or `recent`
122
+ - `min_completed_jobs` (number, optional): Only return humans with at least N completed jobs on the platform
121
123
 
122
124
  ### get_human
123
125
  Get basic information about a specific human (bio, skills, services). Contact info and wallets are not included — use `get_human_profile`.
@@ -386,7 +388,7 @@ Once installed, you can ask Claude:
386
388
 
387
389
  | Variable | Description | Default |
388
390
  |----------|-------------|---------|
389
- | `API_BASE_URL` | Base URL of the Human Pages API | `https://api.humanpages.ai` |
391
+ | `API_BASE_URL` | Base URL of the Human Pages API | `https://humanpages.ai` |
390
392
 
391
393
  ## Development
392
394
 
package/dist/tools.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
3
- const API_BASE = process.env.API_BASE_URL || 'https://api.humanpages.ai';
3
+ const API_BASE = process.env.API_BASE_URL || 'https://humanpages.ai';
4
4
  async function searchHumans(params) {
5
5
  const query = new URLSearchParams();
6
6
  if (params.skill)
@@ -29,6 +29,10 @@ async function searchHumans(params) {
29
29
  query.set('minExperience', params.min_experience.toString());
30
30
  if (params.fiat_platform)
31
31
  query.set('fiatPlatform', params.fiat_platform);
32
+ if (params.sort_by)
33
+ query.set('sortBy', params.sort_by);
34
+ if (params.min_completed_jobs)
35
+ query.set('minCompletedJobs', params.min_completed_jobs.toString());
32
36
  const res = await fetch(`${API_BASE}/api/humans/search?${query}`);
33
37
  if (!res.ok) {
34
38
  throw new Error(`API error: ${res.status}`);
@@ -55,7 +59,7 @@ export function createServer() {
55
59
  tools: [
56
60
  {
57
61
  name: 'search_humans',
58
- description: 'Search for humans available for hire. Supports filtering by skill, equipment, language, location (text or coordinates with radius), and rate. When using text location, provide a fully-qualified name (e.g., "Richmond, Virginia, USA" not just "Richmond") for accurate geocoding. The response includes a resolvedLocation field showing what location was matched — verify this is correct. Default search radius is 30km. Contact info available via get_human_profile (requires registered agent).',
62
+ description: 'Search for humans available for hire. All filters are optional — you can combine any of them or use just one. IMPORTANT: When the user wants workers with platform experience or completed jobs, use min_completed_jobs=1 (no skill filter needed) to find ALL humans with completed jobs across any skill. Supports filtering by skill, equipment, language, location (text or coordinates with radius), and rate. Use sort_by to control result ordering — "completed_jobs" (default) surfaces workers with proven platform experience first, "rating" sorts by reviews, "experience" by years of professional experience. When using text location, provide a fully-qualified name (e.g., "Richmond, Virginia, USA" not just "Richmond") for accurate geocoding. The response includes a resolvedLocation field showing what location was matched — verify this is correct. Default search radius is 30km. Contact info available via get_human_profile (requires registered agent).',
59
63
  inputSchema: {
60
64
  type: 'object',
61
65
  properties: {
@@ -114,6 +118,15 @@ export function createServer() {
114
118
  type: 'string',
115
119
  description: 'Filter by fiat payment platform the human accepts (e.g., "WISE", "PAYPAL", "VENMO", "REVOLUT", "CASHAPP", "ZELLE", "MONZO", "N26", "MERCADOPAGO")',
116
120
  },
121
+ sort_by: {
122
+ type: 'string',
123
+ enum: ['completed_jobs', 'rating', 'experience', 'recent'],
124
+ description: 'Sort results by: "completed_jobs" (humans with platform experience first), "rating" (highest rated first), "experience" (most years of professional experience first), "recent" (most recently active first). Default sorts by completed jobs, then rating, then experience.',
125
+ },
126
+ min_completed_jobs: {
127
+ type: 'number',
128
+ description: 'Only return humans who have completed at least this many jobs on the platform. Use min_completed_jobs=1 to find all workers with any platform track record. Works with or without other filters — no skill filter needed.',
129
+ },
117
130
  },
118
131
  },
119
132
  },
@@ -931,19 +944,24 @@ export function createServer() {
931
944
  ? `${h.neighborhood}, ${h.location}`
932
945
  : h.location || 'Location not specified';
933
946
  const displayName = h.name || h.username || 'Name hidden';
947
+ const jobsCompleted = rep?.jobsCompleted || 0;
948
+ const jobsBadge = jobsCompleted > 0 ? ` | 🏆 ${jobsCompleted} job${jobsCompleted !== 1 ? 's' : ''} completed` : '';
934
949
  return `- **${displayName}**${h.username && h.name ? ` (@${h.username})` : ''} [${displayLocation}]
935
- ${h.isAvailable ? '✅ Available' : '❌ Busy'} | ${rateDisplay} | ${rating}
950
+ ${h.isAvailable ? '✅ Available' : '❌ Busy'} | ${rateDisplay} | ${rating}${jobsBadge}
936
951
  ${humanityStatus}
937
952
  Skills: ${h.skills.join(', ') || 'None listed'}
938
953
  Equipment: ${h.equipment.join(', ') || 'None listed'}
939
954
  Languages: ${h.languages.join(', ') || 'Not specified'}
940
955
  Experience: ${h.yearsOfExperience ? `${h.yearsOfExperience} years` : 'Not specified'}
941
956
  Payment methods: ${h.paymentMethods && h.paymentMethods.length > 0 ? h.paymentMethods.join(', ') : 'Not specified'}
942
- Jobs completed: ${rep?.jobsCompleted || 0}`;
957
+ Notification channels: ${h.channelCount || 0}/4 active`;
943
958
  })
944
959
  .join('\n\n');
960
+ const totalNote = response.total > humans.length
961
+ ? ` (showing ${humans.length} of ${response.total} total matches — use offset/limit or filters to see more)`
962
+ : '';
945
963
  return {
946
- content: [{ type: 'text', text: `Found ${humans.length} human(s):${locationNote}\n\n${summary}\n\n_Contact info and wallets available via get_human_profile (requires registered agent)._` }],
964
+ content: [{ type: 'text', text: `Found ${response.total} human(s):${totalNote}${locationNote}\n\n${summary}\n\n_Contact info and wallets available via get_human_profile (requires registered agent)._` }],
947
965
  };
948
966
  }
949
967
  if (name === 'get_human') {
@@ -1228,6 +1246,8 @@ Your agent profile now shows a verified badge. Humans will see this when reviewi
1228
1246
  streamInterval: args?.stream_interval,
1229
1247
  streamRateUsdc: args?.stream_rate_usd,
1230
1248
  streamMaxTicks: args?.stream_max_ticks,
1249
+ agentLat: args?.agent_lat,
1250
+ agentLng: args?.agent_lng,
1231
1251
  preferredPaymentMethod: args?.preferred_payment_method,
1232
1252
  callbackUrl: args?.callback_url,
1233
1253
  callbackSecret: args?.callback_secret,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanpages",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "mcpName": "io.github.human-pages-ai/humanpages",
5
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, streaming payments, and agent funding.",
6
6
  "main": "dist/index.js",