{"server":{"name":"com.udansa/udansa","title":"udansa","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://udansa.com/mcp","type":"streamable-http"}],"version":"0.3.1","websiteUrl":"https://udansa.com","description":"Find dance classes, dance events nearby and dance guide articles."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-13T18:43:14.614515Z","publishedAt":"2026-10-13T18:43:14.614515Z","statusChangedAt":"2026-10-13T18:43:14.614515Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://udansa.com/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2026-07-28"],"stateless":true},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":2245,"consecutive_failures":0,"last_probe_at":"2026-10-19T16:14:15.002Z","last_ok_at":"2026-10-19T16:14:15.002Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"get_course_details","title":"Dance course details","description":"Full public details of one dance course on udansa: description, styles, level, provider, instructor, venue with address, schedule (start, end or 'ongoing', weekday, upcoming sessions, time zone), price and price options, free places, age limits, waitlist, trial lesson and whether it can be booked online on udansa (booking.reason says why not, booking.book_at where to book instead - udansa gives no external booking links). Link: url.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"get_event_details","title":"Dance event details","description":"Full public details of one dance event on udansa: title and description in the requested language, category, styles, start and end with time zone, venue, organizer (null for events curated by udansa), artists, programme, ticket categories with price and remaining tickets, add-ons, free places, series (next date), waitlist and whether tickets can be bought on udansa (booking.reason says why not, booking.tickets where tickets are instead - udansa gives no external ticket links). Link: url.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"get_search_filter_options","title":"List cities and dance styles","description":"List every city and dance style that currently has courses (kind 'courses') or events (kind 'events') on udansa, with style names in the requested language. Use the values as city / style filters in search_dance_courses and search_dance_events.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"read_page_text","title":"Seite als Text lesen","description":"Read the text of a udansa content page (guide article, city or dance style page, terms, privacy or cancellation policy, about us) as plain sections plus its FAQ. Pass a URL or path from search_guide_articles, e.g. https://udansa.com/en/dance-guide/... For courses and events use get_course_details / get_event_details.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"search_dance_courses","title":"Search dance courses","description":"Search public dance courses on udansa - the same results as the course search page. Filter by free text, city, dance style (any language), level, weekday, provider and price. Each result has id, title, style, level, city, venue, weekday, start/end, whether it runs continuously ('ongoing'), price ('free' when it costs nothing), free places and the course page URL. Also returns the most common filter values with counts (filter_options) and a link to the same search on udansa. Use get_course_details for one course; booking happens on the course page.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"search_dance_events","title":"Search dance events","description":"Search upcoming dance events on udansa (parties, workshops, festivals, congresses, balls) - the same results as the event search page. Filter by free text, city, dance style (any language), category, weekday, organizer and price. Recurring events appear once with their next date. Each result has id, title, style, type, city, venue, start/end, price_from (null when the organizer has not published a price; 'free' only when it really costs nothing), how tickets are sold ('udansa', 'external', 'at_the_door'), a short summary and the event page URL. Use get_event_details for tickets and programme.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"},{"name":"search_guide_articles","title":"Tanz-Ratgeber durchsuchen","description":"Search udansa's editorial content: about 1,400 dance guide articles (learning to dance, finding a dance partner, wedding dance, dance styles, etiquette, health), city guides and dance style pages, in 40 languages. Returns titles, short summaries and page URLs; read one with read_page_text.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true},"source":"probe","observed_at":"2026-10-19T16:14:15.002Z"}],"dev.protogrid/trust":{"score":83,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":55},"drivers":["+dns-namespace","+website","+reachable","+uptime-100%","+updated-6d-ago","-no-repository"],"flags":["no-repository"],"blocked":false,"computed_at":"2026-10-19T20:34:48.945Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":92,"label":"new","components":{"auth":null,"hygiene":86,"protocol":100,"stability":null,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"supports 2026-07-28 (server/discover)","status":"pass","category":"protocol"},{"id":"protocol.stateless","detail":"answers without a session","status":"pass","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"tool list is cacheable (ttlMs 86400000)","status":"pass","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"7 of 7 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_guide_articles (destructiveHint); read_page_text (destructiveHint); search_dance_courses (destructiveHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 2,207 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"tool history recorded for 6 of the 7 days needed","status":"na","category":"stability"},{"id":"stability.rug_pull","detail":"tool history recorded for 6 of the 7 days needed","status":"na","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.directory_hints"],"flags":[],"tool_count":7,"token_estimate":2207,"tools_hash":"f98fe63894055ba1697e12b7e4a0c09f","tools_changed_at":"2026-10-17T18:04:44.057Z","computed_at":"2026-10-19T20:38:04.291Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"com.udansa/udansa","aliases":[],"alias_count":0,"repository_key":null,"owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/com.udansa%2Fudansa/tools","arguments":{"name":"com.udansa/udansa"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/com.udansa%2Fudansa/connection?target=mcpServers","arguments":{"name":"com.udansa/udansa","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}