Skip to main content
Glama
chrischall

angi-mcp

by chrischall

angi-mcp

MCP server for Angi (formerly Angie's List) — find home-service pros by trade and city, and read their ratings, profiles and reviews.

Angi serves its pages only to a real browser, so requests route through the user's own angi.com tab via the fetchproxy browser extension, reusing their existing session. The trade/city taxonomy is read directly from Angi's public sitemaps and needs no browser at all.

No Angi account or credentials are required. Everything this server reads is public.

This project was developed and is maintained by AI (Claude). Use at your own discretion.

Install

npm install -g @chrischall/angi-mcp

Register it with your MCP host:

{
  "mcpServers": {
    "angi": { "command": "angi-mcp" }
  }
}

You also need the fetchproxy Transporter browser extension, with an open angi.com tab and its site access allowing angi.com. On the first request the extension shows a pairing code to approve; the trust then persists.

Run angi_healthcheck to confirm the bridge is connected.

Related MCP server: Kolmo Construction

Tools

Tool

What it does

angi_search_pros

Pros for a trade in a US city, with ratings, review counts, years in business, service area, amenities. 10 per page.

angi_get_pro

One pro's full profile and ratings breakdown.

angi_get_reviews

Reviews on a pro's profile — rating, text, reported cost, date, categories, the pro's response. Filterable by rating.

angi_list_trades

Every trade slug Angi publishes (~312). No bridge needed.

angi_list_cities

Cities Angi publishes pages for, per trade. No bridge needed.

angi_healthcheck

Bridge connection state.

Signed-in tools (need the browser tab signed in to Angi):

Tool

What it does

angi_get_account

Your identity and open/closed project counts.

angi_list_my_projects

Your Angi projects, open and closed.

angi_list_my_reviews

Reviews you've written, plus pros awaiting a rating.

Searches take slugs, not free text — resolve them first:

angi_list_trades   { contains: "duct" }      -> "air-duct-cleaning"
angi_list_cities   { trade: "plumbing", state: "nc", contains: "char" }
angi_search_pros   { trade: "plumbing", state: "nc", city: "charlotte", compact: true }

Pass compact: true when browsing or ranking — it projects each record to a slim summary instead of the full ~1KB payload.

Ratings

Each pro carries two overall ratings and they differ on purpose:

  • rating (averageRatings.OVERALL) — unrounded. Rank on this.

  • displayRating (averageOverallRating) — the rounded value Angi shows.

Per-dimension ratings (quality, value, punctuality, professionalism, responsiveness) come through in the full record.

isSponsored: true marks paid placement, not a quality signal.

Limits

  • No zip-code filtering. Angi's ?zip= parameter is inert — a Charlotte URL returns Charlotte pros regardless. Location comes from the city slug.

  • Account record shapes are unverified. The account used to map my.angi.com held zero projects and zero reviews, so only the envelopes were observed. angi_list_my_projects and angi_list_my_reviews return records raw and set recordFieldsVerified: false rather than projecting onto field names nobody has seen. See docs/ANGI-API.md.

  • The inbox is not readable. Angi's messages run on the Twilio Conversations SDK; the proxy endpoints reject the session cookie alone (401), so messages need the Twilio client rather than an HTTP GET.

  • Cannot be hosted remotely. Like every browser-bridge server in this fleet, it needs a signed-in tab on the machine it runs on, so it cannot be served to claude.ai from mcp-host.

Without the MCP

skills/angi-fpx/ is a shell-out skill that reads the same data with the fpx CLI and no running server — useful in scripts or on a machine where the MCP isn't installed.

Development

npm install
npm run build      # tsc --noEmit + esbuild bundle
npm test

docs/ANGI-API.md records the live-captured request/response shapes, including the verified negative results. Read it before changing src/parse.ts.

License

MIT

Available Tools

9 tools
angi_get_accountA
Read-onlyIdempotent

The signed-in Angi user: first name, user/entity ids, unread message count, and how many open and closed projects they have. Requires the browser tab to be signed in.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is known. The description adds meaningful behavioral context by specifying the authentication requirement (signed-in tab) and the exact data fields returned, which goes beyond the annotation hints.

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?

The description is a single, direct sentence that front-loads the key information ('The signed-in Angi user') and then lists the returned fields. There is no redundancy or filler; every phrase contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless, read-only tool with rich annotations, the description fully covers the essential information: what the tool returns and the authentication prerequisite. No output schema exists, but the description sufficiently explains the return contents. There are no missing aspects given the low complexity.

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 has zero parameters, and the schema (empty object) fully covers this. With no parameters to describe, the description appropriately focuses on the return value. Per the rubric, a baseline of 4 is appropriate for a parameterless tool.

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?

The description clearly states the tool returns the signed-in Angi user's first name, IDs, unread message count, and open/closed project counts. It uses a specific resource ('the signed-in Angi user') and differentiates from sibling tools like angi_get_pro and angi_search_pros, which focus on pros.

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 description provides clear context on when to use the tool: when needing current user account information. It also notes the prerequisite that the browser tab must be signed in. However, it does not explicitly mention alternatives or exclude other tools, though the sibling list makes the distinction apparent.

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

angi_get_proA
Read-onlyIdempotent

Read one Angi pro's full profile: business details, service area, hours, amenities, awards, tasks offered, contact address, and the ratings breakdown. Also reports how many reviews the page carries (fetch them with angi_get_reviews).

ParametersJSON Schema
NameRequiredDescriptionDefault
compactNoReturn a slim summary instead of the full record.
profileUrlYesThe pro's Angi profile URL or site-relative path, as returned in `profileUrl` by angi_search_pros (e.g. "/companylist/us/nc/charlotte/mkb-plumbing-and-septic-llc-reviews-8535260.htm").

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate read-only, open-world, and idempotent behavior. The description adds value by detailing what the profile includes (ratings breakdown, contact address, awards, etc.) and that it reports the review count but not the reviews themselves. This provides context beyond the annotations without contradicting them.

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 core purpose. Every element adds value, and the structured list of profile contents is efficient. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one required parameter, a schema describing both params, and a clear read-only purpose, the description fully covers what the agent needs: what the tool returns, how to interpret the profileUrl, and how to fetch reviews separately. No output schema is needed because the description enumerates the returned fields.

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?

The input schema covers both parameters with detailed descriptions, including the profileUrl format and the compact flag. The tool description does not add parameter-level semantics beyond what the schema already 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?

The description opens with a clear verb and resource: 'Read one Angi pro's full profile', then enumerates the specific fields (business details, service area, hours, etc.). It also distinguishes from siblings by explicitly pointing to angi_get_reviews for fetching reviews, making the tool's unique role obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that reviews should be fetched with angi_get_reviews, providing a direct alternative for a specific need. It also implies that this tool is for the full profile, and the phrase 'full profile' clarifies the scope relative to search (angi_search_pros). This is clear when-to-use guidance.

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

angi_get_reviewsA
Read-onlyIdempotent

Read the reviews on an Angi pro's profile page: rating, body text, reported job cost, date, service categories, verification flag, and the pro's public response where one exists. Filter by rating to isolate complaints or praise.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn at most this many reviews.
compactNoReturn a slim summary per review instead of the full record.
maxRatingNoKeep reviews rated at most this — use maxRating: 3 to surface complaints.
minRatingNoKeep reviews rated at least this.
profileUrlYesThe pro's Angi profile URL or site-relative path, as returned in `profileUrl` by angi_search_pros (e.g. "/companylist/us/nc/charlotte/mkb-plumbing-and-septic-llc-reviews-8535260.htm").

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds value by detailing exactly what data is returned (rating, body text, job cost, date, categories, etc.) and notes the conditional inclusion of the pro's public response 'where one exists.' This goes beyond the annotations without contradicting them.

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?

The description is two sentences, front-loaded with the primary action, and every word adds value. It efficiently covers both what is returned and how to filter, with no fluff.

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 tool with strong annotations and a well-described schema, the description is quite complete. It lists the return fields and filtering capability but does not mention pagination, ordering, or default limit behavior. Still, it provides enough for an agent to confidently invoke the 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?

Schema coverage is 100% with all parameters described. The description augments this by explaining the intent of rating filters ('use maxRating: 3 to surface complaints' appears in schema, but the description's 'isolate complaints or praise' reinforces the use case). This adds meaning beyond the bare parameter descriptions.

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?

The description clearly states the tool's function: 'Read the reviews on an Angi pro's profile page' and enumerates the specific data fields. This distinguishes it from sibling tools like angi_search_pros (search) and angi_get_pro (pro details) by explicitly focusing on 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?

The description implies usage: when you have a pro's profile URL and want their reviews. It also gives a concrete use case ('Filter by rating to isolate complaints or praise'), but it does not explicitly name alternatives or state when not to use the tool. The context is clear though.

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

angi_healthcheckVerify the fetchproxy bridge end-to-endA
Read-onlyIdempotent

Round-trips a small public www.angi.com URL (/robots.txt) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real www.angi.com-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only, no auth required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, but the description add significant behavioral context: it performs a round-trip to a public URL, returns specific diagnostics (role, port, version, elapsed time), and interprets failure modes. This goes well beyond what annotations alone provide, and does not contradict them.

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?

The description is two sentences: first explains what it does and what it returns, second gives usage context. It is front-loaded with action, every detail is relevant, and no words are wasted. It is concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description thoroughly covers what the tool does, what it returns, and when to use it. It even explains how to interpret the output ('distinguishing bridge never came up from extension not connected from www.angi.com-side problem'). No gaps remain for such a simple 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 has zero parameters, so the baseline is 4. The description adds meaning by specifying the fixed URL used (/robots.txt), which is not a parameter but explains the tool's input implicitly. Without parameters, no further parameter semantics are needed.

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?

The description clearly states the tool's verb ('round-trips'), specific resource ('small public www.angi.com URL /robots.txt'), and purpose (diagnostics for fetchproxy bridge). It distinguishes itself from all sibling tools by being a healthcheck/diagnostic tool, not a data-fetching tool. The conditional 'Call this when a real tool fails' further clarifies its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: 'Call this when a real tool fails and you want to know which hop broke.' This gives a clear trigger condition. It also adds 'Read-only, no auth required,' which indicates it's safe to try. No alternative tools are relevant, but the conditional usage is explicit.

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

angi_list_citiesA
Read-onlyIdempotent

List every US state/city that Angi publishes pages for, for one trade. Use it to confirm a city slug exists before searching, or to discover nearby cities. Reads Angi's public sitemap directly — no browser bridge required.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoRestrict to one two-letter state code, e.g. "nc".
tradeYesTrade slug, e.g. "plumbing".
containsNoCase-insensitive substring filter on the city slug.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description doesn't need to repeat those. It adds valuable behavioral context: 'Reads Angi's public sitemap directly — no browser bridge required,' revealing the data source and mechanism, which is beyond the annotations and helps set expectations about speed and dependencies.

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?

The description is two sentences, front-loaded with the core action, and every clause earns its place. It states the purpose, adds usage guidance, and notes a key implementation detail without redundancy or fluff.

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?

The description covers purpose, usage, and data source, which is solid for a read-only list tool. There is no output schema, so explaining return values isn't strictly required, but the description could hint at the output structure (e.g., list of slugs) or note if the result might be large. Still, the given details are sufficient for most use cases.

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%, with each parameter already documented (trade, state, contains). The description reinforces that 'trade' is the required scope ('for one trade') and implies slug usage, but adds little beyond what the schema provides. Baseline 3 is appropriate as the schema carries the weight.

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?

The description clearly states the tool's function: 'List every US state/city that Angi publishes pages for, for one trade.' It uses a specific verb ('List') with a clear resource ('US state/city') and scope ('for one trade'), distinguishing it from sibling tools like angi_list_trades which lists trades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'Use it to confirm a city slug exists before searching, or to discover nearby cities.' This provides concrete guidance on appropriate contexts and implies an alternative (searching) where this tool is a prerequisite, going beyond generic instructions.

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

angi_list_my_projectsA
Read-onlyIdempotent

The signed-in user's Angi projects (service requests and bookings), open and closed. Records are returned exactly as Angi sends them — the response sets recordFieldsVerified: false because no populated project has been observed yet, so field names should be read from the data rather than assumed.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoWhich project list to return. Defaults to all.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent), the description discloses that records are returned raw as Angi sends them and that recordFieldsVerified is false because no populated project has been observed. This provides crucial, non-obvious behavioral context about field reliability.

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?

The description is two sentences: the first states the core purpose, the second provides an important caveat. It is concise, front-loaded, and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter, the description covers what is returned, the scope, and a behavioral warning about field verification. The lack of an output schema is compensated by the note that field names should be read from data.

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?

The schema already fully documents the single 'status' parameter with its enum and default. The description adds no additional parameter-level detail, so the baseline score of 3 (high schema coverage) 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?

The description clearly states the tool lists the signed-in user's Angi projects (service requests and bookings), both open and closed. This is a specific verb+resource combination that distinguishes it from sibling tools like angi_search_pros and angi_list_my_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?

The context is clear: this tool is for fetching the current user's projects, which is distinct from searching or listing other resources. However, it does not explicitly mention alternatives or when not to use it, so it falls short of the highest bar.

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

angi_list_my_reviewsA
Read-onlyIdempotent

Reviews the signed-in user has written, plus pros Angi is prompting them to rate (unratedPros). Same caveat as projects: records pass through raw and the response sets recordFieldsVerified: false.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description adds value by disclosing that records pass through raw and the response sets recordFieldsVerified: false. This goes beyond the structured annotations and gives operational context, though it does not explain the implication of that flag.

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?

The description is two sentences, front-loading the primary function and then adding a clarified caveat. Every sentence contributes meaning, and the caveat is explained inline rather than left ambiguous. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only list tool with no output schema, the description covers the return structure (reviews + unratedPros) and a critical behavioral detail (recordFieldsVerified: false). This is complete for the tool's complexity and does not over-promise or omit necessary caveats.

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 has zero parameters, and the input schema is empty with 100% coverage. The description adds no parameter details because none exist, but it does describe the output structure (reviews and unratedPros), which is helpful given the absent output schema and parameter need.

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?

The description clearly states the tool returns reviews written by the signed-in user plus unrated pros, using a specific verb ('Reviews') and resource ('signed-in user' reviews). This distinguishes it from siblings like angi_get_reviews, which likely target other reviewers or pros.

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 use for the signed-in user's own reviews and mentions a shared caveat with projects, but it does not explicitly state when to use this tool versus alternatives such as angi_get_reviews or list_my_projects. No exclusion or alternative is named, leaving the decision to the agent's inference.

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

angi_list_tradesA
Read-onlyIdempotent

List every trade slug Angi publishes (~312, e.g. "plumbing", "air-duct-cleaning", "basement-waterproofing"). Call this to resolve a free-text trade to the slug angi_search_pros needs. Reads Angi's public sitemap directly — no browser bridge required.

ParametersJSON Schema
NameRequiredDescriptionDefault
containsNoCase-insensitive substring filter, e.g. "duct" or "roof".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent hints, and the description adds useful context: it reads Angi's public sitemap directly and requires no browser bridge, which helps an agent understand operational constraints. It does not detail the return format, but for a simple list operation this is sufficient.

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 sentences, each earning its place: purpose with examples, usage guidance naming the downstream tool, and a relevant implementation detail. Front-loaded with the action verb and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list tool with full schema annotations, the description covers what it returns (list of slugs), how to use it, and a practical scenario. The mention of 'no browser bridge required' preempts environment questions. Given annotations provide safety guarantees and the schema covers the filter, the description is complete for 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?

The single parameter 'contains' is fully documented in the schema with a clear case-insensitive substring filter example. The description does not add parameter-level detail beyond the schema, but with 100% schema coverage, the baseline score of 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?

The description opens with a specific verb and resource: 'List every trade slug Angi publishes,' including a count and concrete examples. It also distinguishes the tool from siblings by stating it resolves free-text trades to the slug needed by angi_search_pros, making its purpose unambiguous.

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 description explicitly tells when to use this tool: 'Call this to resolve a free-text trade to the slug angi_search_pros needs.' This names a related sibling and a clear prerequisite, though it does not articulate when not to use it or offer alternative tools for similar tasks.

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

angi_search_prosA
Read-onlyIdempotent

Find home-service pros on Angi for a trade in a US city. Returns each pro with ratings (overall plus per-dimension: quality, value, punctuality, professionalism, responsiveness), review count, percent-recommended, years in business, service area and amenities. trade and city are Angi slugs — resolve them with angi_list_trades and angi_list_cities first. 10 pros per page; use page to walk further. Note Angi has no zip-code filter: location comes from the city slug only.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity slug, e.g. "charlotte", "rock-hill".
pageNo1-based page number. 10 pros per page.
stateYesTwo-letter US state code, e.g. "nc".
tradeYesTrade slug, e.g. "plumbing", "roofing", "air-duct-cleaning".
compactNoReturn a slim summary per pro instead of the full record. Recommended when browsing or ranking.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations mark this as readOnly and idempotent, but the description adds substantial behavior context: return fields (ratings, review count, percent-recommended, years in business), pagination behavior (10 per page), slug requirements, and the absence of zip-code filtering. This is far beyond annotation baseline.

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?

Five focused sentences: purpose first, then return details, usage prerequisites, pagination, and a critical limitation. Every sentence adds distinct value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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 enumerates the exact returned fields including per-dimension ratings, review count, percent-recommended, years in business, service area, and amenities. It also covers pagination, prerequisite slug resolution, and the location limitation, making it complete for a search 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?

Schema covers all 5 parameters (100% coverage), so baseline is 3. The description adds meaning by clarifying that trade and city are Angi slugs requiring resolution, and explains page is used to walk through results at 10 per page, providing value beyond the property descriptions.

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?

The description uses the specific verb 'Find', identifies the resource as 'home-service pros on Angi', and scopes it to 'a trade in a US city'. This clearly distinguishes it from siblings like angi_get_pro (single pro) and angi_get_reviews (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 explicitly instructs resolving trade and city slugs with angi_list_trades and angi_list_cities first, and notes the zip-code filter limitation. It does not explicitly contrast with alternatives like angi_get_pro for single-pro lookups, but gives clear context.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedangi_get_account
    • First observedangi_get_pro
    • First observedangi_get_reviews
    • First observedangi_healthcheck
    • First observedangi_list_cities
    • First observedangi_list_my_projects
    • First observedangi_list_my_reviews
    • First observedangi_list_trades
    • First observedangi_search_pros

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: pro profiles, pro search, reviews, trade/city reference lists, user account, user projects, user reviews, and a health check. There is no overlap or ambiguity between the public data tools and the user-specific tools.

Naming Consistency4/5

All tools share the 'angi_' prefix, and most follow a verb_noun pattern (get_pro, search_pros, list_trades, get_account, etc.). The lone exception is 'angi_healthcheck', which is a compound noun rather than a verb phrase, creating a minor inconsistency.

Tool Count5/5

9 tools is well within the ideal 3-15 range and covers both public Angi data and authenticated user data without feeling bloated. Each tool serves a clear purpose, and the count is appropriate for a domain-specific MCP server.

Completeness3/5

The server covers the main read workflows for pros, reviews, trades, cities, and user data, but has notable gaps: the account tool reports unread message count with no tool to fetch messages, and there are no write operations (e.g., create project, send message) even though user projects are listed. This creates a dead end for user account actions.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    108
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing 12 tools for Seattle-area home remodeling: real-time cost estimation across 8 project types, contractor business info, project portfolio, blog content, and quote submission. Connects via Streamable HTTP — no auth required.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Housecall Pro, providing 5 tools for AI agents to register customers, schedule jobs, create estimates, log leads, and generate invoices (env-gated).
    5
    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
    114
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrischall/angi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server