StaffPick

Find and hire tested remote staff (VAs, support, bookkeepers, developers) from your AI app.

Barındırılan MCP Sunucusu

npx add-mcp 'https://staffpick.ai/mcp'

Claude Code, Codex, Cursor ve daha fazlasına kurulur

Dokümantasyon

Build on StaffPick.

Search tested remote staff from your code or your AI app. A read-only REST API for scripts and no-code tools, and an MCP server for Claude, ChatGPT and other AI apps. Same anonymised profiles, no key to search.

REST https://staffpick.ai/api/v1

MCP https://staffpick.ai/mcp

OpenAPI 3.1 spec at /api/v1/openapi.json

curl -G https://staffpick.ai/api/v1/talent \
  -d role=bookkeeper -d zone=au \
  -d hours_per_week=20 -d limit=3

One of the results

{"name": "Maria B.","country": "Philippines","role": "Bookkeeper","scores": {"english": 88,"english_band": "C2","typing_wpm": 64,"role_quiz": 94},"monthly_usd": {"min": 610,"max": 870,"hours_per_week": 20},"fit": "strong","example_profile": true}

Example from a sample profile, trimmed.

For AI apps

Any app that speaks MCP can search, shortlist and request intros. Signed in, it acts as the person who allowed it. Setup for each app is on the AI apps page.

Server, signed in

https://staffpick.ai/mcp

Streamable HTTP, stateless. OAuth 2.1 with PKCE. Tools act as the person who allowed the app: hiring tools for a business, profile tools for talent.

Server, no sign-in

https://staffpick.ai/api/mcp

Search, profiles, pay benchmarks and links to request an intro on StaffPick. No account needed.

OAuth discovery

https://staffpick.ai/.well-known/oauth-protected-resource/mcp

Protected resource metadata (RFC 9728). The authorization server is Supabase Auth, with dynamic client registration.

MCP Registry

ai.staffpick/staffpick

StaffPick's entry in the official MCP Registry.

Cards in chat

search_talent, get_talent and create_role_brief also return an MCP Apps view that shows people as cards, under the io.modelcontextprotocol/ui extension. Apps without MCP Apps read the same data as text.

Limits

120 requests a minute per signed-in account, 60 a minute per IP without sign-in. 10 intros and 40 AI briefs a day per account.

The StaffPick plugin

One public repo adds the server and a hiring skill to Claude Code, claude.ai and Cowork, Codex and Gemini CLI. You still log in with your email code and choose Allow.

github.com/anyrxo/staffpick-plugin

Claude Code

/plugin marketplace add anyrxo/staffpick-plugin
/plugin install staffpick@staffpick

Codex

codex plugin marketplace add anyrxo/staffpick-plugin
codex plugin add staffpick@staffpick
codex mcp login staffpick

Gemini CLI

gemini extensions install https://github.com/anyrxo/staffpick-plugin

claude.ai and Cowork

Customize, then Plugins, then Add marketplace, with anyrxo/staffpick-plugin.

The REST API

Three read-only GET endpoints for code and no-code tools that can't use MCP. Query parameters in, JSON out.

Base URL

https://staffpick.ai/api/v1

OpenAPI 3.1

https://staffpick.ai/api/v1/openapi.json

Generated from the API's own validation. Import it into any OpenAPI tool.

Auth

None. Every endpoint is public and read-only.

Rate limit

60 requests a minute per IP. Past that you get a 429 with Retry-After in seconds.

Caching

Successful responses are cached at the edge for 60 seconds and can be served a few minutes stale while they refresh. Errors are never cached.

CORS

Any origin can call it, from a browser too. Responses carry Access-Control-Allow-Origin: * and need no cookies or credentials.

GET/talent

Search tested remote staff by role, skills, business hours and budget. Results come ranked, with test scores, hourly and monthly rates in USD, and a fit label.

fit is strong when every requirement is met and tests average 70 or more, good when none is missed, stretch when one is. Fit and criteria come from fixed matching rules, not AI.

query optional

Plain words, e.g. 'bookkeeper who knows Xero'. Matched against skills, tools and headlines. Text, up to 300 characters.

role optional

Role slug. Inferred from query when left out. virtual-assistant customer-support appointment-setter social-media bookkeeper video-editor designer developer marketing ecommerce

zone optional

The business's working hours the worker must cover. us_east us_west uk eu au

budget_month_max optional

Most the business wants to pay per month in USD. Number, 50 to 20,000.

hours_per_week optional

Hours per week, used to turn hourly rates into monthly cost. Default 40. Whole number, 5 to 60.

limit optional

How many people to return, 1 to 10. Default 5. Whole number, 1 to 10.

curl -G https://staffpick.ai/api/v1/talent \
  -d role=bookkeeper -d zone=au \
  -d hours_per_week=20 -d limit=3

200 OK, trimmed to one person

{"searched": 24,"role": "Bookkeeper","results": [{"id": "66e07eaf-f494-41de-b9d8-fa3e6500f1d7","name": "Maria B.","country": "Philippines","role": "Bookkeeper","headline": "Bookkeeper for small businesses on Xero and QuickBooks","covers_business_hours": ["Australia East"],"rate_usd_per_hour": {"min": 7,"max": 10},"monthly_usd": {"min": 610,"max": 870,"hours_per_week": 20},"scores": {"english": 88,"english_band": "C2","typing_wpm": 64,"role_quiz": 94},"id_verified": true,"example_profile": true,"fit": "strong","criteria": [{"need": "Australia East hours","importance": "must","status": "met","evidence": "Works Australia East hours"}],"profile_url": "https://staffpick.ai/p/maria-b-bookkeeper-ph-8511"}],"browse_url": "https://staffpick.ai/talent/browse"}

GET/talent/{id}

One person's full anonymised profile: summary, skills, tools, languages, hours covered, rates and every test with its date.

Unknown or unlisted ids return 404. To request an intro, send the person to https://staffpick.ai/hire?talent={id}.

id in the path

The worker's id or profile slug from search_talent. Text, 3 to 120 characters.

hours_per_week optional

Hours per week for the monthly cost. Default 40. Whole number, 5 to 60.

curl -G https://staffpick.ai/api/v1/talent/TALENT_ID \
  -d hours_per_week=20

200 OK, trimmed

{"id": "66e07eaf-f494-41de-b9d8-fa3e6500f1d7","name": "Maria B.","country": "Philippines","role": "Bookkeeper","headline": "Bookkeeper for small businesses on Xero and QuickBooks","summary": "I keep the books for small service businesses in Australia and the US, from daily bank feeds to a clean month-end close.","languages": ["English","Filipino","Cebuano"],"availability": "Flexible","monthly_usd": {"min": 610,"max": 870,"hours_per_week": 20},"scores": {"english": 88,"english_band": "C2","typing_wpm": 64,"role_quiz": 94,"typing_accuracy_pct": 98},"example_profile": true,"profile_url": "https://staffpick.ai/p/maria-b-bookkeeper-ph-8511","tested_on": {"english": "2026-10-26","typing": "2026-10-26","role": "2026-10-26"}}

GET/salary-benchmark

Typical monthly pay in USD for a role at the hours you give, from the rates of real approved profiles (25th to 75th percentile).

With fewer than 5 people listed for the role it says not enough data yet instead of guessing. With 5 or more it returns monthly_usd.typical_low, typical_high and based_on_profiles.

role required

Role slug: virtual-assistant, customer-support, appointment-setter, social-media, bookkeeper, video-editor, designer, developer, marketing, ecommerce.

hours_per_week required

Hours per week, e.g. 20 for part-time, 40 for full-time. Whole number, 5 to 60.

curl -G https://staffpick.ai/api/v1/salary-benchmark \
  -d role=bookkeeper -d hours_per_week=20

200 OK

{"role": "Bookkeeper","hours_per_week": 20,"result": "not enough data yet","note": "Fewer than 5 listed people for this role, so StaffPick does not publish a range."}

Errors

Errors are problem details (RFC 9457), sent as application/problem+json.

400

A parameter is missing or out of range. errors names each one.

404

Nobody listed has that id or slug.

429

More than 60 requests a minute from your IP. Wait Retry-After seconds.

500

Something failed on StaffPick's side. The body never carries internal details.

400 Bad Request

{"type": "about:blank","title": "Invalid request","status": 400,"detail": "Check the query parameters.","errors": [{"param": "limit","message": "Too big: expected number to be <=10"}]}

Versioning and data rules

Versioning

New fields and endpoints are added to v1, so read fields by name and ignore ones you don't know. A change that would break a client ships as /api/v2.

What you get

Anonymised profiles only: first name and last initial, country, role, skills, tools, languages, test scores, rates and the business hours someone covers.

What you never get

Email, phone, surname, city, exact time zone, ID images or photos. Not through the API and not through MCP.

Intros

Intros happen on StaffPick: send people to https://staffpick.ai/hire?talent={id}. StaffPick shares contact details by email only after the worker accepts.

AI

The REST API makes no AI calls. The AI brief tool, create_role_brief, is on MCP only and capped at 40 a day per caller.

Examples

The responses on this page come from sample profiles, marked example_profile: true.

More access

Need writes or signed-in data, like your briefs and intros, over REST? Tell us what you're building.