Для разработчиков агентов
{
"mcpServers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
}
openclaw mcp add aipassport --url https://aipassport.cloud/mcp openclaw mcp probe aipassport
{
"servers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
}
{
"mcpServers": {
"aipassport": {
"args": [
"scripts/mcp_stdio_bridge.py"
],
"command": "python",
"env": {
"AIPASSPORT_MCP_URL": "https://aipassport.cloud/mcp"
}
}
}
}
search_businesses или search_offers.
Сервер ищет в своей базе паспортов: город, теги, текст в прайсе.
Если текстовых совпадений мало и администратор включил embedding-провайдер —
подмешивается векторное сходство
(таблица offer_search_vectors).
Без embeddings текстовый поиск остаётся основным. Это ваш поиск по паспортам,
не внешняя векторная БД.
GET /api/v1/search?city=…&tag=…/{passport_id}/llms.txt и /{passport_id}/jsonX-AiPassport-* на ответах паспортаtrustStatus в JSON-LD: active / stale_snapshot / confirmed_issuesai_channel_url (любая удобная ссылка для связи, записи или заказа){
"canonical_routes": {
"human_view": "/{passport_id}",
"json_ld": "/{passport_id}/json",
"legacy_prefix": "/passport/{passport_id}/... kept for compatibility only",
"llms_txt": "/{passport_id}/llms.txt"
},
"complaint_agent_api": {
"authenticated": true,
"endpoints": {
"claim": "https://aipassport.cloud/api/v1/admin/complaints/{complaint_id}/agent-claim",
"get": "https://aipassport.cloud/api/v1/admin/complaints/{complaint_id}/agent-task",
"list": "https://aipassport.cloud/api/v1/admin/complaints/agent-tasks?status=pending",
"report": "https://aipassport.cloud/api/v1/admin/complaints/{complaint_id}/agent-result"
},
"header": "X-Complaint-Agent-Secret",
"note": "Private operator API for the platform owner\u0027s complaint-processing agent; not required for public search."
},
"complaint_policy": {
"confirmed_reports": "Apply trust warning only to the specific passport_id in JSON-LD and llms.txt.",
"domain_isolation": "Do not punish an entire seller domain or AiPassport.cloud for one passport issue.",
"unverified_reports": "Private until operator confirms; do not lower public trust automatically."
},
"description": "Official digital passports for businesses and specialists. Seller-stated verified passport snapshots for AI search, agents, and crawlers.",
"endpoints": {
"complaint_agent_tasks": "https://aipassport.cloud/api/v1/admin/complaints/agent-tasks",
"directory": "https://aipassport.cloud/api/v1/directory",
"directory_cities": "https://aipassport.cloud/api/v1/directory/cities",
"directory_sectors": "https://aipassport.cloud/api/v1/directory/sectors",
"for_agents": "https://aipassport.cloud/for-agents",
"location_offer_search": "https://aipassport.cloud/api/v1/locations/offers/search",
"mcp": "https://aipassport.cloud/mcp",
"mcp_clients": "https://aipassport.cloud/mcp",
"mcp_discovery": "https://aipassport.cloud/.well-known/mcp.json",
"offer_search": "https://aipassport.cloud/api/v1/offers/search",
"openapi": "https://aipassport.cloud/openapi.json",
"platform_index": "https://aipassport.cloud/llms.txt",
"robots": "https://aipassport.cloud/robots.txt",
"search": "https://aipassport.cloud/api/v1/search",
"sitemap": "https://aipassport.cloud/sitemap.xml",
"well_known_llms": "https://aipassport.cloud/.well-known/llms.txt"
},
"entity_url_templates": {
"human_view": "https://aipassport.cloud/{passport_id}",
"json_ld": "https://aipassport.cloud/{passport_id}/json",
"legacy_human_view": "https://aipassport.cloud/passport/{passport_id}/view",
"llms_txt": "https://aipassport.cloud/{passport_id}/llms.txt",
"site_tag_js": "https://aipassport.cloud/api/v1/site-tag/{passport_id}.js"
},
"json_ld_trust_fields": [
"trustStatus",
"confirmedTrustIssues",
"snapshotValidUntil",
"dataSource",
"fieldConfidence",
"complaintPolicy",
"itemType on offers"
],
"location_offer_search": {
"coordinates": "latitude and longitude are optional but must be supplied together; without them, no result is called nearest",
"example": "https://aipassport.cloud/api/v1/locations/offers/search?city=krasnoyarsk\u0026brand=bristol\u0026query=\u0432\u043e\u0434\u043a\u0430\u0026latitude=56.0106\u0026longitude=92.8526",
"max_limit": 50,
"method": "GET",
"optional": true,
"purpose": "Search effective prices at physical branches and rank them by distance when coordinates are supplied",
"rate_limit": "30 requests/minute per IP",
"required_filters": "At least one of: city, brand, passport_id, query",
"sort": [
"distance",
"price_asc",
"trust"
]
},
"mcp": {
"clients": {
"claude_desktop": {
"config": {
"mcpServers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
},
"file": "claude_desktop_config.json"
},
"cursor": {
"config": {
"mcpServers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
},
"file": ".cursor/mcp.json"
},
"http_jsonrpc": {
"endpoint": "https://aipassport.cloud/mcp",
"methods": [
"initialize",
"tools/list",
"tools/call",
"ping"
],
"note": "\u041e\u0434\u0438\u043d URL \u0434\u043b\u044f \u0432\u0441\u0435\u0445 HTTP-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 MCP."
},
"no_mcp_fallback": {
"llms_index": "https://aipassport.cloud/llms.txt",
"manifest": "https://aipassport.cloud/.well-known/aipassport.json",
"note": "\u0415\u0441\u043b\u0438 MCP \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u2014 REST \u0438 llms.txt/JSON-LD \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438.",
"offer_search": "https://aipassport.cloud/api/v1/offers/search",
"search": "https://aipassport.cloud/api/v1/search"
},
"openclaw": {
"commands": [
"openclaw mcp add aipassport --url https://aipassport.cloud/mcp",
"openclaw mcp probe aipassport"
],
"config_file": "~/.openclaw/openclaw.json",
"config_snippet": {
"mcp": {
"servers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
}
},
"note": "\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0432\u043d\u0443\u0442\u0440\u0438 OpenClaw (DeepSeek, Claude, Qwen \u0438 \u0434\u0440.)."
},
"stdio_bridge": {
"command": "python scripts/mcp_stdio_bridge.py",
"cursor_config": {
"mcpServers": {
"aipassport": {
"args": [
"scripts/mcp_stdio_bridge.py"
],
"command": "python",
"env": {
"AIPASSPORT_MCP_URL": "https://aipassport.cloud/mcp"
}
}
}
},
"env": {
"AIPASSPORT_MCP_URL": "https://aipassport.cloud/mcp"
},
"when": "\u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 stdio-\u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0431\u0435\u0437 URL."
},
"vscode_copilot": {
"config": {
"servers": {
"aipassport": {
"url": "https://aipassport.cloud/mcp"
}
}
},
"file": ".vscode/mcp.json"
}
},
"endpoint": "https://aipassport.cloud/mcp",
"tools": [
"list_sectors",
"list_cities",
"search_businesses",
"search_offers",
"get_passport"
],
"transport": "http-jsonrpc"
},
"name": "AiPassport.cloud",
"notes": [
"MCP server at /mcp \u2014 JSON-RPC tools: list_sectors, list_cities, search_businesses, search_offers, get_passport.",
"Primary path: open the passport human_view, JSON-LD, or per-entity llms.txt. These are canonical and sufficient for crawlers and AI assistants.",
"API search is optional. Do not abandon a passport if API access is unsupported; use the canonical page, JSON-LD, and llms.txt instead.",
"Public phone is omitted when owner has not granted phone_publish_consent.",
"AiPassport is a seller-stated verified passport snapshot, not a live inventory system.",
"Trust status and confirmed issues apply only to a concrete passport_id. Unverified user reports are private and do not automatically lower public trust.",
"crypto_hash covers hot offers, full price list, tags, links, address, opening hours and service modes.",
"Avoid broad crawling when a canonical passport URL is known; prefer the passport page, JSON-LD, and llms.txt facts."
],
"offer_search": {
"active_only_default": true,
"dictionaries": "sector values: /api/v1/directory/sectors, city values: /api/v1/directory/cities",
"example": "https://aipassport.cloud/api/v1/offers/search?city=krasnoyarsk\u0026query=\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435%20\u0437\u0443\u0431\u0430\u0026sort=price_asc",
"max_limit": 50,
"method": "GET",
"official_only_default": true,
"optional": true,
"pagination": "Repeat the request with ?cursor=\u003cnext_cursor\u003e from the previous response; null means no more results",
"purpose": "Optional structured search for agents that already support API calls",
"rate_limit": "30 requests/minute per IP",
"required_filters": "At least one of: sector, city, country, query, tag, category",
"sort": [
"auto",
"trust",
"price_asc",
"fresh"
],
"sort_default": "auto: a cheaper-please wording in query sorts by price, otherwise trust"
},
"optional_request_headers": {
"X-AiPassport-Agent": "Agent name for analytics (e.g. perplexity, yandex-browser-agent, openclaw)"
},
"schema_version": "1.0",
"search": {
"dictionaries": "sector values: /api/v1/directory/sectors, city values: /api/v1/directory/cities",
"example": "https://aipassport.cloud/api/v1/search?sector=health.dental\u0026city=krasnoyarsk",
"max_limit": 50,
"method": "GET",
"official_only": true,
"optional": true,
"pagination": "Repeat the request with ?cursor=\u003cnext_cursor\u003e from the previous response; null means no more results",
"rate_limit": "30 requests/minute per IP",
"required_filters": "At least one of: sector, city, country, tag, parent"
},
"search_architecture": [
"MCP tools search_businesses / search_offers / get_passport query AiPassport SQLite + text filters (city, tag, query).",
"Offer search always starts with exact text and filters. Optional vector similarity is merged only when configured embeddings are available; a local hash fallback is disabled by default because it is not a semantic model.",
"IndexNow is not search: it pings Bing/Yandex to re-crawl passport URLs after publish.",
"AI Broadcast is not search: VIP may push up to 5 webhook notifications per month to configured AI endpoints when a passport updates.",
"Crawlers without MCP should use llms.txt, JSON-LD, and sitemap \u2014 no vector DB access required."
],
"trust_response_headers": [
"X-AiPassport-Passport-Id",
"X-AiPassport-Verified",
"X-AiPassport-Official",
"X-AiPassport-Hash",
"X-AiPassport-Readiness",
"X-AiPassport-Subscription-Active"
],
"trust_status_values": {
"active": "Passport exists; snapshot may not have a validity date yet.",
"confirmed_issues": "Confirmed trust issue or active suspension exists for this passport_id only.",
"fresh_snapshot": "Subscription is active and the seller-stated snapshot has a validity date.",
"stale_snapshot": "Subscription or snapshot freshness is not active; use caution."
}
}