Koskamo

Agenda Rio MCP

An MCP server providing real-time AI-agent access to Agenda Rio's curated neighborhood directory and community hub. It enables agents to search for local places, retrieve place details, list upcoming events, find guides, search for dishes, and list offers, facilitating discovery of cultural activities and businesses in Rio de Janeiro.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Agenda Rio MCP logo, by Agenda RioCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Agenda Rio
MCP endpoint (Streamable HTTP)
https://agenda.rio.br/mcp
Vendor documentation

What its tools do

17 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

17 of 17 have a description · 17 of 17 declare behavior hints · 13 of 13 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for local places and businesses
  • List upcoming cultural events and shows
  • Retrieve detailed information about a specific place
  • Search for dishes and list current offers

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
genesis-directory 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
17 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Agenda Rio — events and cultural agenda for Rio de Janeiro: shows, exhibitions, and things to do. Use the tools to search places, browse categories, find events, read menus, and TRANSACT. Transactional tools never complete a purchase on their own. create_booking, reserve_event_tickets and create_checkout return a URL a human must open and pay on — until they do, nothing is booked, held or bought. request_reservation and rsvp_event send a confirmation email to the address you supply and do nothing until that person clicks it, so use a real address belonging to the person you are acting for. Always tell the user what step is still theirs.

Tools

17 advertised

get_site_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns basic information about this neighborhood directory: name, locale, domain, description, canonical URLs for key sections, plus the current LOCAL TIME and CURRENT WEATHER at the neighborhood (temperature, condition). Use this for any "what time is it there" or "what's the weather like" context.

get_site_info input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_site_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_places
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search for places (restaurants, cafes, shops, etc.) in this neighborhood. The `q` match is accent-insensitive and typo-tolerant ("acai" finds "Açaí", "restaurnt" finds "Restaurante"), ranked by relevance. Compose filters for multi-condition queries: `category`, `neighborhood`, `open_now` (true = open at this exact moment), and `attributes` (amenity slugs, ALL must match). Each result includes a precomputed `open_now` boolean, an `attributes` array (amenity slugs), a `delivery` array of curated delivery-app deep-links (ifood, rappi, 99food, uber-eats — each `{ platform, url }`), rating, and structured `hours` (Google Maps periods: day 0=Sun–6=Sat, time "HHMM"). Amenity slugs are listed on the `attributes` parameter.

search_places input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "description": "Free-text term matched against place name and address — accent-insensitive and typo-tolerant."
    },
    "limit": {
      "type": "number",
      "description": "Max results to return (default 20, max 100)."
    },
    "category": {
      "type": "string",
      "examples": [
        "Café",
        "Restaurante"
      ],
      "description": "Filter by category label. Case-insensitive substring match."
    },
    "open_now": {
      "type": "boolean",
      "description": "When true, return only places open at the current local time (computed server-side from their opening hours)."
    },
    "attributes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "examples": [
        [
          "wifi",
          "outdoor-seating"
        ]
      ],
      "description": "Amenity slugs a place must ALL have. Common slugs: wifi, outdoor-seating, wheelchair, dog-friendly, delivery, takeaway, reservations, live-music, vegan, gluten-free."
    },
    "neighborhood": {
      "type": "string",
      "description": "Filter by neighborhood name. Case-insensitive substring match."
    }
  }
}
search_places annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_place
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details for a specific place by its URL slug, including opening hours, a precomputed `open_now` boolean, amenity `attributes` (slugs), the same `delivery` deep-link array search_places returns, ratings, address, and neighborhood.

get_place input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "examples": [
        "cafe-example"
      ],
      "description": "URL slug of the place."
    }
  }
}
get_place annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_events
Advertised by the server during the last successful anonymous check.
Advertised read-only

List upcoming events in this neighborhood with date, venue, price, and URL. Events within the next 7 days include a weatherForecast (condition + min/max temperature) for the event day — use it to tell users e.g. "the event is at X and it will be raining". Pass `filter` to narrow by time or price; `filter: "agora"` answers "what can I go to right now" and is resolved live on every call, which no cached page can do.

list_events input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max events to return (default 20, max 50)."
    },
    "filter": {
      "enum": [
        "agora",
        "hoje",
        "amanha",
        "fim-de-semana",
        "gratis"
      ],
      "type": "string",
      "description": "Narrow the list: \"agora\" = on stage at this exact moment (season runs and day-granular sources are excluded, because their stored window says nothing about whether a session is on right now); \"hoje\"/\"amanha\"/\"fim-de-semana\" = running on those days, including multi-day runs; \"gratis\" = free to attend, including externally-ticketed events priced at 0."
    },
    "upcoming_only": {
      "type": "boolean",
      "description": "Only return upcoming or in-progress events (default true)."
    }
  }
}
list_events annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_booking_services
Advertised by the server during the last successful anonymous check.
Advertised read-only

List a venue's services — what it offers, with price and duration. Pass `place_slug` (from search_places) to list the services of a specific VENUE — a salon, clinic or studio listed in this directory; that is what you want in almost every case, and it is the only form whose serviceId works with create_booking. Omitting `place_slug` lists the directory site's own services instead, which most sites do not have. Returns name, description, price, duration in minutes, and `bookableViaMcp`. Services are listed for EVERY venue, including those with no online booking system — check `bookableViaMcp`: when it is false, `id` is null and you cannot book through create_booking, so point the user at `bookingUrl` or the venue's page instead.

list_booking_services input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "place_slug": {
      "type": "string",
      "description": "Venue place slug from search_places. Strongly recommended — without it you get the directory's own services, not a venue's."
    }
  }
}
list_booking_services annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_availability
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get available time slots for a bookable service on a given date (Wix Bookings). Pass the serviceId from list_booking_services and a date in YYYY-MM-DD. Pass the same `place_slug` you used there — slot times are returned in the VENUE's timezone, which is not necessarily the directory's.

get_availability input schema
{
  "type": "object",
  "required": [
    "serviceId",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "examples": [
        "2026-06-25"
      ],
      "description": "Date in YYYY-MM-DD format."
    },
    "serviceId": {
      "type": "string",
      "description": "Service ID from list_booking_services."
    },
    "place_slug": {
      "type": "string",
      "description": "Venue place slug — use the same one passed to list_booking_services."
    }
  }
}
get_availability annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_booking
Advertised by the server during the last successful anonymous check.

Book an appointment slot at a venue (Wix Bookings). NOTHING IS BOOKED UNTIL THE CUSTOMER PAYS: this returns a checkout URL, and the booking stays off the venue's calendar until a human opens that URL and completes payment on the venue's own site. Tell the user they must open the link. Call get_availability immediately before this — the slot is re-validated server-side and a taken slot is rejected. The contact email is NOT verified at this step; the checkout is what confirms it.

create_booking input schema
{
  "type": "object",
  "required": [
    "place_slug",
    "serviceId",
    "startDate",
    "endDate",
    "contact"
  ],
  "properties": {
    "contact": {
      "type": "object",
      "required": [
        "name",
        "email",
        "phone"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Full name."
        },
        "email": {
          "type": "string",
          "description": "Email address."
        },
        "phone": {
          "type": "string",
          "description": "Phone number, at least 10 digits. Any formatting is accepted."
        }
      },
      "description": "Who the booking is for. All three are required by the venue to confirm or reschedule."
    },
    "endDate": {
      "type": "string",
      "description": "Slot end as an ISO instant, exactly as returned by get_availability."
    },
    "serviceId": {
      "type": "string",
      "description": "Service ID from list_booking_services (called with the same place_slug)."
    },
    "startDate": {
      "type": "string",
      "description": "Slot start as an ISO instant, exactly as returned by get_availability."
    },
    "place_slug": {
      "type": "string",
      "description": "Venue place slug from search_places."
    },
    "resourceId": {
      "type": "string",
      "description": "Optional staff/resource ID from the slot, when the user picked a specific professional."
    }
  }
}
create_booking annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
reserve_event_tickets
Advertised by the server during the last successful anonymous check.

Hold tickets for an event sold through this site (Wix Events) and return a checkout URL. THE HOLD IS TEMPORARY AND NOTHING IS PAID: the tickets are not the user's until a human opens the URL and completes checkout, and the hold expires on its own if they don't. Max 10 tickets and 10 ticket types per reservation. Only works for events this site sells directly — for events sold elsewhere (Sympla, Ingresse, Sesc), use the event's own ticketUrl instead.

reserve_event_tickets input schema
{
  "type": "object",
  "required": [
    "event_slug",
    "tickets"
  ],
  "properties": {
    "tickets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ticketDefinitionId",
          "quantity"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "description": "How many of this type (at least 1)."
          },
          "pricingOptionId": {
            "type": "string",
            "description": "Required when the ticket type lists pricingOptions in get_event_tickets: the id of the option the customer chose."
          },
          "ticketDefinitionId": {
            "type": "string",
            "description": "Ticket type ID from get_event_tickets."
          }
        }
      },
      "description": "Ticket types and quantities to hold."
    },
    "event_slug": {
      "type": "string",
      "description": "Event slug from list_events."
    }
  }
}
reserve_event_tickets annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
request_reservation
Advertised by the server during the last successful anonymous check.

Request a table at a restaurant. THE RESTAURANT IS NOT NOTIFIED YET: the request is held and a confirmation email is sent to the address you provide, and only when that person clicks the link does the restaurant receive it. Tell the user to check their inbox — the link expires in 24 hours. Use a real address belonging to the person you are acting for; the confirmation link is deliberately not returned to you. This is a request, not a confirmed booking: the restaurant confirms out of band.

request_reservation input schema
{
  "type": "object",
  "required": [
    "place_slug",
    "name",
    "email",
    "partySize",
    "requestedAt"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Name the table is under."
    },
    "email": {
      "type": "string",
      "description": "The guest's own email — the confirmation link is sent here."
    },
    "phone": {
      "type": "string",
      "description": "Optional phone number for the restaurant to reach the guest."
    },
    "message": {
      "type": "string",
      "description": "Optional note (occasion, dietary needs, seating preference)."
    },
    "partySize": {
      "type": "number",
      "description": "Number of people (1–30)."
    },
    "place_slug": {
      "type": "string",
      "description": "Restaurant place slug from search_places."
    },
    "requestedAt": {
      "type": "string",
      "description": "Desired date and time as an ISO instant. Must be in the future."
    }
  }
}
request_reservation annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
rsvp_event
Advertised by the server during the last successful anonymous check.

RSVP to a free event on this site (Wix Events). NOBODY IS ON THE GUEST LIST YET: a confirmation email goes to the address you provide, and the RSVP is only submitted when that person clicks the link (expires in 24 hours). Tell the user to check their inbox. Use a real address belonging to the person you are acting for — the confirmation link is deliberately not returned to you.

rsvp_event input schema
{
  "type": "object",
  "required": [
    "event_slug",
    "firstName",
    "lastName",
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "The guest's own email — the confirmation link is sent here."
    },
    "lastName": {
      "type": "string",
      "description": "Guest last name."
    },
    "firstName": {
      "type": "string",
      "description": "Guest first name."
    },
    "event_slug": {
      "type": "string",
      "description": "Event slug from list_events."
    }
  }
}
rsvp_event annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_event_tickets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get ticket types and prices for a specific event (Wix Events). Pass the event slug from list_events. Returns ticket names, prices, sale status, and how many are left.

get_event_tickets input schema
{
  "type": "object",
  "required": [
    "event_slug"
  ],
  "properties": {
    "event_slug": {
      "type": "string",
      "description": "Event slug from list_events."
    }
  }
}
get_event_tickets annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_pricing_plans
Advertised by the server during the last successful anonymous check.
Advertised read-only

List membership or subscription plans (Wix Pricing Plans). Pass `place_slug` (from search_places) to list the plans of a specific VENUE — a gym, studio or clinic listed in this directory (e.g. its monthly/annual membership); that is what you want in almost every case. Omitting `place_slug` lists the directory site's own plans instead, which most sites do not have. Returns plan name, description, price, billing cycle, perks, and a direct checkout URL.

list_pricing_plans input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "place_slug": {
      "type": "string",
      "description": "Venue place slug from search_places. Strongly recommended — without it you get the directory's own plans, not a venue's."
    }
  }
}
list_pricing_plans annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_reviews
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get published reviews for this site (Wix Reviews). Returns reviewer name, rating, title, and content.

get_reviews input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max reviews to return (default 10, max 50)."
    }
  }
}
get_reviews annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_faqs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get all FAQ questions and answers for this site (Wix FAQ). Grouped by category. Use this to answer common questions about the site — opening hours, parking, policies, etc.

list_faqs input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
list_faqs annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_forms
Advertised by the server during the last successful anonymous check.
Advertised read-only

List available contact/signup forms on this site (Wix Forms). Returns form name, ID, and field definitions (label, type, required). Use before submit_form to discover which fields to fill.

list_forms input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
list_forms annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_form
Advertised by the server during the last successful anonymous check.

Submit a form on behalf of the user (Wix Forms). Call list_forms first to get the formId and field keys. Returns a submissionId on success.

submit_form input schema
{
  "type": "object",
  "required": [
    "formId",
    "fields"
  ],
  "properties": {
    "fields": {
      "type": "object",
      "examples": [
        {
          "field_1": "João",
          "field_2": "joao@email.com"
        }
      ],
      "description": "Key-value pairs matching the field keys from list_forms.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "formId": {
      "type": "string",
      "description": "Form ID from list_forms."
    }
  }
}
submit_form annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_loyalty_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the loyalty/rewards program details for this site (Wix Loyalty). Returns program name, points currency name, and tier structure with required points per tier.

get_loyalty_info input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_loyalty_info annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-06: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
707 ms
95th percentile latency
707 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 707 ms · metadata changed · 17 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http agenda-rio-mcp https://agenda.rio.br/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add agenda-rio-mcp --url https://agenda.rio.br/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable agenda-rio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "agenda-rio-mcp": {
      "url": "https://agenda.rio.br/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "agenda-rio-mcp": {
      "type": "streamableHttp",
      "url": "https://agenda.rio.br/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start agenda-rio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "agenda-rio-mcp": {
      "type": "http",
      "url": "https://agenda.rio.br/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http agenda-rio-mcp https://agenda.rio.br/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://agenda.rio.br/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "agenda-rio-mcp": {
      "serverUrl": "https://agenda.rio.br/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Agenda Rio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.