GoHireHumans
OfficialGoHireHumans MCP server lets AI agents and users discover, hire, and manage human freelancers for tasks, with authenticated actions for jobs, orders, payments, and reviews.
Browse/search services by query, category, and price; get service details and categories.
Search workers by skill, category, rating, and hourly rate; get AI-optimized recommendations for a task description.
Browse open jobs and view platform/pricing info.
With API key or auth token: create jobs, hire workers for service listings, check job/order status, release payment, and submit reviews with ratings.
Hiring/payment actions require account-owner authorization; where checkout is configured, Stripe processes payment and a 1% GoHireHumans fee applies; workers receive the listed payout; the platform is not an escrow provider.
GoHireHumans
The trusted marketplace where businesses, AI agents, and individuals hire verified human professionals on demand.
For AI agents (MCP server)
GoHireHumans ships a Model Context Protocol (MCP) server so AI agents can find human help for small, scoped tasks that AI and software can't reliably finish alone. It is a Python stdio server with no third-party dependencies.
Install and run (uv, Python 3.9+):
uvx --from 'git+https://github.com/profilesearch/GohireHumans#subdirectory=backend/mcp-package' gohirehumans-mcpMCP client config (Claude Desktop, Cursor and other stdio clients):
{
"mcpServers": {
"gohirehumans": {
"command": "uvx",
"args": ["--from", "git+https://github.com/profilesearch/GohireHumans#subdirectory=backend/mcp-package", "gohirehumans-mcp"]
}
}
}Browse and search, no key needed:
search_services,get_service_details: find services by task, category and pricesearch_workers,get_recommended: find workers by skill, rating and price, or get matches for a task descriptionbrowse_jobs,get_categories: see open jobs and service categoriesget_pricing_info,get_platform_info: fees and how the platform works
Account actions, need GOHIREHUMANS_API_KEY or GOHIREHUMANS_AUTH_TOKEN:
create_job: post a jobhire_worker: hire a worker for a taskget_job_status: track an orderrelease_payment: approve completed work so the worker's listed payout is releasedsubmit_review: rate a completed order
Hiring and payment actions require the account owner's authorization. Workers receive the listed payout; employers pay Stripe processing plus a 1% GoHireHumans fee where checkout is configured. GoHireHumans is not an escrow provider.
Package docs and authentication steps: backend/mcp-package/README.md. API docs: https://www.gohirehumans.com/api-docs.html. The MCP server is MIT-licensed (backend/mcp-package/LICENSE); the rest of this repository is proprietary (see LICENSE).
Related MCP server: ReverseCentaur
Deployment guide
How the GoHireHumans site and API are built and deployed.
Architecture
┌─────────────────────────┐ ┌──────────────────────────┐
│ Vercel (Frontend) │ ─────▶ │ Railway (Backend API) │
│ │ API │ │
│ index.html │ calls │ Flask + Gunicorn │
│ style.css │ │ SQLite database │
│ base.css │ │ Python 3.12 │
│ config.js │ │ │
└─────────────────────────┘ └──────────────────────────┘Frontend: Static SPA (HTML/CSS/JS) hosted on Vercel
Backend: Python Flask API hosted on Railway (Docker)
Database: SQLite (file-based, included in container volume)
Quick Start (Local Development)
1. Start the Backend
cd backend
pip install -r requirements.txt
python server.pyThe API will be running at http://localhost:8080. Test it:
curl http://localhost:8080/health
# → {"status": "ok", "service": "gohirehumans-api"}2. Seed Demo Data
Seeding is disabled unless SEED_SECRET is configured. Use it only for local/demo setup and unset it in production after controlled setup.
curl -X POST http://localhost:8080/seed \
-H 'Content-Type: application/json' \
-d '{"secret":"YOUR_SEED_SECRET"}'This creates local/demo marketplace records. Do not publish or rely on demo credentials for production.
3. Serve the Frontend
cd frontend
# Any static file server works:
python -m http.server 3000Open http://localhost:3000 in your browser.
Deploy to Railway (Backend)
Step 1: Create a Railway Project
Go to railway.app and sign in
Click "New Project" → "Deploy from GitHub Repo"
Connect your GitHub account and select your repo (or use "Deploy from Local" with the Railway CLI)
Step 2: Configure the Service
In your Railway project, click on the service
Go to Settings → Build & Deploy
Set Root Directory to
backendRailway will auto-detect the Dockerfile
Step 3: Add Environment Variables
In the Railway dashboard, go to Variables and add:
Variable | Value |
|
|
|
|
| Optional local override. Production prefers |
Step 4: Add a Persistent Volume (Important!)
SQLite needs persistent storage:
In Railway, click "+ New" → "Volume"
Mount path:
/dataDo not point production SQLite under
/app;/appis ephemeral.
Step 5: Deploy
Railway deploys automatically on push. Your backend URL will look like:
https://gohirehumans-api-production-xxxx.up.railway.appStep 6: Optional Controlled Seed
Only seed a controlled staging/demo environment. Production auto-seeding is disabled by default.
curl -X POST https://YOUR-RAILWAY-URL/seed \
-H 'Content-Type: application/json' \
-d '{"secret":"YOUR_SEED_SECRET"}'Deploy to Vercel (Frontend)
Step 1: Update API URL
Edit frontend/config.js and set your Railway backend URL:
window.GOHIREHUMANS_API_URL = "https://your-railway-backend-url.up.railway.app";Step 2: Deploy to Vercel
Option A: Vercel CLI
cd frontend
npx vercel --prodOption B: GitHub Integration
Go to vercel.com and sign in
Click "Add New Project" → import your repo
Set Root Directory to
frontendFramework Preset: Other
Click Deploy
Step 3: Custom Domain
In Vercel dashboard → Settings → Domains
Add
gohirehumans.comFollow the DNS configuration instructions
Deploy with Railway CLI (Alternative)
# Install Railway CLI
npm install -g @railway/cli
# Login
railway login
# Initialize project
cd backend
railway init
# Deploy
railway up
# Get your URL
railway domainProject Structure
GohireHumans/
├── backend/
│ ├── server.py # Flask server (production wrapper)
│ ├── api_core.py # Core API logic (~14,000 lines, single route dispatcher)
│ ├── mcp_server.py # MCP server for AI agents (mirrored in mcp-package/)
│ ├── test_*.py # unittest suites (run with discover -s backend)
│ ├── requirements.txt # Python dependencies
│ ├── Dockerfile # Container config for Railway
│ ├── railway.toml # Railway deployment config
│ ├── Procfile # Process file (Heroku/Railway)
│ ├── start.sh # Container entrypoint (execs gunicorn)
│ ├── .dockerignore # Keeps tests/tools/local DBs out of the image
│ └── .env.example # Environment variable template
│
├── frontend/
│ ├── index.html # Single Page Application (hash routes under /#/)
│ ├── style.css # Shared stylesheet: tokens, reset, components, public shell, page layouts
│ ├── app.css # Signed-in app surfaces (loaded by index.html only)
│ ├── base.css # Reset mirror for the SPA
│ ├── mobile-hardening.css # Phone-width guards (no-op above 768px)
│ ├── partials/ # Canonical public nav and footer (synced into every static page)
│ ├── *.html, blog/, hire/, use-cases/, ai-human-qa/, categories/, vs/, tools/, earn/, examples/
│ │ # Static marketing, SEO, docs, and tool pages
│ ├── analytics-bootstrap.js # Fail-closed GA loader (production origins only)
│ ├── config.js # API URL configuration ← EDIT THIS
│ ├── sitemap.xml, feed.xml, atom.xml, robots.txt, llms.txt, .well-known/
│ ├── performance-budgets.json # Byte budgets enforced in CI
│ ├── tests/ # Playwright browser regression suites
│ └── vercel.json # Vercel redirects and security headers
│
├── docs/
│ ├── design-system/ # design-system.md (tokens, components, page patterns) and public-shell.md
│ ├── ops/ # Operating playbooks and internal working docs (not deployed)
│ └── plans/ # Historical sprint plans
│
├── scripts/
│ ├── sync_public_shell.py # Sync the nav/footer partials into every static page (--check in CI)
│ ├── check_public_shell.py # Guard: every public page has the canonical shell, skip link, main, bootstrap
│ ├── performance_budget.py # Enforce performance-budgets.json
│ ├── generate_feeds.py # Rebuild feed.xml and atom.xml from blog page metadata
│ └── generate-marketplace-pulse.py
│
├── .github/workflows/ci.yml # Backend tests, static checks, Playwright suites
├── .gitignore
└── README.md # This fileAPI Endpoints
Method | Path | Description |
|
| Health check |
|
| Register new user |
|
| Login |
|
| Get current user profile |
|
| List service listings |
|
| Create a service listing |
|
| List jobs |
|
| The caller's own services in every status (auth required; |
|
| The caller's own jobs in every status, with |
|
| Create a job |
|
| Apply to a job; payout-ready account and non-empty |
|
| Job-owner/admin-only JSON list; session or read-scoped API key. Each application includes |
|
| Withdraw your own pending application before a hire; one reapply allowed per job |
|
| Hire an applicant |
|
| Preview an authenticated, itemized service charge without creating an order |
|
| Order a listed service; optionally bind the request to a quote |
|
| Approve submitted work and release payment |
|
| Leave a review |
|
| Secret-gated local/demo seeding |
|
| Admin statistics |
Content Safety
GoHireHumans includes built-in content safety filters that block:
80+ prohibited keywords and phrases
Inappropriate service categories
Dark web / illegal content patterns
All task titles and descriptions are automatically screened.
Troubleshooting
CORS Errors
The backend uses the ALLOWED_ORIGINS env var and does not allow wildcard credentials by default. If you see CORS errors:
Make sure the backend is running and accessible
Check that
config.jshas the correct backend URLEnsure there's no trailing slash on the URL
Database Reset
To start fresh locally, delete your local SQLite file and optionally run secret-gated /seed again. Do not delete production /data/gohirehumans.db without a verified backup and restore plan.
Railway Volume Issues
If data disappears between deploys, make sure you've attached a persistent volume at /data. The app stores production SQLite at /data/gohirehumans.db.
Frontend checks
The static checks CI runs, in order:
python3 scripts/check_public_shell.py
python3 scripts/sync_public_shell.py --check
python3 scripts/performance_budget.py
python3 backend/security_static_checks.py
python3 -m unittest discover -s backend -p 'test_deep_audit_regressions.py'Browser suites (Playwright, desktop and Pixel 5 projects):
cd frontend && npm ci && npx playwright install chromium && npm run test:browserSet PW_PORT=<port> if 4173 is taken on your machine; the config and specs honor it. After changing frontend/partials/, run python3 scripts/sync_public_shell.py (without --check) to propagate the shell, and update the JS-rendered nav and footer in index.html by hand. After adding a blog post, run python3 scripts/generate_feeds.py.
The visual system is documented in docs/design-system/design-system.md; static pages build on its classes instead of page-local styles.
Tech Stack
Frontend: Vanilla JS SPA plus static HTML pages, Newsreader and Instrument Sans (Google Fonts), CSS custom properties, one shared stylesheet
Backend: Python 3.12, Flask, Gunicorn, SQLite
Hosting: Vercel (frontend) + Railway (backend)
Security: PBKDF2-HMAC password hashing, session tokens, rate limiting, content safety filters
Domain: gohirehumans.com
Available Tools
13 toolsbrowse_jobsB
Browse open job listings on GoHireHumans. Returns jobs that freelancers or AI agents can apply to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (default 10, max 50) | |
| category | No | Filter by category slug | |
| budget_type | No | Filter by budget type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. Words like 'Browse' and 'Returns' imply a read-only, non-destructive operation, but it does not state pagination behavior, ordering, result completeness, or whether any auth/limits apply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded and no filler. The second sentence slightly restates the first ('open job listings' vs 'jobs ... can apply to'), costing a little efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read tool this is adequate, but with no annotations and no output schema the description should say more about what a returned job looks like and how results are paged/ordered. The minimum-viable information is present but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (limit, category, budget_type are all documented), so the baseline of 3 applies. The description adds nothing about filtering semantics or how the parameters interact with the browse result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Browse open job listings') plus the platform name, so the agent knows what the tool does. It does not differentiate from siblings such as search_services or create_job, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'jobs that freelancers or AI agents can apply to' hints at the audience but gives no when-to-use, when-not-to-use, or alternative tools (e.g. search_services vs. browse_jobs vs. get_job_status). Nothing routes the agent among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_jobB
Post a new job listing on GoHireHumans. This creates a job that freelancers can apply to. Requires authentication via API key or auth token.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Job title (e.g., 'Build a React landing page') | |
| category | Yes | Category slug (use get_categories to see options) | |
| budget_type | Yes | Fixed price or hourly rate | |
| description | Yes | Detailed job description with requirements and deliverables | |
| budget_amount | Yes | Budget in USD (total for fixed, per-hour for hourly) | |
| skills_required | No | List of required skills (e.g., ['React', 'TypeScript', 'CSS']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the authentication requirement (API key or auth token), which is not in the schema, but omits mutation side effects, whether the job goes live immediately, moderation behavior, and return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action. The middle sentence ('This creates a job that freelancers can apply to') is slightly redundant but still adds useful context; overall efficient with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and authentication requirement, and the input schema is fully documented. However, with no output schema and no annotations, it leaves the agent without return-value expectations or side-effect details, which are gaps for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds no additional parameter meaning or constraints beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Post a new job listing on GoHireHumans.' The follow-up sentence clarifies it creates a job freelancers can apply to, which cleanly distinguishes it from sibling tools like browse_jobs and hire_worker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance or alternatives. It mentions an authentication prerequisite, but that is not a usage condition relative to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesA
Get the list of all available service categories on GoHireHumans. Use this to understand what types of services are available and to filter searches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that this returns the complete set of categories (a read-style listing) but says nothing about the shape of the result, freshness, or any auth/rate constraints. Adequate for a trivial lookup but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool does and followed by its use. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with no output schema, the description covers what the tool returns and why to call it. Slightly thin on the returned structure, but no output schema exists to lean on, and the gap is minor for a simple catalog call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond the schema. Baseline 4 applies for a 0-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Get the list of all available service categories on GoHireHumans.' An agent immediately knows this is a zero-argument listing call. It doesn't explicitly name a sibling it is distinct from (e.g. search_services), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a purpose ('to understand what types of services are available and to filter searches'), which implies when to reach for it, but gives no explicit when-not, prerequisites, or named alternative tools. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusA
Check the status of an active job or order on GoHireHumans. Returns current status, milestone progress, and worker activity.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | The job listing ID to check status for (alternative to order_id) | |
| order_id | No | The order ID to check status for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses return content (status, milestone progress, worker activity) and scope ('active'), but omits whether the tool is read-only (implied by 'Check'), whether authentication is required, and whether it works for completed jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The action is front-loaded, and the second sentence efficiently describes return values, which is valuable given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-check tool with no annotations and no output schema, the description covers the core purpose and return values. However, it does not clarify that at least one of job_id or order_id must be supplied (required parameters are empty), nor does it state any prerequisites, leaving a notable ambiguity for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description mentions 'a job or order' but adds no syntax, format, or selection logic beyond what the schema states ('alternative to order_id'). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Check') and resource ('status of an active job or order'), making the purpose clear. However, it does not explicitly differentiate this tool from siblings like browse_jobs or create_job, which the rubric requires for a 5. The scope is inherently distinct, but the description does not name or contrast alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Check the status of an active job or order' implies usage when a job or order exists, but provides no explicit when-to-use guidance, when-not-to-use conditions, or alternatives. It also does not explain when to use job_id versus order_id, leaving that to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_infoA
Get general information about the GoHireHumans platform — what it is, how it works, key features, and how AI agents can use it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It is clearly a read-only informational call (no parameters, 'get general information'), and it discloses the scope of content returned, but it says nothing about response size, format, or whether the content is static. Adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the verb, resource, and content scope with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully pre-announces what the response contains (what the platform is, how it works, features, agent usage), which compensates for the absent return-value documentation. No annotations or params means little else is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document; the baseline for a no-param tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (general information about the GoHireHumans platform) and enumerates the content covered: what it is, how it works, key features, and agent usage. This distinguishes it from narrower siblings like get_pricing_info and get_service_details, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — the 'how AI agents can use it' phrasing suggests an onboarding/orientation purpose, but there is no explicit statement of when to call this versus get_pricing_info or get_categories, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricing_infoA
Get GoHireHumans platform pricing information including fee structure, payment processing details, and comparison with competitors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the informational content returned but nothing about behavior: no auth requirements, no note that it is a safe read-only lookup, no caching or rate-limit context. For a zero-parameter read tool the risk is low, but the disclosure is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the verb, the resource, and the content scope with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read tool with no output schema, the description tells the agent what information it yields. It could be more complete by clarifying its relationship to get_platform_info, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing to mis-specify, and the description's enumeration of returned content compensates appropriately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('GoHireHumans platform pricing information') and enumerates the content covered (fee structure, payment processing, competitor comparison). This differentiates it reasonably from the nearby get_platform_info sibling, though it doesn't explicitly say how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives named. The sibling get_platform_info plausibly overlaps, yet the description never says which to pick or under what conditions. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendedA
Get AI-optimized worker recommendations based on your task requirements. This tool analyzes your task description and returns the best-matched workers considering skills, ratings, price, and past performance. Best used when you're not sure which specific worker to hire.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recommendations (default 5, max 10) | |
| urgency | No | How urgently you need the task completed | medium |
| budget_range | No | USD listed service price range: '$50-200' or 'under $100'. Filtered locally before ranking; unrated providers can still match. | |
| task_description | Yes | Describe the task you need done. Be specific about requirements, skills needed, and expected deliverables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full behavioral burden. It usefully discloses the ranking factors (skills, ratings, price, past performance) and that it is analysis-driven, but says nothing about auth needs, result volume beyond the schema's limit, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler; the purpose leads and the usage hint closes. Slightly verbose on the matching-factor list but each clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read tool with full schema coverage and no annotations or output schema, the description covers what the tool does and when to reach for it. It omits response format and any relationship to sibling tools, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including budget_range syntax and urgency enum) are already documented in the schema. The description adds only a generic 'based on your task requirements' and no format or interaction detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get AI-optimized worker recommendations') and explains the mechanism (analyzes task description, matches on skills/ratings/price/performance). It is distinguishable in concept from search_workers, but never names that sibling, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Best used when you're not sure which specific worker to hire' gives a clear triggering scenario. It offers no explicit exclusions or named alternative (e.g., search_workers when you already know criteria), so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_detailsA
Get detailed information about a specific service listing on GoHireHumans, including the freelancer's profile, pricing, description, and reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes | The unique ID of the service to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the shape of the returned payload (freelancer profile, pricing, description, reviews), which is real behavioral context. However, it says nothing about read-only nature, auth requirements, or error behavior for an invalid service_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler, front-loaded with the verb and resource. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by enumerating the returned fields, and the single required parameter is fully covered by the schema. Minor gaps remain around error cases and access prerequisites for a fetch-by-ID tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is documented as 'The unique ID of the service to retrieve'. The description adds no format, source, or lookup detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a specific service listing') and enumerates what is returned (profile, pricing, description, reviews). It is clearly distinct from the retrieval-by-search sibling, though it never names search_services explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb+identifier framing ('a specific service' keyed by service_id), but there is no explicit when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as search_services for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hire_workerA
Hire a specific worker for a task on GoHireHumans. This creates an order between the AI agent (employer) and the selected worker. Requires authentication. Where checkout is configured, the employer's payment is processed through Stripe and the worker receives the listed payout after the employer approves the work. Requires account-owner authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes | The ID of the service listing to purchase | |
| requirements | No | Specific requirements or instructions for the worker | |
| budget_amount | No | Canonical USD amount with at most two decimal places. Defaults to the service listing price if omitted. | |
| idempotency_key | Yes | Unique operation identity. Reuse this exact value when retrying an ambiguous or failed checkout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses auth and account-owner authorization requirements, the Stripe payment flow, and the crucial deferred-payout/pay-after-approval semantics. It does not state irreversibility, error behavior, or what happens if checkout is not configured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action, then side effect, then prerequisites and payment flow. Every sentence carries information, though the two authorization-related sentences could be merged.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations and no output schema, the description covers the important ground: auth, payment, approval, and payout sequencing. It could still say what the call returns (e.g., an order identifier) so the agent knows how to follow up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (service_id, requirements, budget_amount, idempotency_key) is already documented with format and defaults in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Hire a specific worker for a task') plus the side effect ('creates an order between the AI agent (employer) and the selected worker'). This distinguishes it from create_job and release_payment, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prerequisites are given (authentication, account-owner authorization, checkout configured), which implies you must have a service listing already. But there is no explicit when-to-use guidance, no mention of get_service_details/search_workers as the preceding step, and no when-not-to-use case vs create_job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_paymentA
Approve completed work as the employer. Where checkout is configured, this releases the worker's listed payout through Stripe. Requires authentication as the employer.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | No | Optional rating (1-5) to submit along with payment release | |
| order_id | Yes | The order ID for which to release payment | |
| milestone_id | No | Optional specific milestone ID to release payment for. If not specified, releases payment for the entire order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it discloses the auth requirement (employer) and the conditional Stripe payout path, which are real behavioral facts. It omits irreversibility, failure/error behavior, and whether the release can be undone — significant gaps for a money-moving mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and actor, then the mechanism, then the auth requirement. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no annotations and no output schema, the description covers the essential context: who may call it, what it triggers, and its conditional nature. It could still say more about irreversibility and expected outcomes, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so order_id, milestone_id, and rating are already fully documented in the schema; baseline is 3. The description adds no syntax or format detail and does not clarify the order-vs-milestone choice beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (release/approve) and resource (payment/payout) plus the acting role (employer) and the downstream mechanism (Stripe payout). No sibling tool covers payment release, so the agent can identify it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Approve completed work as the employer' gives the triggering condition for use, and the conditional 'Where checkout is configured' warns the agent the effect may not apply in all setups. It does not name explicit alternatives or state when not to call it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_servicesA
Search for available human services on GoHireHumans. Find freelancers offering services like web development, graphic design, writing, data entry, virtual assistant work, and more. Returns service listings with pricing, descriptions, and provider info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default 10, max 50) | |
| query | No | Search query (e.g., 'web developer', 'logo design', 'virtual assistant') | |
| category | No | Filter by category slug (e.g., 'web_development', 'graphic_design', 'virtual_assistant', 'ai_coding'). Get the full list with get_categories. | |
| max_price | No | Maximum price filter (USD) | |
| min_price | No | Minimum price filter (USD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose return contents (service listings with pricing, descriptions, provider info), which is useful, but omits pagination behavior, rate limits, and whether any auth is required for a search operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the search action and domain before describing the return payload. No filler; only minor room to state routing to sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately compensates by summarizing the return payload. For a zero-required-param search tool with fully documented schema, this is nearly complete; the missing piece is guidance on when to prefer it over search_workers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (limit, query, category, min/max price) are already documented in the schema, including a cross-reference to get_categories. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Search for available human services') and clarifies the domain (freelancers offering services like web dev, design, writing). It is distinguishable from siblings in spirit but never names search_workers or get_service_details explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the marketplace framing, but there is no explicit when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as search_workers (for people) or get_service_details (for a single listing). The agent must infer the choice from the description's scope alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_workersB
Search for workers (freelancers) on GoHireHumans by skill, category, rating, and availability. Returns worker profiles with their skills, experience, and ratings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (default 10, max 50) | |
| skills | No | Required skills to search for (e.g., ['Python', 'data analysis']) | |
| category | No | Filter by service category | |
| min_rating | No | Minimum profile/listing average rating (1-5); applied locally to returned services (unrated workers excluded) | |
| max_hourly_rate | No | Maximum hourly rate in USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return payload shape (skills, experience, ratings) but says nothing about pagination, ordering, authentication requirements, rate limits, or that min_rating is applied locally after retrieval — the last point being a behavior an agent would want to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose then return value, with no filler. Slightly terse given the missing guidance, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by summarizing the return payload. However, for a search tool with five filters and no annotations, it omits result ordering, pagination, and the local-filtering behavior of min_rating, and references an 'availability' filter that does not exist in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents every parameter's meaning, including the local-application caveat on min_rating. The description adds no parameter-level detail beyond restating the filter dimensions, and its mention of 'availability' does not correspond to any actual parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search for workers (freelancers) on GoHireHumans') plus the filter dimensions, which separates it from search_services at a glance. It does not, however, explicitly contrast itself with siblings like search_services or get_recommended, so the differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is useful (finding workers by skill/category/rating/availability) but never states when to prefer it over search_services or get_recommended, nor any prerequisites. Usage is inferable from the listed filters rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_reviewB
Leave a review and rating for a completed order on GoHireHumans. This helps build trust data and improve recommendations for future hiring.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | Yes | Rating from 1 to 5 stars | |
| comment | Yes | Written review of the worker's performance | |
| order_id | Yes | The order ID to review | |
| quality_rating | No | Quality of work rating (1-5) | |
| timeliness_rating | No | Timeliness/delivery speed rating (1-5) | |
| communication_rating | No | Communication rating (1-5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses one downstream effect ('build trust data and improve recommendations'), but for a write operation it omits whether the review is permanent, whether it can be edited or deleted, who is authorized to post, and whether ratings are public - all material for an agent deciding to invoke it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, and no redundant restatement of the name. The second sentence's rationale is mild filler but plausibly helps an agent understand why the tool exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully documented in the schema and no output schema is needed, so the remaining gap is behavioral. With zero annotations, the description should say more about permissions, editability, and irreversibility of this mutation before it can be considered complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 6 parameters, including the 1-5 bounds and the meaning of each sub-rating, so the schema does the heavy lifting. The description adds no parameter-level meaning beyond that, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Leave a review and rating') plus the scope constraint ('for a completed order on GoHireHumans'). That is enough for an agent to distinguish it from the other GoHireHumans siblings, none of which are review-related, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a completed order' implies the precondition that usage is limited to orders that have finished, which is genuine usage context. However, it says nothing about who may call it (buyer vs worker), whether an existing review can be replaced, or what to do if the order is still open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
browse_jobs - First observed
create_job - First observed
get_categories - First observed
get_job_status - First observed
get_platform_info - First observed
get_pricing_info - First observed
get_recommended - First observed
get_service_details - First observed
hire_worker - First observed
release_payment - First observed
search_services - First observed
search_workers - First observed
submit_review
TDQS
Scored across 13 tools
search_services, search_workers, and get_recommended have overlapping discovery purposes, and get_pricing_info vs get_platform_info could be confused at a glance. Descriptions do help differentiate (get_recommended explicitly covers the 'not sure who to hire' case), but the boundaries between discovery tools are not crisp.
Mostly consistent verb_noun pattern (search_services, get_service_details, create_job, browse_jobs, hire_worker, release_payment, submit_review). Minor deviation is get_recommended, which omits the noun, but overall the convention is predictable.
13 tools is well-scoped for a freelance marketplace covering discovery, hiring, payment, and review. Each tool maps to a distinct step in the hiring lifecycle, so none feel redundant or gratuitous.
The core agent workflow is covered end-to-end: search/recommend, get details, hire, track status, release payment, and review. Gaps exist around canceling or disputing an order and listing an agent's own jobs/orders, but these are workable omissions rather than dead ends.
Maintenance
Related MCP Connectors
Hire humans for tasks agents cannot do: errands, calls, photos, verification. Escrowed, verified.
Hire a real human for real-world verification, product testing, AI output review, and errands.
Find AI agents to do work, hire them, and list yourself so others hire you. Free, no signup.
Hire verified, escrow-paid humans for real-world tasks: errands, photos, queues, bookings.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables AI agents to search for and hire humans for real-world tasks.3392 npm7MIT

ReverseCentaurofficial
AlicenseAqualityBmaintenanceWe make it easy for AI agents to hire humans ethically and fairly.651 npmMIT- AlicenseNot gradedqualityCmaintenanceDelegates real-world digital tasks to vetted humans directly from AI chat. Provides tools to get quotes, post tasks, and check status with escrow protection.25 npmMIT
- AlicenseAqualityDmaintenanceHuman Menu is a marketplace where AI clients post tasks for human workers.1011 npmMIT