DouxProcess Directory
Find a US business by what you need and where, with licences checked against the issuer's file.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"white-pages": {
"url": "https://douxprocess.directory/mcp"
}
}
}Puntos de conexión remotos
https://douxprocess.directory/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (9)
🟢find_businesses(query, where, category, state, city, ...)
Search the DouxProcess Directory for US businesses by what the person needs (roofer, electrician, insurance agency...) and where (a city and state, a ZIP, or a state). Returns the matches in the published ranking order with license, how it was checked, phone, website and listing page. covered=false with a note means the directory does not hold that kind of business or place yet: say so, do not guess. Nobody pays for placement; listings affiliated with DouxProcess's owner carry a disclosure, pass it on. Do not rank, rate or recommend; show the options and let the person choose.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What the person needs, in their words."
},
"where": {
"type": "string",
"description": "A place: 'Pasadena, CA', a 5-digit ZIP, or a state. Never the person's own address or GPS."
},
"category": {
"type": "string",
"description": "A category id from list_categories, e.g. roofer."
},
"state": {
"type": "string",
"description": "Two-letter US state."
},
"city": {
"type": "string"
},
"postal_code": {
"type": "string",
"description": "A 5-digit ZIP."
},
"radius_miles": {
"type": "number",
"minimum": 1,
"maximum": 250
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous call."
},
"page": {
"type": "integer",
"minimum": 0,
"description": "Older clients: a page number. Prefer cursor."
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"intent": {
"type": "object"
},
"covered": {
"type": "boolean"
},
"note": {
"type": "string"
},
"total": {
"type": [
"integer",
"null"
]
},
"count": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"next_cursor": {
"type": [
"string",
"null"
]
},
"ranking": {
"type": "string"
},
"businesses": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"page"
],
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"about": {
"type": "string"
},
"website": {
"type": "string"
},
"phone": {
"type": "string"
},
"quote_link": {
"type": "string"
},
"booking_link": {
"type": "string"
},
"mcp_url": {
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal": {
"type": "string"
},
"service_area": {
"type": "object"
},
"languages": {
"type": "array"
},
"licences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"status": {
"type": "string",
"enum": [
"seeded",
"claimed",
"verified"
]
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"disclosure": {
"type": "string"
},
"note": {
"type": "string"
},
"request_contact": {
"type": "string"
},
"can_take_requests": {
"type": "boolean"
},
"agent": {
"type": "object",
"properties": {
"mcp": {
"type": "string"
},
"a2a": {
"type": "string"
},
"agent_card": {
"type": "string"
},
"json": {
"type": "string"
},
"markdown": {
"type": "string"
}
}
}
}
}
}
},
"required": [
"businesses",
"count",
"has_more",
"covered",
"ranking"
]
}🟢get_business(slug)
One business's details: licenses with their basis (issuer_file = matched against the issuer's own published file on checked_at; stated = given by the business, not yet matched, send the person to source_url), contact, whether it takes requests, and its own agent addresses (MCP and A2A).
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The slug from find_businesses."
}
},
"required": [
"slug"
]
}Esquema de salida
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"about": {
"type": "string"
},
"website": {
"type": "string"
},
"phone": {
"type": "string"
},
"quote_link": {
"type": "string"
},
"booking_link": {
"type": "string"
},
"mcp_url": {
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal": {
"type": "string"
},
"service_area": {
"type": "object"
},
"languages": {
"type": "array"
},
"licences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"status": {
"type": "string",
"enum": [
"seeded",
"claimed",
"verified"
]
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"disclosure": {
"type": "string"
},
"note": {
"type": "string"
},
"request_contact": {
"type": "string"
},
"can_take_requests": {
"type": "boolean"
},
"agent": {
"type": "object",
"properties": {
"mcp": {
"type": "string"
},
"a2a": {
"type": "string"
},
"agent_card": {
"type": "string"
},
"json": {
"type": "string"
},
"markdown": {
"type": "string"
}
}
}
},
"required": [
"slug",
"name",
"page"
]
}🟢verify_license(number, name, phone, issuer)
Look up a license by number, business name or phone and say which listings carry it and how it was checked. When nothing matches, tell the person to check the issuer's own lookup; never say a license is valid without a match.
Esquema de entrada
{
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "The license number."
},
"name": {
"type": "string",
"description": "The business name."
},
"phone": {
"type": "string"
},
"issuer": {
"type": "string",
"description": "The issuer code, e.g. CA-CSLB."
}
}
}Esquema de salida
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"found": {
"type": "boolean"
},
"note": {
"type": "string"
},
"why": {
"type": "string"
},
"query": {
"type": "object"
},
"how_checked": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name"
],
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"summary": {
"type": "string"
},
"disclosure": {
"type": "string"
},
"workers_comp": {
"type": "string"
},
"business_type": {
"type": "string"
},
"discrepancies": {
"type": "array"
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
}
}
}
}
},
"required": [
"ok",
"matches"
]
}🟢list_categories
Every category with its id, NAICS 2022 code, plain name, Google Business Profile names, how many listings it has, and whether requests for it are sent (health is listed but never routed).
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"note": {
"type": "string"
},
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"naics": {
"type": [
"string",
"null"
]
},
"naics_title": {
"type": [
"string",
"null"
]
},
"gbp": {
"type": "array"
},
"takes_requests": {
"type": "boolean"
},
"count": {
"type": [
"integer",
"null"
]
}
}
}
}
},
"required": [
"categories"
]
}🟢ask(question, where)
Ask in plain words ('licensed electrician near 92101 who does EV chargers') and get a short answer built only from listings, plus the businesses it rests on, in the published order. Same rules as find_businesses: no ranking or recommendation language, coverage stated honestly.
Esquema de entrada
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The person's question, in their words."
},
"where": {
"type": "string",
"description": "A place, if it is not in the question."
}
},
"required": [
"question"
]
}Esquema de salida
{
"type": "object",
"properties": {
"text": {
"type": "string"
},
"label": {
"type": "string"
},
"businesses": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"page"
],
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"place": {
"type": "string"
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"phone": {
"type": "string"
},
"website": {
"type": "string"
},
"licenses": {
"type": "array"
},
"status": {
"type": "string"
},
"can_take_requests": {
"type": "boolean"
},
"health": {
"type": "boolean"
},
"disclosure": {
"type": "string"
},
"agent": {
"type": "object",
"properties": {
"mcp": {
"type": "string"
},
"a2a": {
"type": "string"
},
"agent_card": {
"type": "string"
},
"json": {
"type": "string"
},
"markdown": {
"type": "string"
}
}
}
}
}
},
"intent": {
"type": "object"
},
"covered": {
"type": "boolean"
},
"note": {
"type": "string"
},
"followups": {
"type": "array",
"items": {
"type": "string"
}
},
"has_more": {
"type": "boolean"
},
"more_url": {
"type": "string"
},
"ranking": {
"type": "string"
}
},
"required": [
"text",
"businesses",
"ranking"
]
}🟡request_contact(slug, name, email, phone, details, ...)
Sends the person's request to the ONE business they chose, so it can reply to them. Only claimed listings take requests, and health businesses never do. Before calling, show the person this sentence and get their agreement: 'I agree that DouxProcess sends my name, my contact details and this request to <business>, and only to them, so they can reply to me about it.' Set consent=true only if they agreed. Clients that support forms get a consent form instead. Never include health details, card numbers, ID numbers or passwords.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The slug from find_businesses or get_business."
},
"name": {
"type": "string",
"description": "The person's name."
},
"email": {
"type": "string",
"description": "An email address the business can reply to."
},
"phone": {
"type": "string",
"description": "Or a phone number the business can reply to."
},
"details": {
"type": "string",
"description": "What they need, in their words. No health details, card numbers, ID numbers or passwords."
},
"consent": {
"type": "boolean",
"description": "True only if the person read and agreed to the consent sentence."
}
},
"required": [
"slug",
"name",
"details",
"consent"
]
}Esquema de salida
{
"type": "object",
"properties": {
"sent": {
"type": "boolean"
},
"routed": {
"type": "boolean"
},
"business": {
"type": "string"
},
"reference": {
"type": "string"
},
"next": {
"type": "string"
},
"why": {
"type": "string"
},
"consent_text": {
"type": "string"
},
"contact_directly": {
"type": "object"
}
},
"required": [
"sent"
]
}🟢request_service(business_id)
Open the request form for one business the person chose (ChatGPT local services Get Quote). The form shows the consent sentence and sends only when the person ticks it. For a business that does not take requests it shows the business's own phone and website.
Esquema de entrada
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "The business id (its slug) from find_businesses or the business feed."
}
},
"required": [
"business_id"
]
}Esquema de salida
{
"type": "object",
"properties": {
"business": {
"type": "object",
"required": [
"slug",
"name",
"page"
],
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"about": {
"type": "string"
},
"website": {
"type": "string"
},
"phone": {
"type": "string"
},
"quote_link": {
"type": "string"
},
"booking_link": {
"type": "string"
},
"mcp_url": {
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal": {
"type": "string"
},
"service_area": {
"type": "object"
},
"languages": {
"type": "array"
},
"licences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"classification": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"expires": {
"type": [
"string",
"null"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"checked_at": {
"type": [
"string",
"null"
]
},
"basis": {
"type": "string",
"enum": [
"issuer_file",
"stated"
]
}
},
"required": [
"issuer",
"number"
]
}
},
"status": {
"type": "string",
"enum": [
"seeded",
"claimed",
"verified"
]
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"disclosure": {
"type": "string"
},
"note": {
"type": "string"
},
"request_contact": {
"type": "string"
},
"can_take_requests": {
"type": "boolean"
},
"agent": {
"type": "object",
"properties": {
"mcp": {
"type": "string"
},
"a2a": {
"type": "string"
},
"agent_card": {
"type": "string"
},
"json": {
"type": "string"
},
"markdown": {
"type": "string"
}
}
}
}
},
"can_request": {
"type": "boolean"
},
"consent_text": {
"type": "string"
},
"how": {
"type": "string"
}
},
"required": [
"business",
"can_request",
"consent_text"
]
}🟢license_history(license)
A California contractor license's record in the CSLB's public file, and every change since the directory began reading it daily: status and suspensions, workers' comp type and dates, bond amounts and dates, classes, expiry. Give a CSLB license number or a listing link. It never includes an insurer, surety or person's name, or a policy, bond or case number. Report what it says; do not judge the business. Not for decisions about a person's credit, employment, insurance or housing.
Esquema de entrada
{
"type": "object",
"properties": {
"license": {
"type": "string",
"description": "A CSLB license number (e.g. 1000002), or a listing link or slug from find_businesses."
}
},
"required": [
"license"
]
}Esquema de salida
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"license": {
"type": "string"
},
"slug": {
"type": "string"
},
"page": {
"type": "string"
},
"note": {
"type": "string"
},
"how_checked": {
"type": "string"
},
"watch": {
"type": "string"
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"required": [
"issuer",
"number",
"status"
],
"properties": {
"issuer": {
"type": "string"
},
"number": {
"type": "string"
},
"status": {
"type": "string"
},
"expires": {
"type": "string"
},
"as_of": {
"type": "string"
},
"source_url": {
"type": "string"
},
"record": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"history": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {
"type": "string"
},
"kind": {
"type": "string"
},
"change": {
"type": "string"
}
}
}
}
}
}
}
},
"required": [
"found"
]
}🟡watch_licenses(email, licenses)
Emails the person a link to watch these CSLB licenses: once they open it, they get one short email on any day something changes on one (status, workers' comp, bonds, classes, expiry). Nothing is watched until the person opens the link. Use the person's own email, only when they asked. Free watches 25 licenses, Pro up to 500 for $99 a year, Unlimited every license they add for $999 a year. Not for decisions about a person's credit, employment, insurance or housing.
Esquema de entrada
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The person's own email address."
},
"licenses": {
"type": "array",
"maxItems": 500,
"items": {
"type": "string"
},
"description": "CSLB license numbers or listing links, up to 500."
}
},
"required": [
"email",
"licenses"
]
}Esquema de salida
{
"type": "object",
"properties": {
"sent": {
"type": "boolean"
},
"email": {
"type": "string"
},
"licenses": {
"type": "integer"
},
"unknown": {
"type": "array",
"items": {
"type": "string"
}
},
"note": {
"type": "string"
},
"why": {
"type": "string"
},
"tiers": {
"type": "string"
}
},
"required": [
"sent"
]
}Comunidad
Evidencia