Skip to main content
Glama

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-mcp

MCP 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 price

  • search_workers, get_recommended: find workers by skill, rating and price, or get matches for a task description

  • browse_jobs, get_categories: see open jobs and service categories

  • get_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 job

  • hire_worker: hire a worker for a task

  • get_job_status: track an order

  • release_payment: approve completed work so the worker's listed payout is released

  • submit_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.py

The 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 3000

Open http://localhost:3000 in your browser.


Deploy to Railway (Backend)

Step 1: Create a Railway Project

  1. Go to railway.app and sign in

  2. Click "New Project" → "Deploy from GitHub Repo"

  3. Connect your GitHub account and select your repo (or use "Deploy from Local" with the Railway CLI)

Step 2: Configure the Service

  1. In your Railway project, click on the service

  2. Go to Settings → Build & Deploy

  3. Set Root Directory to backend

  4. Railway will auto-detect the Dockerfile

Step 3: Add Environment Variables

In the Railway dashboard, go to Variables and add:

Variable

Value

PORT

8080 (Railway usually sets this automatically)

FLASK_DEBUG

false

DATABASE_PATH

Optional local override. Production prefers /data/gohirehumans.db.

Step 4: Add a Persistent Volume (Important!)

SQLite needs persistent storage:

  1. In Railway, click "+ New" → "Volume"

  2. Mount path: /data

  3. Do not point production SQLite under /app; /app is ephemeral.

Step 5: Deploy

Railway deploys automatically on push. Your backend URL will look like:

https://gohirehumans-api-production-xxxx.up.railway.app

Step 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 --prod

Option B: GitHub Integration

  1. Go to vercel.com and sign in

  2. Click "Add New Project" → import your repo

  3. Set Root Directory to frontend

  4. Framework Preset: Other

  5. Click Deploy

Step 3: Custom Domain

  1. In Vercel dashboard → Settings → Domains

  2. Add gohirehumans.com

  3. Follow 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 domain

Project 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 file

API Endpoints

Method

Path

Description

GET

/health

Health check

POST

/auth/register

Register new user

POST

/auth/login

Login

GET

/profile

Get current user profile

GET

/services

List service listings

POST

/services

Create a service listing

GET

/jobs

List jobs

GET

/me/services

The caller's own services in every status (auth required; page, per_page, status, include_removed)

GET

/me/jobs

The caller's own jobs in every status, with application_count (auth required)

POST

/jobs

Create a job

POST

/jobs/{id}/apply

Apply to a job; payout-ready account and non-empty cover_message required, optional http(s) portfolio_url; incomplete payout setup returns 403 payout_setup_required

GET

/jobs/{id}/applications

Job-owner/admin-only JSON list; session or read-scoped API key. Each application includes worker_payout_ready (boolean synced hint), suggested_rank (1–3 or null), and suggestion_reasons (up to three fixed-copy strings, empty when not suggested). Only eligible, payout-ready pending/shortlisted applicants on open/reviewing fixed-price jobs with hiring enabled are suggested; no padding, no numeric score. Hiring still re-checks Stripe live; the buyer chooses.

DELETE

/jobs/{id}/apply

Withdraw your own pending application before a hire; one reapply allowed per job

POST

/jobs/{id}/hire

Hire an applicant

GET

/services/{id}/quote

Preview an authenticated, itemized service charge without creating an order

POST

/services/{id}/order

Order a listed service; optionally bind the request to a quote

POST

/orders/{id}/approve

Approve submitted work and release payment

POST

/orders/{id}/review

Leave a review

POST

/seed

Secret-gated local/demo seeding

GET

/admin/dashboard

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:

  1. Make sure the backend is running and accessible

  2. Check that config.js has the correct backend URL

  3. Ensure 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:browser

Set 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 tools
browse_jobsB

Browse open job listings on GoHireHumans. Returns jobs that freelancers or AI agents can apply to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results (default 10, max 50)
categoryNoFilter by category slug
budget_typeNoFilter by budget type

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesJob title (e.g., 'Build a React landing page')
categoryYesCategory slug (use get_categories to see options)
budget_typeYesFixed price or hourly rate
descriptionYesDetailed job description with requirements and deliverables
budget_amountYesBudget in USD (total for fixed, per-hour for hourly)
skills_requiredNoList of required skills (e.g., ['React', 'TypeScript', 'CSS'])

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNoThe job listing ID to check status for (alternative to order_id)
order_idNoThe order ID to check status for

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_service_detailsA

Get detailed information about a specific service listing on GoHireHumans, including the freelancer's profile, pricing, description, and reviews.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_idYesThe unique ID of the service to retrieve

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_idYesThe ID of the service listing to purchase
requirementsNoSpecific requirements or instructions for the worker
budget_amountNoCanonical USD amount with at most two decimal places. Defaults to the service listing price if omitted.
idempotency_keyYesUnique operation identity. Reuse this exact value when retrying an ambiguous or failed checkout.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratingNoOptional rating (1-5) to submit along with payment release
order_idYesThe order ID for which to release payment
milestone_idNoOptional specific milestone ID to release payment for. If not specified, releases payment for the entire order.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (default 10, max 50)
queryNoSearch query (e.g., 'web developer', 'logo design', 'virtual assistant')
categoryNoFilter by category slug (e.g., 'web_development', 'graphic_design', 'virtual_assistant', 'ai_coding'). Get the full list with get_categories.
max_priceNoMaximum price filter (USD)
min_priceNoMinimum price filter (USD)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results (default 10, max 50)
skillsNoRequired skills to search for (e.g., ['Python', 'data analysis'])
categoryNoFilter by service category
min_ratingNoMinimum profile/listing average rating (1-5); applied locally to returned services (unrated workers excluded)
max_hourly_rateNoMaximum hourly rate in USD

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratingYesRating from 1 to 5 stars
commentYesWritten review of the worker's performance
order_idYesThe order ID to review
quality_ratingNoQuality of work rating (1-5)
timeliness_ratingNoTimeliness/delivery speed rating (1-5)
communication_ratingNoCommunication rating (1-5)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 13 tool updatesv0.1.0
    • First observedbrowse_jobs
    • First observedcreate_job
    • First observedget_categories
    • First observedget_job_status
    • First observedget_platform_info
    • First observedget_pricing_info
    • First observedget_recommended
    • First observedget_service_details
    • First observedhire_worker
    • First observedrelease_payment
    • First observedsearch_services
    • First observedsearch_workers
    • First observedsubmit_review

TDQS

A3.6/5.0

Scored across 13 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers