{"id":8799,"name":"CoreLoop Business Network","description":"The CoreLoop business network: one A2A endpoint for every published business on CoreLoop. Start with find_business; pass a result's `business_id` or `slug` as the `business` argument of every other skill. Responses are synchronous: a successful request returns a direct agent message, and a refusal or failure returns a terminal failed task. Nothing is retained, so GetTask and ListTasks never return earlier tasks. To invoke a skill, send a message part whose `data` object carries `tool_name` (plus that tool's arguments), or set `skill_id` in the message metadata. Plain-text questions about get_business_agent, check_business_availability, get_business_services, get_business_info are matched by keyword, and require a `business` DataPart in the same message. Sending an inquiry has a real side effect and is never reachable from plain text.","card_url":"https://coreloop.so/.well-known/agent-card.json","endpoint":"https://coreloop.so/api/a2a/coreloop-directory","protocol_version":"1.0","first_seen":"2026-10-10T07:48:51.587569+00:00","last_verified":"2026-10-10T07:59:17.638026+00:00","card":{"name":"CoreLoop Business Network","skills":[{"id":"find_business","name":"Find a business","tags":["directory","search","discovery"],"examples":["{\"messageId\":\"example-message-id-replace-per-message\",\"role\":\"ROLE_USER\",\"parts\":[{\"data\":{\"tool_name\":\"search_businesses\",\"category\":\"professional_services\",\"city\":\"Rotterdam\",\"limit\":5}}]}"],"inputModes":["application/json"],"description":"Search the CoreLoop business directory by category, city, keyword, rating or capability. Start here: every other skill on this endpoint needs a business, and each result carries the `business_id` and `slug` you pass as the `business` argument. `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, carrying no sensitive information. Pass back exactly the value you were given — do not parse it, infer meaning from its format, or construct one. A null `mcp_url`, `a2a_url` or `page_url` means that surface is switched off for the business right now — do not construct the URL yourself. Maximum 20 results per call: read `has_more` 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, so change them and it is rejected. Structured invocation only: filters cannot be inferred from prose without guessing what you meant.","outputModes":["application/json"]},{"id":"compare_business_services","name":"Compare one business's services","tags":["services","comparison","pricing"],"examples":["{\"messageId\":\"example-message-id-replace-per-message\",\"role\":\"ROLE_USER\",\"parts\":[{\"data\":{\"tool_name\":\"compare_business_services\",\"business\":\"example-logistics\",\"service_type\":\"freight forwarding\"}}]}"],"inputModes":["application/json"],"description":"Compare ONE business's own services within a service category or keyword, with a price and duration summary. This does NOT compare two businesses: it takes a single `business` and ranks what that business offers. To weigh several businesses against each other, call find_business and then this skill once per candidate. Each row reports `match_type`, so an exact category hit is distinguishable from an incidental keyword match. Structured invocation only: `service_type` is required and must be stated, never guessed from prose.","outputModes":["application/json"]},{"id":"route_business_task","name":"Ask a business","tags":["business","profile","services","hours","inquiry"],"examples":["{\"messageId\":\"example-message-id-replace-per-message\",\"role\":\"ROLE_USER\",\"parts\":[{\"text\":\"What are your opening hours?\"},{\"data\":{\"business\":\"example-logistics\"}}]}","{\"messageId\":\"example-message-id-replace-per-message\",\"role\":\"ROLE_USER\",\"parts\":[{\"text\":\"What services do you offer and what do they cost?\"},{\"data\":{\"business\":\"example-logistics\"}}]}","{\"messageId\":\"example-message-id-replace-per-message\",\"role\":\"ROLE_USER\",\"parts\":[{\"data\":{\"tool_name\":\"get_business_info\",\"business\":\"example-logistics\"}}]}"],"inputModes":["application/json","text/plain"],"description":"Route a task to one business found through find_business: its full profile, its service catalogue, its opening hours, its own endpoint URLs, or an inquiry delivered to its owner. Send a DataPart whose `data` carries `business` (a `business_id` or slug) plus `tool_name` and that tool's arguments. A plain-text question is also accepted WHEN the same message carries a `business` DataPart: the words choose the read, and never supply arguments. Sending an inquiry is a WRITE with a real side effect and is therefore reachable only through an explicit `tool_name: \"send_business_inquiry\"` — never from a plain-text message.","outputModes":["application/json"]}],"iconUrl":"https://coreloop.so/brand/coreloop-mark-512.png","version":"1.1.1","metadata":{"coreloop.taskRetention":"none","coreloop.syncResponseKind":"message"},"provider":{"url":"https://coreloop.so","organization":"CoreLoop"},"description":"The CoreLoop business network: one A2A endpoint for every published business on CoreLoop. Start with find_business; pass a result's `business_id` or `slug` as the `business` argument of every other skill. Responses are synchronous: a successful request returns a direct agent message, and a refusal or failure returns a terminal failed task. Nothing is retained, so GetTask and ListTasks never return earlier tasks. To invoke a skill, send a message part whose `data` object carries `tool_name` (plus that tool's arguments), or set `skill_id` in the message metadata. Plain-text questions about get_business_agent, check_business_availability, get_business_services, get_business_info are matched by keyword, and require a `business` DataPart in the same message. Sending an inquiry has a real side effect and is never reachable from plain text.","capabilities":{"streaming":true,"pushNotifications":false},"documentationUrl":"https://coreloop.so/docs","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"supportedInterfaces":[{"url":"https://coreloop.so/api/a2a/coreloop-directory","protocolBinding":"JSONRPC","protocolVersion":"1.0"}]},"signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-10-10T07:59:17.638026+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Agenstry federation","source_url":"https://agenstry.com/docs","last_check":{"checked_at":"2026-10-10T07:59:17.638026+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://coreloop.so/.well-known/agent-card.json"],"skills":[{"skill_id":"route_business_task","name":"Ask a business","description":"Route a task to one business found through find_business: its full profile, its service catalogue, its opening hours, its own endpoint URLs, or an inquiry delivered to its owner. Send a DataPart whose `data` carries `business` (a `business_id` or slug) plus `tool_name` and that tool's arguments. A plain-text question is also accepted WHEN the same message carries a `business` DataPart: the words choose the read, and never supply arguments. Sending an inquiry is a WRITE with a real side effect and is therefore reachable only through an explicit `tool_name: \"send_business_inquiry\"` — never from a plain-text message.","tags":["business","profile","services","hours","inquiry"],"quality_warning":false},{"skill_id":"compare_business_services","name":"Compare one business's services","description":"Compare ONE business's own services within a service category or keyword, with a price and duration summary. This does NOT compare two businesses: it takes a single `business` and ranks what that business offers. To weigh several businesses against each other, call find_business and then this skill once per candidate. Each row reports `match_type`, so an exact category hit is distinguishable from an incidental keyword match. Structured invocation only: `service_type` is required and must be stated, never guessed from prose.","tags":["services","comparison","pricing"],"quality_warning":false},{"skill_id":"find_business","name":"Find a business","description":"Search the CoreLoop business directory by category, city, keyword, rating or capability. Start here: every other skill on this endpoint needs a business, and each result carries the `business_id` and `slug` you pass as the `business` argument. `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, carrying no sensitive information. Pass back exactly the value you were given — do not parse it, infer meaning from its format, or construct one. A null `mcp_url`, `a2a_url` or `page_url` means that surface is switched off for the business right now — do not construct the URL yourself. Maximum 20 results per call: read `has_more` 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, so change them and it is rejected. Structured invocation only: filters cannot be inferred from prose without guessing what you meant.","tags":["directory","search","discovery"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":2,"passed":2},"recent_checks":[{"card_url":"https://coreloop.so/.well-known/agent-card.json","checked_at":"2026-10-10T07:59:17.638026+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},{"card_url":"https://coreloop.so/.well-known/agent-card.json","checked_at":"2026-10-10T07:48:51.587569+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-10-10T07:59:17.638026+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-10-10T07:48:51.587569+00:00","state":"a2a_response","http_status":404,"detail":"A2A task-not-found response to a read-only task lookup"},"events":[],"relationships":[],"verification":{"agent_card_url":"https://coreloop.so/.well-known/agent-card.json","last_successful_card_check":"2026-10-10T07:59:17.638026+00:00","latest_card_check":{"checked_at":"2026-10-10T07:59:17.638026+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"unsigned","signature_checked_at":"2026-10-10T07:59:17.638026+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-10-10T07:59:17.638026+00:00","endpoint_tls_reachable":true,"protocol_check_state":"a2a_response","protocol_checked_at":"2026-10-10T07:48:51.587569+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}