MCP Server

PestPin

com.pestpin/pestpin
Business & Operations Legal & Compliance Public & reachable MCP 2026-07-28

What this MCP does

Verifies US pest-control licenses and phone records, finds licensed providers, and supplies planning cost ranges and enquiry links.

find_licensed_pros
Find licensed pest control companies
Find licensed pest control companies near a US city. Returns up to 8 businesses that hold a state license record covering that city and pest type, each with its license number, published phone number, the official state source link, and the date PestPin last processed that source. Also returns a link to the full list, where a homeowner can call any company for free or send one request that is offered to a single company at a time and never resold. Listings are matched public records, not recommendations or a ranking, and most businesses have not confirmed services or coverage with PestPin.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['city', 'state'], 'properties': {'city': {'type': 'string', 'examples': ['Houston', 'Orlando'], 'maxLength': 60, 'minLength': 2, 'description': 'City name, e.g. Houston. A city name only, never a street address.'}, 'pest': {'type': 'string', 'examples': ['termites', 'bed bugs'], 'maxLength': 40, 'description': 'Optional pest type, e.g. termites, bed bugs, rodents, ants, cockroaches, mosquitoes, wildlife. Defaults to general pest control.'}, 'state': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'examples': ['TX', 'FL'], 'description': 'Two-letter US state code, e.g. TX'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['companies', 'note'], 'properties': {'note': {'type': 'string', 'description': 'The limits a reader must be told'}, 'pest': {'type': 'string', 'description': 'Pest type the answer covers'}, 'location': {'type': 'string', 'description': 'City and state the answer covers'}, 'companies': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'verifyAtOfficialSource', 'sourceCheckedOn', 'sourceCheckedOnScope', 'pestpinProfile'], 'properties': {'name': {'type': 'string', 'description': 'Business name as the state record spells it'}, 'phone': {'type': ['string', 'null'], 'description': 'Published phone number, when the record has one'}, 'licenseState': {'type': ['string', 'null'], 'description': 'Two-letter state that issued the license'}, 'licenseNumber': {'type': ['string', 'null'], 'description': 'License number on the state record'}, 'pestpinProfile': {'type': 'string', 'description': 'PestPin page for this record'}, 'sourceCheckedOn': {'type': ['string', 'null'], 'description': 'ISO date PestPin last processed the source behind this record'}, 'officialSourceAgency': {'type': ['string', 'null'], 'description': 'Name of the state agency that publishes the record'}, 'sourceCheckedOnScope': {'enum': ['record', 'state'], 'type': 'string', 'description': "'record' when the date is this record's own last check, 'state' when it is the last time PestPin processed that state's source"}, 'verifyAtOfficialSource': {'type': 'string', 'description': 'Official state regulator page where this record can be checked'}}}}, 'fullListAndFreeRequest': {'type': 'string', 'description': 'PestPin page with the full list and the free request form'}, 'totalRecordMatchedCompanies': {'type': 'integer', 'description': 'How many license-record companies match, before the 8-row cap'}}}
get_intro_request_link
Get a free introduction request link
Get the link that starts a free request for pest control help in a US city. The request goes to one licensed company at a time, never to several at once and never resold, and the homeowner pays nothing at any point. This tool only builds and returns the link plus what happens next; it sends nothing and files nothing. The person has to open the link and agree to be contacted themselves, because US law requires that consent to be their own act and nobody can give it for them.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['city', 'state'], 'properties': {'city': {'type': 'string', 'examples': ['Houston', 'Tampa'], 'maxLength': 60, 'minLength': 2, 'description': 'City where the help is needed, e.g. Houston. A city name only, never a street address.'}, 'pest': {'type': 'string', 'examples': ['termites', 'rodents'], 'maxLength': 40, 'description': 'Optional pest type, e.g. termites, bed bugs, rodents. Defaults to general pest control.'}, 'state': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'examples': ['TX', 'FL'], 'description': 'Two-letter US state code, e.g. TX'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['requestLink', 'homeownerPays', 'consentNote', 'note'], 'properties': {'note': {'type': 'string'}, 'pest': {'type': 'string'}, 'location': {'type': 'string'}, 'howItWorks': {'type': 'array', 'items': {'type': 'string'}}, 'consentNote': {'type': 'string', 'description': 'Why the person, not an assistant, has to send it'}, 'requestLink': {'type': ['string', 'null'], 'description': 'Link the homeowner opens to send the request, or null when no company is listed there'}, 'homeownerPays': {'type': 'string', 'description': 'What this costs the homeowner'}, 'listedCompanyCount': {'type': 'integer', 'description': 'License-record companies PestPin can offer the request to'}, 'fullListAndFreeRequest': {'type': 'string', 'description': 'PestPin page with the full list of companies'}}}
get_pest_cost
Pest control cost range
US national planning cost range for a pest control service, with the factors that move the price. This is an editorial planning range, not a quote and not a measured average; the actual price for a job comes from a written local quote.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['pest'], 'properties': {'pest': {'type': 'string', 'examples': ['termite control', 'bed bugs'], 'maxLength': 40, 'minLength': 2, 'description': 'Pest or service, e.g. termite control, bed bugs'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['pest', 'nationalPlanningRangeUsd', 'note'], 'properties': {'note': {'type': 'string'}, 'pest': {'type': 'string'}, 'answer': {'type': 'string', 'description': 'Short direct answer a person can read out'}, 'details': {'type': 'string', 'description': 'PestPin cost page for this pest'}, 'priceFactors': {'type': 'array', 'items': {'type': 'string'}}, 'nationalPlanningRangeUsd': {'type': 'object', 'required': ['low', 'high', 'typical'], 'properties': {'low': {'type': 'integer'}, 'high': {'type': 'integer'}, 'typical': {'type': 'integer'}}}}}
get_price_card
Prices a pest control company publishes
The prices a licensed US pest control company has published on its own PestPin listing, as ranges per service (for example a one-time general treatment, a quarterly plan, a termite inspection, bed bug treatment per room), with the date the company last changed them and when it can usually start. Entered by the company's verified owner, never by PestPin; companies that have not published prices return no match, and that is not a statement about their prices. Use it to answer 'what does <company> charge' without phoning them. The company confirms the exact price for a job.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['company'], 'properties': {'state': {'type': 'string', 'examples': ['FL'], 'maxLength': 2, 'minLength': 2, 'description': 'Optional two-letter state to narrow the match'}, 'company': {'type': 'string', 'examples': ["Val's Pest Solutions"], 'maxLength': 120, 'minLength': 2, 'description': 'Company name, or part of it'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['matches', 'note'], 'properties': {'note': {'type': 'string'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['company', 'updatedOn', 'prices', 'answer', 'pestpinProfile'], 'properties': {'answer': {'type': 'string', 'description': 'One sentence a person can read out'}, 'prices': {'type': 'array', 'items': {'type': 'object', 'required': ['service', 'unit', 'lowUsd', 'highUsd'], 'properties': {'note': {'type': ['string', 'null']}, 'unit': {'type': 'string'}, 'lowUsd': {'type': 'integer'}, 'highUsd': {'type': 'integer'}, 'service': {'type': 'string'}}}}, 'company': {'type': 'string'}, 'updatedOn': {'type': 'string', 'description': 'ISO date the company last changed its prices'}, 'licenseState': {'type': ['string', 'null']}, 'usuallyStarts': {'type': ['string', 'null']}, 'pestpinProfile': {'type': 'string'}}}}}}
verify_license
Check a pest control license
Check whether a US pest control company holds a state license record. Searches PestPin's directory of official state regulator records (35 states, reprocessed from official sources on a recurring schedule; publication timing varies by regulator). Returns matched businesses with license number, state, status at PestPin's last check, the date that check happened, and the official state source link so the answer can be verified at the regulator. Use it when someone names a company and wants to know if it is licensed. A miss is not proof a company is unlicensed: coverage is 35 states, some businesses are excluded as lawn, agricultural or government records, and name spellings vary.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['company'], 'properties': {'state': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'examples': ['FL', 'TX'], 'description': 'Optional two-letter US state code to narrow the search, e.g. FL'}, 'company': {'type': 'string', 'examples': ['Acme Pest Control', 'Terminix'], 'maxLength': 100, 'minLength': 2, 'description': 'Business name (or license number) to search for, e.g. Acme Pest Control'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['matches', 'totalMatches', 'note'], 'properties': {'note': {'type': 'string', 'description': 'The limits a reader must be told'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'verifyAtOfficialSource', 'sourceCheckedOn', 'sourceCheckedOnScope', 'pestpinProfile'], 'properties': {'name': {'type': 'string', 'description': 'Business name as the state record spells it'}, 'status': {'type': 'string', 'description': "What the record said at PestPin's last check"}, 'licenseState': {'type': ['string', 'null'], 'description': 'Two-letter state that issued the license'}, 'lastCheckedAt': {'type': ['string', 'null'], 'description': 'Same as sourceCheckedOn when the record carries its own check date'}, 'licenseNumber': {'type': ['string', 'null'], 'description': 'License number on the state record'}, 'pestpinProfile': {'type': 'string', 'description': 'PestPin page for this record'}, 'sourceCheckedOn': {'type': ['string', 'null'], 'description': 'ISO date PestPin last processed the source behind this record'}, 'inDirectorySince': {'type': 'string', 'description': "ISO date the record first cleared PestPin's checks"}, 'officialSourceAgency': {'type': ['string', 'null'], 'description': 'Name of the state agency that publishes the record'}, 'sourceCheckedOnScope': {'enum': ['record', 'state'], 'type': 'string', 'description': "'record' when the date is this record's own last check, 'state' when it is the last time PestPin processed that state's source"}, 'verifyAtOfficialSource': {'type': 'string', 'description': 'Official state regulator page where this record can be checked'}}}, 'description': 'Matched license records, empty when nothing matched'}, 'totalMatches': {'type': 'integer', 'description': 'How many records matched in total'}}}
verify_phone
Check a pest control phone number
Check a pest control company's phone number against official state license records. Give it the number on the van, the flyer, the voicemail or the caller ID and it returns the license records that publish that exact number, each with the business name, license number, issuing state, the official state source link and the date PestPin last processed that source. Use it when someone has a number and wants to see which license records publish it, before they hire or let anyone in. The state lookups PestPin works with are searched by business name or license number, so a number on its own is normally a dead end; this covers 35 states. The match is exact on ten digits and never partial, so a number one digit different is a different company and is never offered. A match means a license record publishes that number: it does not say who answered, whether the caller works for that company, or anything about insurance or work quality. No match is not proof anyone is unlicensed: coverage is 35 states, about half of all listings publish no phone at all, and a licensed company can publish a number PestPin does not hold. Records from states that license the individual operator rather than a firm are never returned here, because a phone number is not a way to look up a private person; they are counted in withheld and the license-number lookup returns them. It looks up a business's published number, never a person's own.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['businessPhone'], 'properties': {'businessPhone': {'type': 'string', 'examples': ['(713) 555-0100', '+1 713-555-0100'], 'maxLength': 64, 'minLength': 7, 'description': "The pest control company's published phone number, e.g. 713-555-0100. Dashes, brackets, spaces, a leading 1 and an extension are all accepted. A business's number, not the person's own."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['matches', 'totalMatches', 'note'], 'properties': {'note': {'type': 'string', 'description': 'The limits a reader must be told'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'verifyAtOfficialSource', 'sourceCheckedOn', 'sourceCheckedOnScope', 'pestpinProfile'], 'properties': {'city': {'type': ['string', 'null'], 'description': 'City and state of the record location'}, 'name': {'type': 'string', 'description': 'Business name as the state record spells it'}, 'status': {'type': 'string', 'description': "What the record said at PestPin's last check"}, 'licenseState': {'type': ['string', 'null'], 'description': 'Two-letter state that issued the license'}, 'licenseNumber': {'type': ['string', 'null'], 'description': 'License number on the state record'}, 'pestpinProfile': {'type': 'string', 'description': 'PestPin page for this record'}, 'sourceCheckedOn': {'type': ['string', 'null'], 'description': 'ISO date PestPin last processed the source behind this record'}, 'licenseExpiresOn': {'type': ['string', 'null'], 'description': 'Expiry exactly as published, or null where the state publishes none'}, 'officialSourceAgency': {'type': ['string', 'null'], 'description': 'Name of the state agency that publishes the record'}, 'sourceCheckedOnScope': {'enum': ['record', 'state'], 'type': 'string', 'description': "'record' when the date is this record's own last check, 'state' when it is the last time PestPin processed that state's source"}, 'verifyAtOfficialSource': {'type': 'string', 'description': 'Official state regulator page where this record can be checked'}}}, 'description': 'License records publishing that number, empty when none does'}, 'withheld': {'type': 'integer', 'description': 'Matching records deliberately left out because that state licenses the individual operator rather than a firm. Zero when nothing was withheld.'}, 'phoneNumber': {'type': ['string', 'null'], 'description': 'The ten digits the number was read as'}, 'totalMatches': {'type': 'integer', 'description': 'How many records publish that number'}}}
Changed
get_intro_request_link
Sept. 27, 2026, 2:53 a.m.
Changed
get_price_card
Sept. 27, 2026, 2:53 a.m.
Changed
get_pest_cost
Sept. 27, 2026, 2:53 a.m.
Changed
find_licensed_pros
Sept. 27, 2026, 2:53 a.m.
Changed
verify_phone
Sept. 27, 2026, 2:53 a.m.
Changed
verify_license
Sept. 27, 2026, 2:53 a.m.
Added
get_price_card
Sept. 21, 2026, 3 a.m.
Added
get_intro_request_link
Sept. 17, 2026, 12:36 p.m.
Added
get_pest_cost
Sept. 17, 2026, 12:36 p.m.
Added
find_licensed_pros
Sept. 17, 2026, 12:36 p.m.
Added
verify_phone
Sept. 17, 2026, 12:36 p.m.
Added
verify_license
Sept. 17, 2026, 12:36 p.m.