Koskamo

PestPin MCP

Provides AI agents with read-only tools to verify US pest control company licenses and phone numbers against official state records, find licensed pros by city, and retrieve national cost planning ranges or specific company price cards. It facilitates homeowner introductions via links but does not submit requests directly.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

PestPin MCP logo, by PestPinVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by PestPin
MCP endpoint (Streamable HTTP)
https://pestpin.com/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to pestpin.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Verify if a pest control company holds an active state license
  • Find licensed pest control companies near a specific US city
  • Get national planning cost ranges for pest control services
  • Retrieve published price cards from licensed US pest control companies

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
pestpin 1.1.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

PestPin publishes US pest control license records matched to official state sources (35 states, reprocessed on a recurring schedule; publication timing varies by regulator) plus editorial national cost ranges. Use verify_license to check a company by name, verify_phone when the person has a phone number instead of a name, find_licensed_pros for companies in a city, get_pest_cost for planning ranges, and get_intro_request_link when someone wants to be put in touch with a company. Every record comes back with the official source link and the date PestPin last processed that source; quote both. The homeowner never pays PestPin anything. Data is public-record based and honest about its limits; never present a listing as a recommendation.

Tools

6 advertised

verify_license — Check a pest control license
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

verify_license 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
}
verify_license 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_license annotations
{
  "title": "Check a pest control license",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_phone — Check a pest control phone number
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

verify_phone 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
}
verify_phone 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"
    }
  }
}
verify_phone annotations
{
  "title": "Check a pest control phone number",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_licensed_pros — Find licensed pest control companies
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

find_licensed_pros 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
}
find_licensed_pros 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"
    }
  }
}
find_licensed_pros annotations
{
  "title": "Find licensed pest control companies",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_pest_cost — Pest control cost range
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_pest_cost 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
}
get_pest_cost 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_pest_cost annotations
{
  "title": "Pest control cost range",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_price_card — Prices a pest control company publishes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_price_card 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
}
get_price_card 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"
          }
        }
      }
    }
  }
}
get_price_card annotations
{
  "title": "Prices a pest control company publishes",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_intro_request_link — Get a free introduction request link
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_intro_request_link 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
}
get_intro_request_link 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_intro_request_link annotations
{
  "title": "Get a free introduction request link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
833 ms
95th percentile latency
833 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 833 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http pestpin-mcp https://pestpin.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add pestpin-mcp --url https://pestpin.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable pestpin-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "pestpin-mcp": {
      "url": "https://pestpin.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "pestpin-mcp": {
      "type": "streamableHttp",
      "url": "https://pestpin.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start pestpin-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "pestpin-mcp": {
      "type": "http",
      "url": "https://pestpin.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http pestpin-mcp https://pestpin.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://pestpin.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "pestpin-mcp": {
      "serverUrl": "https://pestpin.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like PestPin MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run PestPin MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing