PestPin
Server Details
US pest control license check by number, licensed-company search by city, and cost planning ranges.
- Status
- Healthy
- Uptime
- 100.0% over 57 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: finding pros by city/pest, building a request link, getting planning cost ranges, fetching a company's published prices, verifying a license by name, and verifying a phone number. Even the overlapping verification tools are cleanly separated by input type and use case.
All tool names follow a consistent verb_noun snake_case pattern: get_intro_request_link, find_licensed_pros, verify_license, verify_phone. The verbs are meaningful and align with each tool's action, making the set predictable and easy to navigate.
Six tools is a well-scoped set for a pest-control lookup and verification service. Each tool covers a distinct homeowner need without redundancy or bloat.
The toolset covers the core workflow: finding licensed pros, verifying a license or phone number, getting cost estimates, and requesting contact. Minor gaps exist, such as no direct machine-readable full-list retrieval or broader company-detail lookup, but these do not break the main use cases.
Available Tools
6 toolsfind_licensed_prosFind licensed pest control companiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City name, e.g. Houston. A city name only, never a street address. | |
| pest | No | Optional pest type, e.g. termites, bed bugs, rodents, ants, cockroaches, mosquitoes, wildlife. Defaults to general pest control. | |
| state | Yes | Two-letter US state code, e.g. TX |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | The limits a reader must be told |
| pest | No | Pest type the answer covers |
| location | No | City and state the answer covers |
| companies | Yes | |
| fullListAndFreeRequest | No | PestPin page with the full list and the free request form |
| totalRecordMatchedCompanies | No | How many license-record companies match, before the 8-row cap |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses that listings are matched public records rather than recommendations or rankings, that most businesses have not confirmed services, and that a full-list link is provided. This materially shapes agent expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the main action and result, then add return fields, a caveat about public records, and consumer-context details. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not restate return structure. It covers result limit, data fields, source attribution, caveats, and the full-list link, making it complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with examples and descriptions (100% coverage). The description adds context like 'near a US city' and 'pest type', but does not add meaning beyond the schema's parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Find licensed pest control companies near a US city') and states the core result: up to 8 licensed matches with license number, phone, source link, and processing date. This clearly differentiates it from sibling tools like verify_license or get_pest_cost.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is clear: a homeowner looking for licensed pest control companies in a city. It does not explicitly name alternatives or state when not to use it, but the discovery-focused purpose is unambiguous relative to verification and cost siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_intro_request_linkGet a free introduction request linkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City where the help is needed, e.g. Houston. A city name only, never a street address. | |
| pest | No | Optional pest type, e.g. termites, bed bugs, rodents. Defaults to general pest control. | |
| state | Yes | Two-letter US state code, e.g. TX |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| pest | No | |
| location | No | |
| howItWorks | No | |
| consentNote | Yes | Why the person, not an assistant, has to send it |
| requestLink | Yes | Link the homeowner opens to send the request, or null when no company is listed there |
| homeownerPays | Yes | What this costs the homeowner |
| listedCompanyCount | No | License-record companies PestPin can offer the request to |
| fullListAndFreeRequest | No | PestPin page with the full list of companies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and destructiveHint annotations by explaining that the tool sends nothing, files nothing, and that the homeowner must personally consent. This adds meaningful behavioral detail, especially around the legal requirement for consent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and each subsequent sentence adds meaningful behavioral or legal context. It is slightly longer than strictly necessary, but the extra detail is valuable and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the schema fully documents parameters, output schema exists, and annotations cover safety traits. The description adds the missing information about what the tool does not do and who must take the next step, making it complete for an agent to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the description does not need to re-explain parameters. The description adds no parameter-level detail beyond what the schema already provides, which matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb-resource pair: getting a link that starts a free introduction request for pest control help. It also distinguishes itself from siblings by explicitly noting it only builds and returns a link and does not send or file anything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when this tool is appropriate: when the user needs a request link rather than a pro listing, cost estimate, or verification. It does not explicitly name sibling alternatives or state when not to use it, but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pest_costPest control cost rangeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pest | Yes | Pest or service, e.g. termite control, bed bugs |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| pest | Yes | |
| answer | No | Short direct answer a person can read out |
| details | No | PestPin cost page for this pest |
| priceFactors | No | |
| nationalPlanningRangeUsd | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds important behavioral context: it is an editorial range, not a measured average, and includes factors that move price. This goes beyond what annotations state, clarifying scope and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and then immediately clarifying limitations. No wasted words; every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the nature of the return (a planning range, not a quote) and its intended use. Given the output schema presumably describes result structure, nothing else is needed. The tool's purpose, limitations, and context are clearly conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the 'pest' parameter is fully described in the schema with examples. The description doesn't add specific parameter details, but its mention of 'factors that move the price' hints at how the parameter influences the result. This is adequate given the schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a 'US national planning cost range for a pest control service' with factors that move the price. It immediately distinguishes itself from siblings like get_price_card (which likely gives specific quotes) by clarifying this is an editorial range, not a quote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts the planning range with a 'written local quote', implying it should be used for rough estimates rather than actual pricing. It notes it is not a quote or measured average, giving strong context for when to use it. However, it doesn't explicitly name alternative tools that should be used in its place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_cardPrices a pest control company publishesARead-onlyIdempotentInspect
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 charge' without phoning them. The company confirms the exact price for a job.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional two-letter state to narrow the match | |
| company | Yes | Company name, or part of it |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds meaningful context beyond them: data is entered by the company's verified owner and never by PestPin, no match does not imply absence of prices, and the exact price requires company confirmation. These are non-obvious behavioral details that help an agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a minimal definition but every sentence earns its place: it defines the returned data, explains provenance and no-match semantics, and gives direct usage guidance. It is front-loaded with the core purpose and structured clearly, though it could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description supplies all necessary lookup semantics: scope, data source, no-match interpretation, and usage context. An agent has enough information to select and invoke this tool correctly without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'company' and 'state' parameters clearly. The description does not add parameter-level semantics beyond what the schema states, which is acceptable given the full coverage. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it gets a company's published price card as ranges per service, including metadata like last change date and start availability. It also distinguishes itself from generic cost tools by emphasizing that prices are self-published on the company's own PestPin listing by a verified owner. This makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use this tool to answer 'what does <company> charge' without phoning them. It also clarifies that a no-match result is not a statement about the company's prices. It does not explicitly name sibling alternatives or exclusion conditions, so it falls just short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_licenseCheck a pest control licenseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional two-letter US state code to narrow the search, e.g. FL | |
| company | Yes | Business name (or license number) to search for, e.g. Acme Pest Control |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | The limits a reader must be told |
| matches | Yes | Matched license records, empty when nothing matched |
| totalMatches | Yes | How many records matched in total |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Richly discloses behaviors beyond the annotations: data is a reprocessed snapshot ('status at PestPin's last check' with the check date), coverage is limited to 35 states with regulator-dependent publication timing, and a miss is explicitly 'not proof a company is unlicensed' due to exclusions and spelling variance. This consistently supports openWorldHint and readOnlyHint with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, data provenance, return values, usage trigger, and false-negative caveat. The core purpose is front-loaded in sentence one, and the density is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only lookup tool: parameters are fully schema-documented, return values are enumerated, data freshness is disclosed, and the verification link and coverage limitations are covered. An output schema exists to carry structured return details, and nothing needed to invoke or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry descriptions and examples in the schema itself. The description adds only marginal context (search is by company name, and the 35-state coverage hint informs the optional state filter), so it lands at the baseline 3 rather than higher.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check whether a US pest control company holds a state license record,' then enumerates the exact return fields (license number, state, status, check date, source link). The scope (US pest control, 35 states) is unambiguous and clearly distinguishes it from siblings like verify_phone or find_licensed_pros.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use it when someone names a company and wants to know if it is licensed.' It stops short of naming sibling alternatives or stating when another tool would be preferable, so it earns a 4 rather than a 5 on the when/when-not/alternatives scale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_phoneCheck a pest control phone numberARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| businessPhone | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | The limits a reader must be told |
| matches | Yes | License records publishing that number, empty when none does |
| withheld | No | Matching records deliberately left out because that state licenses the individual operator rather than a firm. Zero when nothing was withheld. |
| phoneNumber | No | The ten digits the number was read as |
| totalMatches | Yes | How many records publish that number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by disclosing exact ten-digit matching, what a match does and does not imply, open-world limitations, 35-state coverage, and the exclusion of individual-operator records. These details align with openWorldHint and readOnlyHint 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and output, then covers use cases and caveats. It is longer than strictly necessary, with some repetition around the business-vs-person distinction, but every sentence contributes operational meaning for a tool with subtle matching semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, full schema coverage, and an output schema, the description covers input sources, return contents, exact-match behavior, no-match interpretation, state coverage, and alternative lookups. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter with examples and accepted formats, so the baseline is 3. The description adds real-world input sources ('the number on the van, the flyer, the voicemail or the caller ID') and reinforces that it must be a business number, not a personal one, which helps an agent map user intent to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Check a pest control company's phone number against official state license records.' It also lists the exact output fields, which distinguishes it from sibling tools like verify_license that operate on license numbers rather than phone numbers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 when someone has a number and wants to see which license records publish it, before they hire or let anyone in.' It also gives exclusions, such as never looking up a person's own number, and points to the license-number lookup as the alternative for individual-operator records.
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 tool update
- Changed
verify_phone1 field changed- changed
Input schema / properties / businessPhone / descriptionPrevious value: -"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. Never the person's own number."New value: +"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."
1 tool update
- Added
get_price_card
1 tool update
- Added
verify_phone
4 tool updates
- Changed
find_licensed_pros6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / city / descriptionPrevious value: -"City name, e.g. Houston"New value: +"City name, e.g. Houston. A city name only, never a street address." - added
Input schema / properties / city / examplesAdded value: +[ + "Houston", + "Orlando" +] - added
Input schema / properties / pest / examplesAdded value: +[ + "termites", + "bed bugs" +] - added
Input schema / properties / state / examplesAdded value: +[ + "TX", + "FL" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "companies": { + "items": { + "properties": { + "licenseNumber": { + "description": "License number on the state record", + "type": [ + "string", + "null" + ] + }, + "licenseState": { + "description": "Two-letter state that issued the license", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Business name as the state record spells it", + "type": "string" + }, + "officialSourceAgency": { + "description": "Name of the state agency that publishes the record", + "type": [ + "string", + "null" + ] + }, + "pestpinProfile": { + "description": "PestPin page for this record", + "type": "string" + }, + "phone": { + "description": "Published phone number, when the record has one", + "type": [ + "string", + "null" + ] + }, + "sourceCheckedOn": { + "description": "ISO date PestPin last processed the source behind this record", + "type": [ + "string", + "null" + ] + }, + "sourceCheckedOnScope": { + "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", + "enum": [ + "record", + "state" + ], + "type": "string" + }, + "verifyAtOfficialSource": { + "description": "Official state regulator page where this record can be checked", + "type": "string" + } + }, + "required": [ + "name", + "verifyAtOfficialSource", + "sourceCheckedOn", + "sourceCheckedOnScope", + "pestpinProfile" + ], + "type": "object" + }, + "type": "array" + }, + "fullListAndFreeRequest": { + "description": "PestPin page with the full list and the free request form", + "type": "string" + }, + "location": { + "description": "City and state the answer covers", + "type": "string" + }, + "note": { + "description": "The limits a reader must be told", + "type": "string" + }, + "pest": { + "description": "Pest type the answer covers", + "type": "string" + }, + "totalRecordMatchedCompanies": { + "description": "How many license-record companies match, before the 8-row cap", + "type": "integer" + } + }, + "required": [ + "companies", + "note" + ], + "type": "object" +}
- Added
get_intro_request_link - Changed
get_pest_cost3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / pest / examplesAdded value: +[ + "termite control", + "bed bugs" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "answer": { + "description": "Short direct answer a person can read out", + "type": "string" + }, + "details": { + "description": "PestPin cost page for this pest", + "type": "string" + }, + "nationalPlanningRangeUsd": { + "properties": { + "high": { + "type": "integer" + }, + "low": { + "type": "integer" + }, + "typical": { + "type": "integer" + } + }, + "required": [ + "low", + "high", + "typical" + ], + "type": "object" + }, + "note": { + "type": "string" + }, + "pest": { + "type": "string" + }, + "priceFactors": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "pest", + "nationalPlanningRangeUsd", + "note" + ], + "type": "object" +}
- Changed
verify_license5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / company / descriptionPrevious value: -"Business name (or license number) to search for"New value: +"Business name (or license number) to search for, e.g. Acme Pest Control" - added
Input schema / properties / company / examplesAdded value: +[ + "Acme Pest Control", + "Terminix" +] - added
Input schema / properties / state / examplesAdded value: +[ + "FL", + "TX" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "matches": { + "description": "Matched license records, empty when nothing matched", + "items": { + "properties": { + "inDirectorySince": { + "description": "ISO date the record first cleared PestPin's checks", + "type": "string" + }, + "lastCheckedAt": { + "description": "Same as sourceCheckedOn when the record carries its own check date", + "type": [ + "string", + "null" + ] + }, + "licenseNumber": { + "description": "License number on the state record", + "type": [ + "string", + "null" + ] + }, + "licenseState": { + "description": "Two-letter state that issued the license", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Business name as the state record spells it", + "type": "string" + }, + "officialSourceAgency": { + "description": "Name of the state agency that publishes the record", + "type": [ + "string", + "null" + ] + }, + "pestpinProfile": { + "description": "PestPin page for this record", + "type": "string" + }, + "sourceCheckedOn": { + "description": "ISO date PestPin last processed the source behind this record", + "type": [ + "string", + "null" + ] + }, + "sourceCheckedOnScope": { + "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", + "enum": [ + "record", + "state" + ], + "type": "string" + }, + "status": { + "description": "What the record said at PestPin's last check", + "type": "string" + }, + "verifyAtOfficialSource": { + "description": "Official state regulator page where this record can be checked", + "type": "string" + } + }, + "required": [ + "name", + "verifyAtOfficialSource", + "sourceCheckedOn", + "sourceCheckedOnScope", + "pestpinProfile" + ], + "type": "object" + }, + "type": "array" + }, + "note": { + "description": "The limits a reader must be told", + "type": "string" + }, + "totalMatches": { + "description": "How many records matched in total", + "type": "integer" + } + }, + "required": [ + "matches", + "totalMatches", + "note" + ], + "type": "object" +}
3 tool updates
- First observed
find_licensed_pros - First observed
get_pest_cost - First observed
verify_license
Related MCP Connectors
Verify contractor licenses: 50 states + DC + 8 cities — status, expiration, disciplinary history.
Verify a contractor, real estate or cosmetology license in 12 US states from the boards' own files.
Verify US contractor licenses across states: Clear, Review or Risk, with the reasons.
1Manage pest control operations — customers, scheduling, SMS, payments, and reporting.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time contractor license verification across 45 US states. Verifies license status, expiration, and disciplinary history directly against state licensing board portals.434 npmMIT
- AlicenseAqualityDmaintenance50-state professional license verification for AI agents.36 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents and procurement systems to verify contractor licenses against official state boards, search contractors by trade and location, audit workers' comp, surety bonds and OSHA safety records, and check SAM.gov federal debarment status. It returns a deterministic ALLOW/WARN/BLOCK compliance decision plus registry health metrics for US trade contractors.MIT
- FlicenseNot gradedqualityBmaintenanceSearch 6,900+ U.S. surety bond requirements across all 50 states. Instant pricing.-
Glama MCP Gateway
Add one secure layer between your agents and this server.