Connect
The server speaks Streamable HTTP. Point any MCP client at the endpoint below — there is nothing to install and nothing to authenticate.
Claude Code
claude mcp add --transport http gigngo https://gigngo.org/mcp
Claude Desktop / any client using a JSON config
{
"mcpServers": {
"gigngo": {
"type": "http",
"url": "https://gigngo.org/mcp"
}
}
}
Raw JSON-RPC, to check it yourself
curl -s -X POST https://gigngo.org/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
GET /mcp, it is talking to the right server the wrong way — use POST.
The seven tools
| Tool | What it answers |
|---|---|
search_local_workers | Who does this trade near this city or state? Returns public profiles — name, bio, skills, per-skill rates, service area, profile URL. |
get_worker_profile | The full public profile for one local, by profile slug. |
list_service_categories | The 30 top-level service slugs — house-cleaning, handyman, moving-help and so on. Call this before guessing a slug. |
check_service_availability | Which services have active locals in a given state or city, with counts. Answers "can I get X done in Y?" without a search. |
browse_open_tasks | Open jobs homeowners have posted, with the budget they set, the category, the age, and how many locals have applied. |
get_area_demand_density | Per-market: jobs posted, locals who applied, share of jobs that got any reply, and median hours to a first applicant. |
get_platform_info | Coverage, category counts, app links, matching model, API docs. |
The part other marketplaces do not publish
Price tables are easy to find and mostly guesswork — a survey asking people what they
think they paid. What is hard to find is whether a posted job actually gets answered,
because it is the number that makes a marketplace look bad. get_area_demand_density
is that number, per city, and it is served straight.
Live as of 7 September 2026, over a rolling 90-day window:
345 jobs posted across 214 areas
160 applications
110 jobs (31.9%) received at least one applicant
81 of 214 areas saw any applicant at all
Los Angeles, CA 22 jobs 19 applicants 45.5% answered median 435h to first reply
Passaic, NJ 1 job 4 applicants 100% answered median 32h to first reply
confidence value — jobs ÷ (jobs + 10) — so you can tell a real
market from a lucky one. Passaic above sits at 0.09. Los Angeles sits at 0.69. Filter
with minJobs when you need the fundable shortlist rather than the heat map.
What this data is not
Reading these honestly will save you from building on something that is not there.
- There are no reviews.
ratingandreviewCountexist in the response shape and are empty for every worker on the platform. Do not rank on them, and do not present them to a user as a quality signal. - Open jobs include expired ones by default. Of 358 jobs currently returned by
browse_open_tasks, 227 are past their expiry.expiredis derived at read time and every task carries it;meta.expiredIncludedreports the count whether or not you filter. Passexpired: falseif you want a live board. The default includes them because changing it would silently move the board under existing consumers. - Supply is thin and honestly so. This is an early marketplace. Most city-and-service pairs have one local, not ten.
check_service_availabilityreturns the real count; treat a count of 1 as a count of 1. - Nobody is vetted. GigNGo does not run background checks or verify credentials, and no field in this API should be read as though it does.
- Free text is redacted, and the marker is visible. Job titles, descriptions and details pass through contact-info redaction before they are served, leaving
[phone removed]rather than deleting silently. If you are building a dataset, that marker is signal, not noise.
Conventions
- Locations are lowercase hyphenated slugs. Full state names —
new-york,florida— and city slugs likelos-angeles. Two-letter codes are accepted for state and normalised. - Service slugs come from
list_service_categories. There are 30 top-level services and 337 finer-grained category ids underneath them; the finer ids resolve to a top-level slug, and an unrecognised one resolves to null rather than being folded intoother. - Rate limit: 200 requests per 15 minutes per IP. The response carries
X-RateLimit-Reset. - Tasks carry no service radius. Matching is worker-side: each local sets the distance they are notified within. The default is 25 miles and the most common setting is 75.
The same data over plain REST
Every MCP tool wraps a public REST route, so if you are not running an MCP client the data
is still one curl away. The OpenAPI description is at
/api/openapi.json and the browsable
reference at /api/docs.
curl -s 'https://gigngo.org/api/v1/tasks/open?limit=5&expired=false'
curl -s 'https://gigngo.org/api/v1/tasks/density?minJobs=5'
curl -s 'https://gigngo.org/api/v1/platform/info'
Machine-readable discovery lives at /.well-known/mcp.json, and a plain-text summary for crawlers at /llms.txt.
Who runs it
GigNGo is a local-services marketplace built and run by one person in Grand Rapids, Michigan. Homeowners post everyday jobs; nearby locals claim them directly. There is no commission and no lead fee — locals pay a flat monthly subscription instead — so the price a homeowner agrees is the price the local keeps.
Questions, a bug, or a tool you wish existed: [email protected].