{
  "markdown": "# thumbtack-mcp\n\nUnofficial [Thumbtack](https://www.thumbtack.com) MCP server — search local\nservice pros, and read their profiles, ratings, reviews and credentials.\n\n**Read-only and anonymous.** Thumbtack's consumer pages and its GraphQL\nendpoint answer without a login, so this server needs no account, no API key\nand no browser extension. It also cannot write: Thumbtack's write paths sit\nbehind a reCAPTCHA-gated login that no server-side client can pass.\n\n> Thumbtack has no public consumer API. This server reads its server-rendered\n> pages and anonymous GraphQL endpoint, and may break or violate their ToS.\n> Developed and maintained by AI (Claude). Use at your own discretion.\n\n## Install\n\n```jsonc\n// .mcp.json\n{ \"mcpServers\": { \"thumbtack\": { \"command\": \"npx\", \"args\": [\"-y\", \"@chrischall/thumbtack-mcp\"] } } }\n```\n\nNo configuration — there are no environment variables.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `thumbtack_search_pros` | Search pros by trade + US ZIP. Returns up to 10 with rating, review count, lifetime hires, mean response time, profile URL. |\n| `thumbtack_resolve_service` | Canonicalise a loose service name (`plumbing` → `plumbers`) by asking Thumbtack. |\n| `thumbtack_get_pro` | A pro's profile: name, description, location, aggregate rating, credentials, section inventory. |\n| `thumbtack_get_pro_reviews` | Reviews on a pro's profile — stars, author, date, text. |\n| `thumbtack_graphql` | Escape hatch for arbitrary read-only GraphQL. Mutations refused. |\n| `thumbtack_healthcheck` | Probes the page and GraphQL surfaces separately and reports the response shape still matches. |\n\nEvery read tool takes `view: \"compact\" | \"full\"`, and **`compact` is the\ndefault**. On `thumbtack_search_pros` that is a hand-written field projection;\non `thumbtack_get_pro`, `thumbtack_get_pro_reviews` and `thumbtack_graphql` it\nstrips image URLs, which needs no knowledge of the payload's shape. Pass\n`view: \"full\"` for the untouched upstream records — they are large and mostly\ntracking metadata, which is why the slim shape is what you get without asking.\n\n`thumbtack_resolve_service` and `thumbtack_healthcheck` take no `view`: both\nalready answer with a handful of scalar fields, and a rung that cannot change\nanything is worse than no parameter.\n\n## Shell-only alternative\n\n`skills/thumbtack/` is a self-contained skill covering the same surface with\nplain `curl` + `jq` — no server process. Use it for one-shot lookups and\nscripts.\n\n## How it works\n\nThree verified surfaces, all pinned in [`docs/THUMBTACK-API.md`](docs/THUMBTACK-API.md):\n\n1. **Search pages** — results embedded in `__NEXT_DATA__`.\n2. **Profile pages** — `window.__APOLLO_STATE__` (a bare JS assignment, so it\n   needs balanced-brace extraction) plus schema.org JSON-LD.\n3. **GraphQL** (`app.thumbtack.com/graphql`) — accepts ad-hoc anonymous\n   queries; introspection is disabled.\n\nTwo things that bite anyone reading these pages:\n\n- **JSON-LD `@type` is the trade-specific subtype**, not `LocalBusiness` — a\n  plumber's node is `\"@type\":\"Plumber\"`. Match by shape, not by type name.\n- **GraphQL returns HTTP 200 with an `errors[]` body.** Status alone is never\n  sufficient.\n\n## Not covered\n\n- **Your own Thumbtack account** (projects, messages, quotes) — the login is\n  reCAPTCHA-gated, so there is no server-side password login.\n- **The Partner Platform API** (`developers.thumbtack.com`) — real and\n  documented, but gated behind partner credentials (\"Request Access\"). It is a\n  seller surface, not a consumer one.\n\n## Development\n\n```sh\nnpm install\nnpm run build\nnpm test            # unit + server-boot smoke tests\nnpm run test:coverage\n```\n\nCoverage is enforced at 100%.\n\n## License\n\nMIT\n",
  "bytes": 3701,
  "sha": "a4c64d0d70cb741d1e8dedf5347b231aea79d6e517249abd171f849df8b4c5cc",
  "repo_slug": "chrischall/thumbtack-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chrischall_thumbtack_mcp_d9318fae/readme"
}