DouxProcess Directory
Find a US business by what you need and where, with licences checked against the issuer's file.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"white-pages": {
"url": "https://douxprocess.directory/mcp"
}
}
}远程端点
https://douxprocess.directory/mcpstreamable-http它能做什么
工具清单
工具(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.
输入模式
{
"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."
}
}
}输出模式
{
"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).
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The slug from find_businesses."
}
},
"required": [
"slug"
]
}输出模式
{
"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.
输入模式
{
"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."
}
}
}输出模式
{
"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).
输入模式
{
"type": "object",
"properties": {}
}输出模式
{
"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.
输入模式
{
"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"
]
}输出模式
{
"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.
输入模式
{
"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"
]
}输出模式
{
"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.
输入模式
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "The business id (its slug) from find_businesses or the business feed."
}
},
"required": [
"business_id"
]
}输出模式
{
"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.
输入模式
{
"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"
]
}输出模式
{
"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.
输入模式
{
"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"
]
}输出模式
{
"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"
]
}社区
证据