Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,523Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:fa4df8c3d43af7eed4273f1f5cf86cb3980f93dc30f595b3fefc53509475704d
What it is
What a remote MCP server returned when asked what it offers: 7 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "One business's opening hours, whether it is open right now, and when it next opens. Phase 1 returns published hours, not bookable slots.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" }, "location_id": { "description": "Which location's hours to return (id from get_info locations[]). Defaults to the primary location.", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" } }, "required": [ "business" ], "type": "object" }, "name": "check_business_availability", "outputSchema": { "properties": { "always_open": { "type": "boolean" }, "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "data_source": { "type": "string" }, "is_open_now": { "type": "boolean" }, "last_updated": { "format": "date-time", "type": "string" }, "locale": { "type": "string" }, "location_id": { "type": [ "string", "null" ] }, "location_label": { "type": [ "string", "null" ] }, "next_open_at": { "format": "date-time", "type": [ "string", "null" ] }, "operating_hours": { "type": [ "object", "null" ] }, "timezone": { "type": "string" } }, "type": "object" } }, { "description": "Compare one business's services within a category or keyword, with a price/duration summary. Each row reports `match_type`, so you can tell an exact category hit from an incidental keyword.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" }, "compare_by": { "description": "Restrict the comparison to these fields. Recognised values: price, duration, description, includes (name, category and match_type are always present; unrecognised values are ignored). Omit for the full comparison view.", "items": { "maxLength": 50, "type": "string" }, "maxItems": 10, "type": "array" }, "service_type": { "description": "Service category or keyword to compare. Matches category exactly first, then service name/description contains.", "maxLength": 100, "minLength": 1, "type": "string" } }, "required": [ "business", "service_type" ], "type": "object" }, "name": "compare_business_services", "outputSchema": { "properties": { "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "business_name": { "type": "string" }, "comparison_summary": { "properties": { "count": { "type": "integer" }, "duration_range": { "properties": { "max": { "type": "integer" }, "min": { "type": "integer" } }, "type": [ "object", "null" ] }, "price_range": { "properties": { "currency": { "type": [ "string", "null" ] }, "max": { "type": "number" }, "min": { "type": "number" } }, "type": [ "object", "null" ] } }, "type": "object" }, "data_source": { "type": "string" }, "last_updated": { "format": "date-time", "type": "string" }, "locale": { "type": "string" }, "service_type": { "type": "string" }, "services": { "items": { "properties": { "category": { "type": [ "string", "null" ] }, "currency": { "type": [ "string", "null" ] }, "description": { "type": [ "string", "null" ] }, "duration_display": { "type": [ "string", "null" ] }, "duration_minutes": { "type": [ "integer", "null" ] }, "match_type": { "enum": [ "exact_category", "name_keyword", "description_keyword" ], "type": "string" }, "name": { "type": "string" }, "price": { "type": [ "number", "null" ] }, "price_display": { "type": [ "string", "null" ] }, "price_max": { "type": [ "number", "null" ] }, "price_per_minute": { "type": [ "number", "null" ] }, "price_type": { "enum": [ "fixed", "from", "range", "hourly", "free", "contact", "recurring", "by_quote", "unpublished", null ], "type": [ "string", "null" ] } }, "type": "object" }, "maxItems": 20, "type": "array" }, "suggestion": { "type": "object" }, "verified": { "type": "boolean" } }, "type": "object" } }, { "description": "The canonical ids and endpoint URLs for one business — its own MCP and A2A endpoints, agent card, llms.txt and public page, under `protocol_urls`. A null URL means that surface is switched off for this business right now: do not construct it yourself, and use one of the non-null surfaces instead.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" } }, "required": [ "business" ], "type": "object" }, "name": "get_business_agent", "outputSchema": { "properties": { "available_locales": { "items": { "type": "string" }, "type": "array" }, "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "content_locale": { "type": "string" }, "data_source": { "enum": [ "profile" ], "type": "string" }, "protocol_urls": { "properties": { "a2a_url": { "format": "uri", "type": [ "string", "null" ] }, "agent_card_url": { "format": "uri", "type": [ "string", "null" ] }, "llms_txt_url": { "format": "uri", "type": [ "string", "null" ] }, "mcp_url": { "format": "uri", "type": [ "string", "null" ] }, "page_url": { "format": "uri", "type": [ "string", "null" ] } }, "type": "object" }, "protocols": { "items": { "type": "string" }, "type": "array" }, "resolved_at": { "format": "date-time", "type": "string" }, "tools_available": { "items": { "type": "string" }, "type": "array" }, "verified": { "type": "boolean" } }, "type": "object" } }, { "description": "Full profile for one business found through search_businesses: identity, locations, contact, policies, images, public documents and the languages it publishes in.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" }, "sections": { "description": "Which sections to include. Defaults to all.", "items": { "enum": [ "identity", "location", "contact", "policies", "all" ], "type": "string" }, "maxItems": 5, "type": "array" } }, "required": [ "business" ], "type": "object" }, "name": "get_business_info", "outputSchema": { "properties": { "asserts_no_physical_location": { "type": "boolean" }, "available_locales": { "items": { "type": "string" }, "type": "array" }, "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "call_to_action": { "properties": { "label": { "type": "string" }, "translation_status": { "enum": [ "original" ], "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "category": { "type": "string" }, "contact": { "type": "object" }, "data_source": { "enum": [ "profile", "integration", "cached" ], "type": "string" }, "description": { "type": "string" }, "documents": { "items": { "properties": { "last_updated": { "format": "date-time", "type": "string" }, "mime_type": { "type": "string" }, "preview": { "type": [ "string", "null" ] }, "title": { "type": "string" }, "translation_status": { "enum": [ "original" ], "type": "string" }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "type": "array" }, "images": { "properties": { "cover": { "format": "uri", "type": [ "string", "null" ] }, "logo": { "format": "uri", "type": [ "string", "null" ] }, "photos": { "items": { "properties": { "alt_text": { "type": [ "string", "null" ] }, "url": { "format": "uri", "type": "string" } }, "type": "object" }, "maxItems": 12, "type": "array" } }, "type": "object" }, "intake": { "properties": { "fields": { "items": { "properties": { "label": { "type": "string" }, "name": { "type": "string" }, "required": { "type": "boolean" }, "type": { "type": "string" } }, "type": "object" }, "maxItems": 20, "type": "array" }, "instructions": { "type": [ "string", "null" ] } }, "type": "object" }, "keywords": { "items": { "type": "string" }, "maxItems": 20, "type": "array" }, "last_updated": { "format": "date-time", "type": "string" }, "locale": { "type": "string" }, "location": { "type": "object" }, "locations": { "type": "array" }, "name": { "type": "string" }, "policies": { "properties": { "accessibility": { "type": [ "string", "null" ] }, "general": { "type": [ "string", "null" ] }, "payment_methods": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "protocols_available": { "items": { "type": "string" }, "type": "array" }, "subcategories": { "items": { "type": "string" }, "maxItems": 10, "type": "array" }, "tagline": { "type": [ "string", "null" ] }, "tools_available": { "items": { "type": "string" }, "type": "array" }, "verified": { "type": "boolean" } }, "type": "object" } }, { "description": "One business's service catalogue, with filtering, sorting and pagination. Page with `offset`/`limit` and read `has_more` — the order is stable, so a second page will not repeat or skip a service.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" }, "category": { "description": "Filter by service category", "maxLength": 100, "type": "string" }, "limit": { "default": 20, "maximum": 50, "minimum": 1, "type": "integer" }, "max_duration": { "description": "Only services lasting at most this many minutes", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "max_price": { "description": "Only services priced at or below this amount", "minimum": 0, "type": "number" }, "min_duration": { "description": "Only services lasting at least this many minutes", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "min_price": { "description": "Only services priced at or above this amount", "minimum": 0, "type": "number" }, "offset": { "anyOf": [ { "maximum": 10000, "minimum": 0, "type": "integer" }, { "maxLength": 64, "minLength": 1, "type": "string" } ], "description": "Pagination position: omit for the first page, then pass back the `next_offset` token from the previous response VERBATIM. The token is opaque and bound to the catalogue as it was when the page was issued — if services were added, removed or reordered since, the call returns `cursor_expired` and you should restart without an offset. A plain integer offset is still accepted in EITHER spelling — as a JSON number (20) or as its exact string form (\"20\") — and skips that many results with no catalogue binding. Only a string that is neither an exact integer nor a token this endpoint issued (for example a mangled or truncated token) is refused with `cursor_expired` rather than resumed." }, "price_type": { "description": "Filter by price type (e.g. fixed, from, range, hourly, free, contact, or unpublished for services with no price set)", "maxLength": 50, "type": "string" }, "sort_by": { "description": "Field to sort by. Recognised values: price, duration, name, category (unrecognised values are ignored — results stay unsorted).", "maxLength": 50, "type": "string" }, "sort_order": { "description": "Sort direction (defaults to asc)", "enum": [ "asc", "desc" ], "type": "string" } }, "required": [ "business" ], "type": "object" }, "name": "get_business_services", "outputSchema": { "properties": { "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "data_source": { "type": "string" }, "has_more": { "type": "boolean" }, "last_updated": { "format": "date-time", "type": "string" }, "limit": { "type": "integer" }, "locale": { "type": "string" }, "next_offset": { "type": [ "string", "null" ] }, "offset": { "type": "integer" }, "restart": { "type": "boolean" }, "returned_count": { "type": "integer" }, "services": { "items": { "properties": { "booking_mode": { "enum": [ "none", "inquiry", "external", "realtime", null ], "type": [ "string", "null" ] }, "category": { "type": [ "string", "null" ] }, "currency": { "type": [ "string", "null" ] }, "description": { "type": [ "string", "null" ] }, "duration_display": { "type": [ "string", "null" ] }, "duration_minutes": { "type": [ "integer", "null" ] }, "name": { "type": "string" }, "price": { "type": [ "number", "null" ] }, "price_display": { "type": [ "string", "null" ] }, "price_max": { "type": [ "number", "null" ] }, "price_per_minute": { "type": [ "number", "null" ] }, "price_type": { "enum": [ "fixed", "from", "range", "hourly", "free", "contact", "recurring", "by_quote", "unpublished", null ], "type": [ "string", "null" ] }, "requires_booking": { "type": "boolean" } }, "type": "object" }, "type": "array" }, "total": { "type": "integer" } }, "type": "object" } }, { "description": "Search the CoreLoop business directory. Start here: every other tool on this endpoint needs a business, and each result carries the `business_id` and `slug` you pass to them as the `business` argument. `business_id` is a PUBLIC, OPAQUE, STABLE routing identifier: it is safe to store and re-use across sessions, it stays the same when a business renames itself or changes its slug, and it carries no sensitive information. Treat it as a token — do not parse it, do not derive meaning from its format, and do not construct one. Pass back exactly the value you were given. A result with `asserts_no_physical_location: true` has stated that it has no premises (consultants, trades, online-only) — it is intentionally absent from city search rather than missing data. `false` means no such statement was made; it does NOT imply premises. Results are returned in your requested language when the business has published a translation: send `?locale=<code>` on the endpoint URL (takes precedence) or an Accept-Language header. Each result reports the language it is written in (`locale`), the business's original language (`content_locale`), and every language it is available in (`available_locales`). `mcp_url`, `a2a_url` and `page_url` — and every URL inside `protocol_urls` — are null when that surface is currently switched off for the business: a null is intentional (do not construct the URL yourself), and the business remains reachable through its non-null surfaces. `data_source: \"directory\"` marks these rows as the search projection; call get_business_info for the live profile. PAGING: one call returns at most `limit` results. Read `has_more` — a short page is not proof of the end — and pass `next_cursor` back as `cursor` for the next page. The cursor is opaque and bound to the filters and sort it was issued for: change any of them and it is rejected, so start a new search instead. `limit` may change between pages.", "inputSchema": { "additionalProperties": false, "properties": { "capabilities": { "description": "Filter by capability tags (e.g. real_time_booking, live_pricing, verified)", "items": { "maxLength": 64, "type": "string" }, "maxItems": 20, "type": "array" }, "category": { "description": "Filter by business category (case-insensitive exact match). Canonical categories: Accounting & Tax, Agriculture & Farming, Automotive, Beauty & Wellness, Childcare & Family, Cleaning Services, Construction & Renovation, Creative & Arts, Education & Training, Events & Entertainment, Financial Services, Fitness & Sports, Food & Beverage, Funeral & Memorial, Health & Medical, Home Services, Legal Services, Media & Photography, Nonprofit & Community, Personal Care & Therapy, Pets & Animals, Professional Services, Real Estate, Religious & Spiritual, Retail & Shopping, Security Services, Sports & Recreation, Technology & IT, Transportation & Logistics, Travel & Tourism, Other", "maxLength": 120, "type": "string" }, "city": { "description": "Filter by city (case-insensitive exact match)", "maxLength": 120, "type": "string" }, "cursor": { "description": "Continuation token from a previous response's `next_cursor`. Omit for the first page. It is opaque and bound to the filters and sort it was issued for: pass it back byte-for-byte, and change nothing except `limit` between pages — any other change makes it invalid and you must start a new search. At most 100 results are reachable by paging; narrow the filters to see beyond that.", "maxLength": 512, "type": "string" }, "has_live_booking": { "description": "Only show businesses with real-time booking", "type": "boolean" }, "has_live_catalog": { "description": "Only show businesses with live catalog pricing", "type": "boolean" }, "limit": { "default": 10, "description": "Maximum results per page (1-20). Out-of-range values are clamped, not rejected.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "min_rating": { "description": "Minimum average rating (0-5)", "type": "number" }, "query": { "description": "Search query (business name or keyword)", "maxLength": 200, "type": "string" }, "service_type": { "description": "Filter by service type keyword", "maxLength": 120, "type": "string" }, "sort_by": { "description": "Sort results. Default: relevance", "enum": [ "relevance", "rating", "name" ], "type": "string" }, "verified_only": { "description": "Only show verified businesses", "type": "boolean" } }, "type": "object" }, "name": "search_businesses", "outputSchema": { "properties": { "businesses": { "items": { "properties": { "business_id": { "description": "Opaque, stable, public routing identifier for this business. Pass it back unchanged as the `business` argument of any other tool on this endpoint. It is safe to store and re-use across sessions and it survives a rename or a slug change; it carries no sensitive information. Treat it as an opaque token: do not parse it, do not infer meaning from its format, and do not construct one.", "format": "uuid", "type": "string" }, "data_source": { "enum": [ "directory" ], "type": "string" }, "last_updated": { "format": "date-time", "type": [ "string", "null" ] }, "name": { "type": "string" }, "protocol_urls": { "properties": { "a2a_url": { "format": "uri", "type": [ "string", "null" ] }, "agent_card_url": { "format": "uri", "type": [ "string", "null" ] }, "llms_txt_url": { "format": "uri", "type": [ "string", "null" ] }, "mcp_url": { "format": "uri", "type": [ "string", "null" ] }, "page_url": { "format": "uri", "type": [ "string", "null" ] } }, "type": "object" }, "protocols": { "items": { "type": "string" }, "type": "array" }, "slug": { "type": "string" } }, "type": "object" }, "maxItems": 20, "type": "array" }, "has_more": { "description": "True when more results exist beyond this page. Read this rather than inferring from `returned_count`: a short page is not proof of the end.", "type": "boolean" }, "next_cursor": { "description": "Opaque continuation token, or null on the last page. Pass it back unchanged as `cursor` to get the next page. It is bound to this search's filters and sort — change them and it is rejected, so start a new search instead. Do not parse, modify or construct one.", "type": [ "string", "null" ] }, "requested_locale": { "type": [ "string", "null" ] }, "returned_count": { "type": "integer" } }, "type": "object" } }, { "description": "Send a message to one business. This has a real side effect — it notifies the owner and delivers an email — and is rate-limited both per business and across this directory, so send one considered inquiry rather than a broadcast.", "inputSchema": { "additionalProperties": false, "properties": { "business": { "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.", "maxLength": 200, "minLength": 1, "type": "string" }, "message": { "description": "Inquiry message (plain text, max 2000 chars)", "maxLength": 2000, "minLength": 1, "type": "string" }, "sender_email": { "format": "email", "maxLength": 254, "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", "type": "string" }, "sender_name": { "maxLength": 200, "minLength": 1, "type": "string" }, "sender_phone": { "maxLength": 20, "type": "string" }, "subject": { "maxLength": 200, "type": "string" } }, "required": [ "business", "message", "sender_name" ], "type": "object" }, "name": "send_business_inquiry", "outputSchema": { "properties": { "business": { "properties": { "business_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "type": "object" }, "message": { "type": "string" }, "status": { "enum": [ "sent", "rate_limited", "unavailable", "error" ], "type": "string" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:fa4df8c3d43af7eed4273f1f5cf86cb3980f93dc30f595b3fefc53509475704d | sha256sum