Skip to main content
Glama
chrischall

thumbtack-mcp

by chrischall

thumbtack-mcp

Unofficial Thumbtack MCP server — search local service pros, and read their profiles, ratings, reviews and credentials.

Read-only and anonymous. Thumbtack's consumer pages and its GraphQL endpoint answer without a login, so this server needs no account, no API key and no browser extension. It also cannot write: Thumbtack's write paths sit behind a reCAPTCHA-gated login that no server-side client can pass.

Thumbtack has no public consumer API. This server reads its server-rendered pages and anonymous GraphQL endpoint, and may break or violate their ToS. Developed and maintained by AI (Claude). Use at your own discretion.

Install

// .mcp.json
{ "mcpServers": { "thumbtack": { "command": "npx", "args": ["-y", "@chrischall/thumbtack-mcp"] } } }

No configuration — there are no environment variables.

Related MCP server: valet-parking-directory

Tools

Tool

What it does

thumbtack_search_pros

Search pros by trade + US ZIP. Returns up to 10 with rating, review count, lifetime hires, mean response time, profile URL.

thumbtack_resolve_service

Canonicalise a loose service name (plumbing → plumbers) by asking Thumbtack.

thumbtack_get_pro

A pro's profile: name, description, location, aggregate rating, credentials, section inventory.

thumbtack_get_pro_reviews

Reviews on a pro's profile — stars, author, date, text.

thumbtack_graphql

Escape hatch for arbitrary read-only GraphQL. Mutations refused.

thumbtack_healthcheck

Probes the page and GraphQL surfaces separately and reports the response shape still matches; each probe names a kind, and a CDN/WAF refusal page is edge_blocked.

Every read tool takes view: "compact" | "full", and compact is the default. On thumbtack_search_pros that is a hand-written field projection; on thumbtack_get_pro, thumbtack_get_pro_reviews and thumbtack_graphql it strips image URLs, which needs no knowledge of the payload's shape. Pass view: "full" for the untouched upstream records — they are large and mostly tracking metadata, which is why the slim shape is what you get without asking.

thumbtack_resolve_service and thumbtack_healthcheck take no view: both already answer with a handful of scalar fields, and a rung that cannot change anything is worse than no parameter.

Shell-only alternative

skills/thumbtack/ is a self-contained skill covering the same surface with plain curl + jq — no server process. Use it for one-shot lookups and scripts.

How it works

Three verified surfaces, all pinned in docs/THUMBTACK-API.md:

  1. Search pages — results embedded in __NEXT_DATA__.

  2. Profile pages — window.__APOLLO_STATE__ (a bare JS assignment, so it needs balanced-brace extraction) plus schema.org JSON-LD.

  3. GraphQL (app.thumbtack.com/graphql) — accepts ad-hoc anonymous queries; introspection is disabled.

Two things that bite anyone reading these pages:

  • JSON-LD @type is the trade-specific subtype, not LocalBusiness — a plumber's node is "@type":"Plumber". Match by shape, not by type name.

  • GraphQL returns HTTP 200 with an errors[] body. Status alone is never sufficient.

Not covered

  • Your own Thumbtack account (projects, messages, quotes) — the login is reCAPTCHA-gated, so there is no server-side password login.

  • The Partner Platform API (developers.thumbtack.com) — real and documented, but gated behind partner credentials ("Request Access"). It is a seller surface, not a consumer one.

Development

npm install
npm run build
npm test            # unit + server-boot smoke tests
npm run test:coverage

Coverage is enforced at 100%.

License

MIT

Available Tools

6 tools
thumbtack_get_proA
Read-only

Read a Thumbtack pro's profile: name, description, location, aggregate rating, plus credentials (background check, licences) and the section inventory. Takes a profile URL from thumbtack_search_pros.

NameRequiredDescriptionDefault
urlYesFull https://www.thumbtack.com/... pro profile URL.
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns Thumbtack's whole records.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered; the description adds the useful behavioral context that this is a single-record read keyed off a URL obtained elsewhere and previews the payload (credentials, section inventory). It says nothing about rate limits, auth, or pagination, which keeps it below a 5.

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 tight sentences, front-loaded with what is returned and closing with the input provenance. No filler, every clause carries information.

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 must preview the return, and it names the main field groups (identity, rating, credentials, section inventory) so an agent knows what to expect. It is not exhaustive, but it is sufficient 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 coverage is 100% and the 'view' enum is fully documented in the schema itself, so the schema carries the parameter burden. The description only adds provenance for 'url' and does not explain the compact/full tradeoff beyond what the schema already 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?

Specific verb ('Read') plus resource ('Thumbtack pro's profile') with an enumerated field preview (name, description, location, rating, credentials, section inventory). It is clearly distinguishable from siblings like thumbtack_search_pros and thumbtack_get_pro_reviews.

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?

Explicitly states where the required input comes from ('Takes a profile URL from thumbtack_search_pros'), which establishes the call chain and when this tool is the right next step. It gives no negative guidance (e.g. when to prefer reviews or search instead), so it falls short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

thumbtack_get_pro_reviewsA
Read-only

Read the reviews embedded on a Thumbtack pro's profile page (star rating, author, date, text). Takes a profile URL from thumbtack_search_pros.

NameRequiredDescriptionDefault
urlYesFull https://www.thumbtack.com/... pro profile URL.
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns Thumbtack's whole records.
limitNoCap the number of reviews returned.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read, live-web nature is covered. The description adds that reviews are "embedded on a pro's profile page," implying scraped content, but says nothing about pagination behavior, result caps, or failure modes when a profile has no reviews.

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 tight sentences, with the core action and scope front-loaded and the input dependency placed second. No filler or restated title text.

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 carries the return-value burden and does list the review fields returned, which is adequate. It omits any note on ordering, pagination, or how the limit interacts with the response, leaving a small gap for a scraping 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 fully documents url, view, and limit; the baseline of 3 applies. The description only reinforces the origin of the url parameter and adds no detail on the compact/full projection or the limit cap 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 (read) and resource (reviews on a pro's profile page) and even enumerates the returned fields (star rating, author, date, text). It is clearly distinguishable from the sibling thumbtack_get_pro, which returns the profile itself rather than its reviews.

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?

It gives a clear entry condition by naming where the required url comes from ("Takes a profile URL from thumbtack_search_pros"), effectively routing the agent through the search tool first. It does not state when not to use it or name alternatives for review retrieval, 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.

thumbtack_graphqlA
Read-only

Escape hatch: issue an arbitrary read-only query against Thumbtack's anonymous GraphQL endpoint. Introspection is disabled upstream, so field names must come from a page's Apollo state. Mutations are refused.

NameRequiredDescriptionDefault
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns Thumbtack's whole records.
queryYesA GraphQL query document. Must not contain a mutation or subscription.
variablesNoVariables for the query.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, it discloses decisive behavioral constraints: introspection is disabled upstream, field names must be sourced from a page's Apollo state, and mutations are refused. These are exactly the facts an agent needs to avoid failing calls, and they are not encoded in any structured field.

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 tight sentences, front-loaded with the identifying phrase 'Escape hatch,' and every clause carries distinct information (scope, introspection limitation, mutation refusal). 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 raw-query tool with no output schema (return shape is defined by the caller's query), the description covers the critical constraints but says nothing about error behavior, variable handling, or pagination. Adequate to call correctly, with minor gaps.

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 'view' enum is well documented in-schema (compact vs full projection behavior). The description adds no parameter-level detail of its own, so the baseline of 3 applies – the heavy lifting is done by the schema.

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 ('issue an arbitrary read-only query against Thumbtack's anonymous GraphQL endpoint') and frames itself as an 'escape hatch,' which immediately distinguishes it from the purpose-built siblings like thumbtack_search_pros. An agent can tell what it does and where it sits relative to the others without opening the schema.

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?

The word 'escape hatch' plus 'read-only' gives clear context for when this is appropriate (arbitrary queries the purpose-built tools don't cover). It does not, however, explicitly name an alternative tool or a fallback rule such as 'prefer thumbtack_search_pros for normal searches,' so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

thumbtack_healthcheckA
Read-only

Check that Thumbtack's anonymous surface is reachable and still has the response shape this server expects. Reports the server version, the HTML page probe and the GraphQL probe separately, each with a kind (ok, edge_blocked, http, transport, timeout, rate_limited, shape_changed, unknown).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, so the description carries the rest and does well: it discloses that the HTML page probe and GraphQL probe are reported separately and enumerates the possible `kind` outcomes (edge_blocked, rate_limited, shape_changed, etc.). It stops short of explaining what each failure mode means or how to react, which keeps it from a 5.

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 sentences, front-loaded with the purpose, then the reporting detail. The enum list is long but each value is load-bearing for interpreting output. 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?

With no output schema, the description must convey the return shape, and it does name the reported fields (server version, HTML probe, GraphQL probe, `kind`). It leaves the exact response envelope and the meaning of each `kind` unspecified, which is a modest gap for a low-complexity zero-param tool.

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 disambiguate. Baseline 4 applies; the description correctly makes no parameter claims.

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 (Check) and resource (Thumbtack's anonymous surface reachability + response shape), and further specifies what it reports. It is unmistakably a diagnostic tool and cannot be confused with the sibling search/resolve/pro/graphql tools.

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 diagnostic nature implies when it would be called (to verify connectivity/shape before or after other calls), but the description never explicitly states when to prefer it or that it is the right first step when other tools fail. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

thumbtack_resolve_serviceA
Read-only

Resolve a loose service name to the canonical Thumbtack slug by asking Thumbtack (it canonicalises via redirect, e.g. "plumbing" -> "plumbers"). Use before assuming a slug is right.

NameRequiredDescriptionDefault
zipNoZIP used to drive the lookup; does not affect the resolved slug.10001
serviceYesTrade or service name to canonicalise.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description goes further by disclosing the mechanism — Thumbtack is queried and canonicalisation happens via redirect — which explains why loose or imprecise names work. It does not mention failure behavior for unresolvable names or any rate limits.

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 with the purpose and example front-loaded and the usage cue trailing. No filler, no restatement of the title or name.

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 read-only resolver with no output schema, the description conveys the return value implicitly (a canonical slug) and the mechanism. It leaves open what happens when a name cannot be resolved, but the essential contract for calling the tool correctly is present.

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 both parameters are already documented, including the note that zip does not affect the resolved slug. The description adds only the qualifier "loose" for the service input, which is marginal value over the schema. Baseline 3 is appropriate.

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 (resolve) and resource (service name → canonical Thumbtack slug) and makes the transformation concrete with a worked example ("plumbing" -> "plumbers"). This is clearly distinct from the sibling tools, which fetch pros, reviews, or raw GraphQL rather than canonicalising a slug.

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?

"Use before assuming a slug is right" gives a clear triggering condition for the tool. It does not name a specific alternative tool or describe when-not to use it, so it falls short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

thumbtack_search_prosA
Read-only

Search Thumbtack for local service pros by trade and US ZIP code. Returns up to 10 ranked pros with rating, review count, lifetime hires, mean response time and profile URL. Anonymous — no account needed.

NameRequiredDescriptionDefault
zipYes5-digit US ZIP code to search near.
viewNoResponse shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns Thumbtack's whole records.
limitNoCap the number of pros returned (upstream page size is 10).
serviceYesTrade or service, e.g. "house cleaning", "plumbing", "electrician". Loose names are canonicalised by Thumbtack.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description goes beyond them by disclosing the result cap (up to 10 ranked pros), the ranked nature of results, the specific data fields returned, and that the call is anonymous with no account required. It omits rate limits and any note on what happens with an invalid ZIP or zero results.

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 scope, followed by return contents and the auth-free property. Every sentence carries distinct information and nothing is repeated from the schema.

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 enumerates the returned fields (rating, review count, lifetime hires, mean response time, profile URL) and the result cap, which the agent otherwise could not know. It is nearly complete; only error/empty-result behavior and any pagination caveat are unaddressed.

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 explains service, zip, limit, and the compact/full view enum in detail. The description only echoes the trade and ZIP-code dimensions and adds nothing about view or limit, so the baseline 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 (Search) plus the resource (local service pros) and its two scoping dimensions (trade and US ZIP code). This clearly separates it from siblings like thumbtack_get_pro, thumbtack_get_pro_reviews, and thumbtack_resolve_service, which operate on a single already-identified pro or on name resolution.

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 the entry-point search use case, but never states when to use this versus thumbtack_resolve_service (which appears to be the canonicalisation step for loose trade names) or when to follow up with thumbtack_get_pro. No exclusions, prerequisites, or alternatives are given, so usage must be inferred from the sibling names.

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. 6 tool updatesv0.1.5
    • Changedthumbtack_get_pro1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthumbtack_get_pro_reviews1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthumbtack_graphql1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthumbtack_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthumbtack_resolve_service1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedthumbtack_search_pros1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. 4 tool updatesv0.1.2
    • Changedthumbtack_get_pro1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Thumbtack's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedthumbtack_get_pro_reviews1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Thumbtack's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedthumbtack_graphql1 field changed
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Thumbtack's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedthumbtack_search_pros2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "default": false,
        -  "description": "Set true for slim summaries (name, rating, reviews, hires, response time, url). Default false returns the full upstream records, which are large and mostly tracking metadata.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns Thumbtack's whole records.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  3. 6 tool updatesv0.1.0
    • First observedthumbtack_get_pro
    • First observedthumbtack_get_pro_reviews
    • First observedthumbtack_graphql
    • First observedthumbtack_healthcheck
    • First observedthumbtack_resolve_service
    • First observedthumbtack_search_pros

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct step in the browse flow: slug resolution, search, profile read, reviews read, plus a healthcheck. The only soft overlap is thumbtack_graphql, which is a generic escape hatch that could duplicate other tools' work, but it is clearly labeled as a raw query fallback so misselection risk is low.

Naming Consistency4/5

Consistent snake_case with a uniform thumbtack_ prefix throughout. resolve/search/get follow a clear verb_noun pattern; graphql and healthcheck omit a verb, but their conventional naming is readable and predictable rather than chaotic.

Tool Count5/5

Six tools is a tight, well-scoped set for an anonymous read-only browsing server, and every tool earns its place (resolve, search, profile, reviews, raw fallback, healthcheck). No redundant or filler tools.

Completeness4/5

The discovery lifecycle is well covered: resolve a service, search pros, read a profile, read its reviews, plus an escape hatch for anything missed. Minor gaps like listing categories or paging results exist, but the GraphQL tool lets agents work around them.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    MCP server for searching marketplaces (TCGPlayer, Reverb, Thumbtack), verifying professional licenses (contractor, nurse), and looking up PSA card grading data. Returns real-time pricing, listings, and verification results.
    22
    127 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Public read-only MCP server backed by GetValetParking.com directory of 789 US valet parking operators across 31,186 cities. Discover valet operators by coordinates or city slug, filter by 9 service types, and fetch full operator profiles. No auth required.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Muovi, Argentina's local services marketplace. Enables discovery of verified service professionals, browsing services and cities, reading reviews, and generating deep-links for task creation.
    6
    38 npm
    1
    MIT