Funziona con ChatGPT, Claude e Cursor

Usa Jymbro con ChatGPT, Claude e gli altri assistenti AI.

Collega Jymbro a ChatGPT, Claude o Cursor, poi chiedi e basta. Com'è messa Via Roma stamattina? Chi si è iscritto online questa settimana? Chiudi tutte le sedi il 25 dicembre. Il tuo assistente vede solo quello che vedi tu in Jymbro, niente di più.

strumenti per il tuo assistente
42
indirizzo da incollare
1
eliminazioni senza il tuo sì
0
Un manager chiede a un assistente AI di chiudere una sede il 25 dicembre e di copiare gli orari settimanali su un'altra. L'assistente trova gli strumenti e li esegue.

Cose che puoi chiedere.

Chiedi con parole tue, come faresti con un collega in reception.

  • Com'è messa Via Roma stamattina, e chi è dentro adesso?
  • Chiudi tutte le sedi il 25 dicembre e il 1° gennaio.
  • Chi si è iscritto online questa settimana e non ha ancora pagato?
  • Sara Bianchi starà via un mese. Metti in pausa la sua iscrizione.
  • Dai a Corso Italia gli stessi orari settimanali di Via Roma.
  • Quali piani non hanno membri attivi? Smetti di venderli.
  • Invita [email protected] nel team come receptionist a Via Roma.
  • Quali passaggi al tornello sono stati rifiutati oggi, e perché?

Collega il tuo assistente.

Non c'è niente da installare. Aggiungi Jymbro al tuo assistente, accedi con il tuo account Jymbro e approva l'accesso.

  • ChatGPT

    Su chatgpt.com apri Impostazioni → Sicurezza e accesso e attiva la Modalità sviluppatore. Poi apri Plugin, fai clic su +, chiamalo Jymbro e incolla l'indirizzo qui sotto. Se ChatGPT chiede come accedere, scegli OAuth: ti porta su Jymbro per accedere e approvare l'accesso.

    Per usarlo, apri una nuova chat, scegli Modalità sviluppatore dal menu + e seleziona Jymbro. Funziona con ChatGPT Plus, Pro, Business, Enterprise ed Edu. Con Business, Enterprise ed Edu può servire che l'amministratore del workspace attivi prima la modalità sviluppatore.

  • Claude

    Su claude.ai apri Impostazioni → Connettori, fai clic su Aggiungi connettore personalizzato, chiamalo Jymbro e incolla l'indirizzo qui sotto. Fai clic su Connetti: Claude ti porta su Jymbro per accedere e approvare l'accesso.

    Con un piano Claude Team o Enterprise, un owner aggiunge Jymbro una volta sola in Impostazioni organizzazione → Connettori. Poi ognuno collega il proprio account Jymbro.

  • Cursor

    Apri Cursor Settings → MCP, aggiungi un nuovo server chiamato Jymbro e incolla l'indirizzo qui sotto. Cursor apre Jymbro per farti accedere e approvare l'accesso.

  • Altri assistenti

    Ogni assistente che supporta i connettori MCP remoti funziona allo stesso modo: aggiungi un connettore, incolla l'indirizzo e accedi. Claude Code, VS Code e i file di configurazione sono più in basso, in Per gli sviluppatori.

Copia e incolla questo indirizzo quando il tuo assistente lo chiede:

https://jymbro.app/mcp/brands

Cosa può fare il tuo assistente?

Quasi tutto quello che fai nel back office di Jymbro, con una frase.

  • Orari: imposta gli orari settimanali, chiudi per una festività e copia gli orari da una sede all'altra.
  • Sedi: aggiungi una sede da un indirizzo, imposta discipline e servizi e aggiorna il profilo.
  • Team: invita persone, cambia i loro ruoli e rimuovile, con il tuo sì.
  • Membri: trova chiunque per nome o email, aggiungi un membro, metti in pausa o cambia un'iscrizione e approva le richieste di sede.
  • Iscrizioni online: guarda chi si è iscritto online, registra i pagamenti in reception e approva o rifiuta una domanda.
  • Piani di iscrizione: confronta i piani con i membri attivi, crea un piano, cambia i prezzi e archivia quelli che nessuno sceglie.
  • Reception: guarda quanto è piena ogni sede, chi è dentro adesso e quali passaggi al tornello sono stati rifiutati.
  • Brand: aggiorna nome, descrizione, contatti e immagine del tuo brand.
Guarda ogni attività passo per passo

Descrivi il lavoro. L'agente sceglie gli strumenti.

42 strumenti in 7 attività. Scegline una per vedere cosa chiedi, quali strumenti partono e cosa ti torna.

Guarda quanto è piena ogni sede, chi è dentro e quali passaggi al tornello richiedono te.

Tu

Come va Via Roma stamattina?

Strumenti usati
  1. get-location-today
  2. list-access-events
  3. list-present-members
Assistente

38 ingressi finora e 12 persone dentro. Un passaggio è stato rifiutato: l'iscrizione di Marco è in pausa.

Prompt pronti

Il tuo client li mostra come comandi slash. Scegline uno, indica il brand e l'agente conosce già i passaggi.

  • /desk-briefing

    Un riepilogo in cinque righe per una sede: quanto è piena, chi è dentro e cosa aspetta te.

    brandlocation
  • /review-applications

    Passa in rassegna le iscrizioni online una per una: pagamento, poi approva o rifiuta con il tuo sì.

    brandlocation (facoltativo)
  • /add-member

    Aggiunge una persona passo per passo: trova il piano, controlla che non sia già membro e chiede cosa manca.

    brandemail (facoltativo)plan (facoltativo)
  • /review-membership-plans

    Confronta i tuoi piani con i membri attivi e propone cosa cambiare o archiviare.

    brand
{ }Tutte le definizioni42 strumenti, con la ricerca e il JSON esatto che riceve il tuo agente.

42 di 42 strumenti

Brand4mcp/brands

list-brandsSola letturaRipetibileElenca i brand di cui fai parte, con il tuo ruolo in ciascuno.
Prova a chiedere

“Quali brand posso gestire?”

Vista agente
{
  "name": "list-brands",
  "title": "List brands",
  "description": "Lists the brands the user belongs to, with their role on each. Start here: other tools take a returned slug.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "annotations": {
    "title": "List brands",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
get-brandSola letturaRipetibileLegge un brand: nome, email di contatto, messaggio di benvenuto e colore.
Prova a chiedere

“Che messaggio di benvenuto mostra Iron Club?”

Vista agente
{
  "name": "get-brand",
  "title": "Read a brand",
  "description": "Reads one brand by slug. A brand is a sports facility business. Every role may read.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The slug of the brand to read.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "Read a brand",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
update-brand-generalModifica datiRipetibileCambia nome, email di contatto, messaggio di benvenuto o data di fondazione del brand.
Prova a chiedere

“Cambia la nostra email di contatto in [email protected].”

Vista agente
{
  "name": "update-brand-general",
  "title": "Update brand details",
  "description": "Updates a brand name, contact email, welcome message or established date. Send only the fields to change. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The slug of the brand to update.",
        "type": "string"
      },
      "name": {
        "description": "New brand name.",
        "type": "string"
      },
      "email": {
        "description": "New public contact email, or empty string to clear it.",
        "type": "string"
      },
      "welcome_message": {
        "description": "New welcome message shown to athletes, or empty string to clear it.",
        "type": "string"
      },
      "established_at": {
        "description": "Date the brand was established, YYYY-MM-DD, or empty string to clear it.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "Update brand details",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
update-brand-brandingModifica datiRipetibileImposta il colore del brand.
Prova a chiedere

“Usa un verde petrolio scuro come colore del brand.”

Vista agente
{
  "name": "update-brand-branding",
  "title": "Update brand branding",
  "description": "Sets the brand primary color, a hex code like #4f46e5. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The slug of the brand to update.",
        "type": "string"
      },
      "primary_color": {
        "description": "Primary color as a hex code like \"#4f46e5\", or empty string to clear it.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "primary_color"
    ]
  },
  "annotations": {
    "title": "Update brand branding",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Team del brand4mcp/brands

list-brand-membersSola letturaRipetibileElenca il team del brand con i ruoli, e i ruoli che puoi assegnare.
Prova a chiedere

“Chi fa parte del team, e chi è manager?”

Vista agente
{
  "name": "list-brand-members",
  "title": "List brand team",
  "description": "Lists the people on a brand team with their role and email, plus the roles the caller may assign. The other team tools take a returned email.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "List brand team",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
invite-brand-memberModifica datiInvita una persona nel team via email, con un ruolo sotto il tuo.
Prova a chiedere

“Invita [email protected] come receptionist.”

Vista agente
{
  "name": "invite-brand-member",
  "title": "Invite a team member",
  "description": "Invites someone to a brand team by email, in a role below the caller. The invitation is emailed and expires in three days. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "email": {
        "description": "The email address to invite.",
        "type": "string"
      },
      "role": {
        "description": "The role to grant. ListBrandMembers returns the roles the caller may assign.",
        "enum": [
          "admin",
          "manager",
          "receptionist",
          "pt"
        ],
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "email",
      "role"
    ]
  },
  "annotations": {
    "title": "Invite a team member",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  }
}
update-brand-member-roleModifica datiRipetibileCambia il ruolo di un membro del team. Riceve un'email.
Prova a chiedere

“Fai diventare Marco manager.”

Vista agente
{
  "name": "update-brand-member-role",
  "title": "Change a member role",
  "description": "Changes one team member role, to a role below the caller. The member is emailed. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "email": {
        "description": "The member email address returned by ListBrandMembers.",
        "type": "string"
      },
      "role": {
        "description": "The new role. ListBrandMembers returns the roles the caller may assign.",
        "enum": [
          "admin",
          "manager",
          "receptionist",
          "pt"
        ],
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "email",
      "role"
    ]
  },
  "annotations": {
    "title": "Change a member role",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": true
  }
}
remove-brand-memberChiede primaRimuove una persona dal team. L'agente deve prima chiederlo a te.
Prova a chiedere

“Togli Luca dal team.”

Vista agente
{
  "name": "remove-brand-member",
  "title": "Remove a team member",
  "description": "Removes one person from a brand team and emails them. Ask the person first, then pass confirm true. Owner only.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "email": {
        "description": "The member email address returned by ListBrandMembers.",
        "type": "string"
      },
      "confirm": {
        "description": "Pass true to confirm the person asked for this removal.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "email",
      "confirm"
    ]
  },
  "annotations": {
    "title": "Remove a team member",
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": true
  }
}

Sedi6mcp/brands

list-locationsSola letturaRipetibileElenca le sedi di un brand.
Prova a chiedere

“Elenca tutte le nostre sedi.”

Vista agente
{
  "name": "list-locations",
  "title": "List locations",
  "description": "Lists the locations of one brand. Other location tools take a returned location slug.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "List locations",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
get-locationSola letturaRipetibileLegge una sede: profilo, strutture, discipline, orari settimanali e date speciali.
Prova a chiedere

“A che ora apre Via Roma la domenica?”

Vista agente
{
  "name": "get-location",
  "title": "Read a location",
  "description": "Reads one location whole: profile, facilities, disciplines, opening hours and date overrides.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "Read a location",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
create-locationModifica datiAggiunge una sede da un indirizzo, entro il limite del tuo piano.
Prova a chiedere

“Aggiungi una sede in Corso Italia 12, Milano.”

Vista agente
{
  "name": "create-location",
  "title": "Create a location",
  "description": "Adds a location to a brand. The address is geocoded, so give a full street address. Owner or Admin, within the plan limit.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "name": {
        "description": "The location name.",
        "type": "string"
      },
      "address": {
        "description": "Full street address, geocoded on save.",
        "type": "string"
      },
      "email": {
        "description": "Public contact email for this location.",
        "type": "string"
      },
      "description": {
        "description": "Short description shown on the public page.",
        "type": "string"
      },
      "locale": {
        "description": "Language the description is written in. Defaults to the language of the address country when omitted.",
        "enum": [
          "en",
          "it",
          "es",
          "de",
          "fr",
          "nl"
        ],
        "type": "string"
      },
      "timezone": {
        "description": "IANA timezone, for example \"Europe/Rome\". Defaults to Europe/Rome.",
        "type": "string"
      },
      "opening": {
        "description": "Opening schedule type. Defaults to regular.",
        "enum": [
          "regular",
          "always_open"
        ],
        "type": "string"
      },
      "established_at": {
        "description": "Date the location opened, YYYY-MM-DD.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "name"
    ]
  },
  "annotations": {
    "title": "Create a location",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  }
}
update-location-profileModifica datiRipetibileCambia nome, indirizzo, email, descrizione, fuso orario o tipo di apertura di una sede.
Prova a chiedere

“Riscrivi la descrizione di Via Roma e cita la nuova sauna.”

Vista agente
{
  "name": "update-location-profile",
  "title": "Update location details",
  "description": "Updates a location name, address, email, description, description language, timezone, opening type or opening date. Send only the fields to change. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "name": {
        "description": "New location name.",
        "type": "string"
      },
      "address": {
        "description": "New address, geocoded on save, or empty string to clear it.",
        "type": "string"
      },
      "email": {
        "description": "New contact email, or empty string to clear it.",
        "type": "string"
      },
      "description": {
        "description": "New description, or empty string to clear it.",
        "type": "string"
      },
      "locale": {
        "description": "Language the description is written in, or empty string to take the language of the address country again.",
        "enum": [
          "en",
          "it",
          "es",
          "de",
          "fr",
          "nl"
        ],
        "type": "string"
      },
      "timezone": {
        "description": "IANA timezone, for example \"Europe/Rome\".",
        "type": "string"
      },
      "opening": {
        "description": "Opening schedule type.",
        "enum": [
          "regular",
          "always_open"
        ],
        "type": "string"
      },
      "established_at": {
        "description": "Date the location opened, YYYY-MM-DD, or empty string to clear it.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "Update location details",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
update-location-facilitiesModifica datiRipetibileAggiorna superficie, parcheggio, numero di attrezzi e servizi come piscina o sauna.
Prova a chiedere

“In Via Roma ora abbiamo 6 squat rack e una sauna.”

Vista agente
{
  "name": "update-location-facilities",
  "title": "Update location facilities",
  "description": "Updates what a location holds: floor area, floors, parking, equipment counts, lift, air conditioning, bar, swimming pool, sauna, posing room. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "square_meters": {
        "description": "Floor area in square meters.",
        "type": "integer"
      },
      "floors": {
        "description": "Number of floors.",
        "type": "integer"
      },
      "parking_spots": {
        "description": "Number of parking spots.",
        "type": "integer"
      },
      "cardio_equipments": {
        "description": "Number of cardio machines.",
        "type": "integer"
      },
      "squat_racks": {
        "description": "Number of squat racks.",
        "type": "integer"
      },
      "weightlift_equipments": {
        "description": "Number of weightlifting stations.",
        "type": "integer"
      },
      "lift": {
        "description": "Whether the location has a lift.",
        "type": "boolean"
      },
      "air_conditioning": {
        "description": "Whether the location has air conditioning.",
        "type": "boolean"
      },
      "bar": {
        "description": "Whether the location has a bar.",
        "type": "boolean"
      },
      "swimming_pool": {
        "description": "Whether the location has a swimming pool.",
        "type": "boolean"
      },
      "sauna": {
        "description": "Whether the location has a sauna.",
        "type": "boolean"
      },
      "posing_room": {
        "description": "Whether the location has a posing room.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "Update location facilities",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
delete-locationChiede primaElimina una sede e le sue foto per sempre. L'agente deve prima chiederlo a te.
Prova a chiedere

“Elimina la vecchia sede di Piazza Duomo.”

Vista agente
{
  "name": "delete-location",
  "title": "Delete a location",
  "description": "Deletes one location and its photos for good. Ask the person first, then pass confirm true. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "confirm": {
        "description": "Pass true to confirm the person asked for this deletion.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location",
      "confirm"
    ]
  },
  "annotations": {
    "title": "Delete a location",
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": false
  }
}

Discipline2mcp/brands

list-disciplinesSola letturaRipetibileElenca tutte le discipline che una sede può offrire.
Prova a chiedere

“Tra quali discipline posso scegliere?”

Vista agente
{
  "name": "list-disciplines",
  "title": "List disciplines",
  "description": "Lists the sports disciplines a location can offer, with the ids SetLocationDisciplines takes.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "annotations": {
    "title": "List disciplines",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
set-location-disciplinesModifica datiRipetibileImposta le discipline di una sede, come attrezzatura, corsi o entrambi.
Prova a chiedere

“Via Roma offre attrezzatura da powerlifting e corsi di yoga.”

Vista agente
{
  "name": "set-location-disciplines",
  "title": "Set location disciplines",
  "description": "Replaces the disciplines a location offers. Send the whole list, eight at most; an empty list clears them. Use ListDisciplines for the ids. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "disciplines": {
        "description": "The whole list of disciplines. An empty list clears them.",
        "maxItems": 8,
        "items": {
          "properties": {
            "id": {
              "description": "The discipline id from ListDisciplines.",
              "type": "string"
            },
            "offering": {
              "description": "How the location offers it.",
              "enum": [
                "equipment",
                "classes",
                "both"
              ],
              "type": "string"
            }
          },
          "type": "object",
          "required": [
            "id",
            "offering"
          ]
        },
        "type": "array"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location",
      "disciplines"
    ]
  },
  "annotations": {
    "title": "Set location disciplines",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Orari di apertura3mcp/brands

set-location-opening-hoursModifica datiRipetibileSostituisce gli orari settimanali di una sede.
Prova a chiedere

“Apri dalle 6:00 alle 23:00 nei giorni feriali e dalle 8:00 alle 20:00 nel weekend.”

Vista agente
{
  "name": "set-location-opening-hours",
  "title": "Set opening hours",
  "description": "Replaces the weekly opening grid of one location. Send every slot you want: a day left out is closed. Day 0 is Monday, 6 is Sunday. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "openings": {
        "description": "The whole weekly grid. A day may hold several slots. An empty list closes every day.",
        "maxItems": 49,
        "items": {
          "properties": {
            "day": {
              "description": "0 is Monday, 6 is Sunday.",
              "type": "integer"
            },
            "opens_at": {
              "description": "Opening time as HH:MM.",
              "type": "string"
            },
            "closes_at": {
              "description": "Closing time as HH:MM, after opens_at.",
              "type": "string"
            }
          },
          "type": "object",
          "required": [
            "day",
            "opens_at",
            "closes_at"
          ]
        },
        "type": "array"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location",
      "openings"
    ]
  },
  "annotations": {
    "title": "Set opening hours",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
set-location-opening-exceptionModifica datiRipetibileChiude una sede in una data, o imposta orari speciali per quel giorno.
Prova a chiedere

“Chiudi Via Roma il 25 dicembre.”

Vista agente
{
  "name": "set-location-opening-exception",
  "title": "Set an opening exception",
  "description": "Sets one date override on a location: closed for the day, or special times. One row per date, so a repeat replaces the old one. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "date": {
        "description": "The date to override, YYYY-MM-DD, today or later.",
        "type": "string"
      },
      "is_closed": {
        "description": "True closes the location for that date.",
        "type": "boolean"
      },
      "opens_at": {
        "description": "Opening time as HH:MM. Required unless is_closed is true.",
        "type": "string"
      },
      "closes_at": {
        "description": "Closing time as HH:MM, after opens_at. Required unless is_closed is true.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location",
      "date",
      "is_closed"
    ]
  },
  "annotations": {
    "title": "Set an opening exception",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
copy-location-opening-hoursModifica datiRipetibileCopia gli orari settimanali da un'altra sede dello stesso brand.
Prova a chiedere

“Dai a Corso Italia gli stessi orari di Via Roma.”

Vista agente
{
  "name": "copy-location-opening-hours",
  "title": "Copy opening hours",
  "description": "Copies the weekly grid from another location of the same brand. Date overrides stay untouched. Owner, Admin or Manager.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug to write.",
        "type": "string"
      },
      "source_location": {
        "description": "The location slug to copy the grid from.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location",
      "source_location"
    ]
  },
  "annotations": {
    "title": "Copy opening hours",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Membri8mcp/brands

search-membersSola letturaRipetibileTrova i membri per nome, email, stato, piano o sede.
Prova a chiedere

“Chi ha un'iscrizione in pausa a Via Roma?”

Vista agente
{
  "name": "search-members",
  "title": "Search members",
  "description": "Finds the members of a brand by name or email, status, plan or location, newest first. Location staff see the members of their own locations only. Returns membership ids for the other member tools.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "q": {
        "description": "Part of a name or an email address.",
        "type": "string"
      },
      "status": {
        "enum": [
          "active",
          "paused",
          "cancelled"
        ],
        "type": "string"
      },
      "plan": {
        "description": "A plan id from list-membership-plans.",
        "type": "string"
      },
      "location": {
        "description": "A location slug: members enabled at it or asking for it.",
        "type": "string"
      },
      "requested": {
        "description": "True for members with a location request to review.",
        "type": "boolean"
      },
      "cursor": {
        "description": "The next_cursor of the previous page. Leave it out for the first page.",
        "type": "string"
      },
      "limit": {
        "description": "Rows per page, 1 to 50. Default 25.",
        "type": "integer"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "Search members",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
get-memberSola letturaRipetibileLegge un membro: piano, stato, sedi e richieste. I documenti restano sul web.
Prova a chiedere

“Che piano ha Sara e in quali sedi può allenarsi?”

Vista agente
{
  "name": "get-member",
  "title": "Read a member",
  "description": "Reads one membership: plan, status, dates, locations and location requests. Member documents stay on the web: open them at urls.web.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "member": {
        "description": "The membership id returned by search-members.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "member"
    ]
  },
  "annotations": {
    "title": "Read a member",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
add-memberModifica datiAggiunge una persona a un piano. Chi è nuovo riceve un invito via email.
Prova a chiedere

“Aggiungi [email protected] al piano mensile a Via Roma.”

Vista agente
{
  "name": "add-member",
  "title": "Add a member",
  "description": "Adds a person to a membership plan by email. A person with no Jymbro account is invited: give their name too, and they get an email to set a password. Location staff must pick at least one location they staff.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "email": {
        "description": "The email address of the person.",
        "type": "string"
      },
      "name": {
        "description": "Their full name. Needed only when they have no Jymbro account yet.",
        "type": "string"
      },
      "plan": {
        "description": "A plan id from list-membership-plans.",
        "type": "string"
      },
      "locations": {
        "description": "Location slugs the member may enter.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "status": {
        "description": "Default active.",
        "enum": [
          "active",
          "paused",
          "cancelled"
        ],
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "email",
      "plan"
    ]
  },
  "annotations": {
    "title": "Add a member",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  }
}
update-membershipModifica datiRipetibileCambia piano, stato o sedi di un membro. Riceve un'email.
Prova a chiedere

“Metti in pausa l'iscrizione di Marco.”

Vista agente
{
  "name": "update-membership",
  "title": "Update a membership",
  "description": "Changes the plan, the status or the locations of one membership. Send only what changes. locations is the whole list of locations the member may enter; location staff change only the locations they staff, and the others stay. The member gets an email for each change.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "member": {
        "description": "The membership id returned by search-members.",
        "type": "string"
      },
      "plan": {
        "description": "A plan id from list-membership-plans.",
        "type": "string"
      },
      "status": {
        "enum": [
          "active",
          "paused",
          "cancelled"
        ],
        "type": "string"
      },
      "locations": {
        "description": "The whole list of location slugs the member may enter.",
        "items": {
          "type": "string"
        },
        "type": "array"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "member"
    ]
  },
  "annotations": {
    "title": "Update a membership",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": true
  }
}
cancel-membershipChiede primaRipetibileAnnulla subito un'iscrizione. L'agente deve prima chiedertelo.
Prova a chiedere

“Annulla l'iscrizione di Luca.”

Vista agente
{
  "name": "cancel-membership",
  "title": "Cancel a membership",
  "description": "Cancels one membership now: the member can no longer enter and gets an email. Ask the person first, then pass confirm true.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "member": {
        "description": "The membership id returned by search-members.",
        "type": "string"
      },
      "confirm": {
        "description": "Pass true to confirm the person asked for this cancellation.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "member",
      "confirm"
    ]
  },
  "annotations": {
    "title": "Cancel a membership",
    "destructiveHint": true,
    "idempotentHint": true,
    "openWorldHint": true
  }
}
list-location-requestsSola letturaRipetibileElenca i membri che hanno chiesto di allenarsi in un'altra sede.
Prova a chiedere

“Chi ha chiesto di allenarsi nella nuova palestra?”

Vista agente
{
  "name": "list-location-requests",
  "title": "List location requests",
  "description": "Lists the members who asked to train at another location of the brand, oldest first. Location staff see the requests for their own locations only.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "A location slug, to see the requests for it only.",
        "type": "string"
      },
      "cursor": {
        "description": "The next_cursor of the previous page. Leave it out for the first page.",
        "type": "string"
      },
      "limit": {
        "description": "Rows per page, 1 to 50. Default 25.",
        "type": "integer"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "List location requests",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
approve-location-requestModifica datiRipetibilePermette a un membro di allenarsi nella sede che ha chiesto.
Prova a chiedere

“Approva la richiesta di Sara per Via Roma.”

Vista agente
{
  "name": "approve-location-request",
  "title": "Approve a location request",
  "description": "Lets the member train at the location they asked for. Staff of that location decide. The member gets an email.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "request": {
        "description": "The request id returned by list-location-requests or get-member.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "request"
    ]
  },
  "annotations": {
    "title": "Approve a location request",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": true
  }
}
reject-location-requestModifica datiRipetibileRifiuta una richiesta di sede, con un motivo che il membro legge.
Prova a chiedere

“Rifiuta la richiesta: la piscina è per i piani premium.”

Vista agente
{
  "name": "reject-location-request",
  "title": "Reject a location request",
  "description": "Refuses a location a member asked for. Staff of that location decide. The member gets an email with the reason, so write it for them.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "request": {
        "description": "The request id returned by list-location-requests or get-member.",
        "type": "string"
      },
      "reason": {
        "description": "Why, in a sentence the member reads. 500 characters at most.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "request"
    ]
  },
  "annotations": {
    "title": "Reject a location request",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": true
  }
}

Iscrizioni online4mcp/brands

list-membership-applicationsSola letturaRipetibileElenca chi si è iscritto online e attende un pagamento o una revisione.
Prova a chiedere

“Chi aspetta l'approvazione a Via Roma?”

Vista agente
{
  "name": "list-membership-applications",
  "title": "List membership applications",
  "description": "Lists the people who joined online, by default those who wait for the desk: a payment to record or an application to review, oldest first. Location staff see the applications for their own locations only.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "status": {
        "description": "\"waiting\" (default) is awaiting_payment and awaiting_review together.",
        "enum": [
          "waiting",
          "awaiting_payment",
          "awaiting_review",
          "activated",
          "rejected"
        ],
        "type": "string"
      },
      "location": {
        "description": "A location slug, to see the applications for it only.",
        "type": "string"
      },
      "q": {
        "description": "Part of the applicant name or email address.",
        "type": "string"
      },
      "cursor": {
        "description": "The next_cursor of the previous page. Leave it out for the first page.",
        "type": "string"
      },
      "limit": {
        "description": "Rows per page, 1 to 50. Default 25.",
        "type": "integer"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "List membership applications",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
record-application-paymentModifica datiRegistra un pagamento ricevuto in reception. Jymbro non muove denaro.
Prova a chiedere

“Giulia ha pagato in contanti il piano mensile.”

Vista agente
{
  "name": "record-application-payment",
  "title": "Record an application payment",
  "description": "Records that the applicant paid at the desk. Jymbro moves no money. When the application was already approved, or needs no review, the membership starts and the member gets an email.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "application": {
        "description": "The application id returned by list-membership-applications.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "application"
    ]
  },
  "annotations": {
    "title": "Record an application payment",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  }
}
approve-membership-applicationModifica datiApprova un'iscrizione online. Se è pagata, l'iscrizione parte.
Prova a chiedere

“Approva la domanda di Marco.”

Vista agente
{
  "name": "approve-membership-application",
  "title": "Approve a membership application",
  "description": "Approves an application after the review of the applicant on the web. When it is paid, or free, the membership starts and the member gets an email. Otherwise it still waits for payment.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "application": {
        "description": "The application id returned by list-membership-applications.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "application"
    ]
  },
  "annotations": {
    "title": "Approve a membership application",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  }
}
reject-membership-applicationChiede primaRifiuta un'iscrizione online, con un motivo che il richiedente legge. L'agente deve chiedertelo prima.
Prova a chiedere

“Rifiuta quella domanda: questo mese siamo pieni.”

Vista agente
{
  "name": "reject-membership-application",
  "title": "Reject a membership application",
  "description": "Rejects an application for good. The applicant gets an email with the reason. Ask the person first, then pass confirm true.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "application": {
        "description": "The application id returned by list-membership-applications.",
        "type": "string"
      },
      "reason": {
        "description": "Why, in words the applicant reads in their email. 255 characters at most.",
        "type": "string"
      },
      "confirm": {
        "description": "Pass true to confirm the person asked for this rejection.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "application",
      "confirm"
    ]
  },
  "annotations": {
    "title": "Reject a membership application",
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": true
  }
}

Piani di iscrizione5mcp/brands

list-membership-plansSola letturaRipetibileElenca i piani di iscrizione che vendi, con prezzo e limite di sedi.
Prova a chiedere

“Quali piani vendiamo?”

Vista agente
{
  "name": "list-membership-plans",
  "title": "List membership plans",
  "description": "Lists the membership plans a brand sells, with price, location cap and active members. add-member and update-membership take a returned plan id. Pass archived true to see the archived plans instead.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "archived": {
        "description": "Pass true to list the archived plans. Default false.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand"
    ]
  },
  "annotations": {
    "title": "List membership plans",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
create-membership-planModifica datiAggiunge un piano di iscrizione con prezzo e rinnovo.
Prova a chiedere

“Crea un piano annuale a 450 euro per due sedi.”

Vista agente
{
  "name": "create-membership-plan",
  "title": "Create a membership plan",
  "description": "Adds a membership plan the brand sells. The price is in cents. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "name": {
        "description": "The plan name.",
        "type": "string"
      },
      "price": {
        "description": "The price in cents, for example 4500 for 45.00.",
        "type": "integer"
      },
      "renewal_cycle": {
        "enum": [
          "yearly",
          "monthly"
        ],
        "type": "string"
      },
      "max_active_locations": {
        "description": "How many locations one member may enter. Leave it out for no limit.",
        "type": "integer"
      },
      "joinable": {
        "description": "Whether people can join the plan online. Default true.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "name",
      "price",
      "renewal_cycle"
    ]
  },
  "annotations": {
    "title": "Create a membership plan",
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  }
}
update-membership-planModifica datiRipetibileCambia nome, prezzo, limite di sedi o iscrizione online di un piano.
Prova a chiedere

“Porta il piano mensile a 49 euro.”

Vista agente
{
  "name": "update-membership-plan",
  "title": "Update a membership plan",
  "description": "Changes the name, price, renewal cycle, location cap or online joining of a plan. Send only the fields to change. Open applications keep the price they applied at. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "plan": {
        "description": "The plan id returned by list-membership-plans.",
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "price": {
        "description": "The price in cents, for example 4500 for 45.00.",
        "type": "integer"
      },
      "renewal_cycle": {
        "enum": [
          "yearly",
          "monthly"
        ],
        "type": "string"
      },
      "max_active_locations": {
        "description": "How many locations one member may enter. Pass null for no limit.",
        "type": [
          "integer",
          "null"
        ]
      },
      "joinable": {
        "description": "Whether people can join the plan online.",
        "type": "boolean"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "plan"
    ]
  },
  "annotations": {
    "title": "Update a membership plan",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
archive-membership-planModifica datiRipetibileSmette di vendere un piano. I suoi membri tengono l'iscrizione.
Prova a chiedere

“Non vendere più il piano estivo.”

Vista agente
{
  "name": "archive-membership-plan",
  "title": "Archive a membership plan",
  "description": "Stops selling a plan: nobody new can join it. Its members keep their memberships. restore-membership-plan sells it again. To delete a plan, the person uses the plan page in Jymbro (urls.web). Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "plan": {
        "description": "The plan id returned by list-membership-plans.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "plan"
    ]
  },
  "annotations": {
    "title": "Archive a membership plan",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
restore-membership-planModifica datiRipetibileRimette in vendita un piano archiviato.
Prova a chiedere

“Riattiva il piano estivo.”

Vista agente
{
  "name": "restore-membership-plan",
  "title": "Restore a membership plan",
  "description": "Sells an archived plan again. Owner or Admin.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "plan": {
        "description": "The plan id returned by list-membership-plans with archived true.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "plan"
    ]
  },
  "annotations": {
    "title": "Restore a membership plan",
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Reception3mcp/brands

get-location-todaySola letturaRipetibileLegge la giornata di una sede: ingressi, persone dentro e scansioni che ti aspettano.
Prova a chiedere

“Quanta gente c'è oggi a Via Roma?”

Vista agente
{
  "name": "get-location-today",
  "title": "Read today at a location",
  "description": "Reads today at one location, in its own timezone: check-ins, people inside, members, scans that need staff, check-ins per hour and the latest scans.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "Read today at a location",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
list-present-membersSola letturaRipetibileElenca chi è dentro una sede adesso.
Prova a chiedere

“Chi è in palestra adesso?”

Vista agente
{
  "name": "list-present-members",
  "title": "List members inside now",
  "description": "Lists the people inside one location now, newest entrance first, with minutes inside. q filters by name or email.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "q": {
        "description": "Part of a name or an email address.",
        "type": "string"
      },
      "cursor": {
        "description": "The next_cursor of the previous page. Leave it out for the first page.",
        "type": "string"
      },
      "limit": {
        "description": "Rows per page, 1 to 50. Default 25.",
        "type": "integer"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "List members inside now",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
list-access-eventsSola letturaRipetibileElenca le scansioni alla porta di una sede, con il motivo di ogni rifiuto.
Prova a chiedere

“Perché stamattina la porta non si è aperta per Marco?”

Vista agente
{
  "name": "list-access-events",
  "title": "List door scans",
  "description": "Lists the scans at the door of one location, newest first, accepted or not, with the reason for a refusal. since keeps the scans from that time on.",
  "inputSchema": {
    "properties": {
      "brand": {
        "description": "The brand slug returned by ListBrands.",
        "type": "string"
      },
      "location": {
        "description": "The location slug returned by ListLocations.",
        "type": "string"
      },
      "since": {
        "description": "ISO 8601 date and time. Only the scans from then on.",
        "type": "string"
      },
      "cursor": {
        "description": "The next_cursor of the previous page. Leave it out for the first page.",
        "type": "string"
      },
      "limit": {
        "description": "Rows per page, 1 to 50. Default 25.",
        "type": "integer"
      }
    },
    "type": "object",
    "required": [
      "brand",
      "location"
    ]
  },
  "annotations": {
    "title": "List door scans",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Directory pubblica3mcp/directory

search-facilitiesSola letturaRipetibileCerca centri sportivi pubblici per luogo, disciplina, servizio o nome.
Prova a chiedere

“Trova una palestra aperta 24/7 con powerlifting a Parma.”

Vista agente
{
  "name": "search-facilities",
  "title": "Search sports facilities",
  "description": "Finds public sports facilities (gyms, pools, studios, courts) in the Jymbro directory. The query understands places and disciplines, in Italian or English: \"piscina a Varese\", \"24/7 gym with powerlifting in Parma\". Each result has the URL of its page: cite it.",
  "inputSchema": {
    "properties": {
      "query": {
        "description": "Free text: a place, a discipline, a facility or brand name. Up to 60 characters.",
        "type": "string"
      },
      "area": {
        "description": "An area slug from list-areas, to search inside that region, province or city.",
        "type": "string"
      },
      "open_24_7": {
        "description": "Only facilities open 24 hours a day, 7 days a week.",
        "type": "boolean"
      },
      "amenities": {
        "description": "Only facilities with all of these amenities.",
        "items": {
          "enum": [
            "swimming_pool",
            "sauna",
            "bar",
            "lift",
            "air_conditioning",
            "posing_room"
          ],
          "type": "string"
        },
        "type": "array"
      },
      "disciplines": {
        "description": "Discipline slugs, for example \"powerlifting\" or \"swimming\". Only facilities that offer all of them.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "limit": {
        "description": "How many facilities to return, 1 to 20. Default 10.",
        "type": "integer"
      }
    },
    "type": "object"
  },
  "annotations": {
    "title": "Search sports facilities",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
get-facilitySola letturaRipetibileLegge un centro pubblico: indirizzo, orari, servizi, discipline e prossimi eventi.
Prova a chiedere

“Quella palestra è aperta la domenica mattina?”

Vista agente
{
  "name": "get-facility",
  "title": "Read a sports facility",
  "description": "Reads one facility of the Jymbro directory: address, weekly opening hours, date overrides, amenities, disciplines and upcoming public events. The description is written by the facility, often in Italian. Cite the url in the answer.",
  "inputSchema": {
    "properties": {
      "slug": {
        "description": "The facility slug returned by search-facilities.",
        "type": "string"
      }
    },
    "type": "object",
    "required": [
      "slug"
    ]
  },
  "annotations": {
    "title": "Read a sports facility",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}
list-areasSola letturaRipetibileElenca regioni, province e città con una pagina nella directory, dalle più grandi.
Prova a chiedere

“Quali città della Lombardia hanno palestre in elenco?”

Vista agente
{
  "name": "list-areas",
  "title": "List directory areas",
  "description": "Lists the regions, provinces and cities that have a page in the Jymbro directory, with their facility counts, largest first. Pass a slug to search-facilities as area, or cite the url.",
  "inputSchema": {
    "properties": {
      "type": {
        "description": "Only areas of this type.",
        "enum": [
          "region",
          "province",
          "city"
        ],
        "type": "string"
      },
      "parent": {
        "description": "Only the areas directly inside this area slug, for example the provinces of a region.",
        "type": "string"
      },
      "limit": {
        "description": "How many areas to return, 1 to 200. Default 50.",
        "type": "integer"
      }
    },
    "type": "object"
  },
  "annotations": {
    "title": "List directory areas",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
  }
}

Quello che uno strumento può cambiare segue il tuo ruolo nel brand. Un agente approvato da un receptionist non può eliminare una sede.

Il tuo agente lavora dentro i tuoi permessi.

Un agente non riceve un passe-partout. Può fare quello che puoi fare tu, e deve fermarsi prima di tutto ciò che non si può annullare.

  • Il tuo ruolo a ogni chiamata

    Ogni strumento controlla, in quel brand, il ruolo della persona che ha approvato l'agente. Un manager può impostare gli orari ma non invitare un admin.

  • Le modifiche distruttive chiedono prima

    Rimuovere un membro del team, eliminare una sede, annullare un'iscrizione o rifiutare una richiesta di iscrizione richiede un sì esplicito. L'agente deve chiedertelo prima di inviarlo.

  • Un accesso dedicato

    I token degli agenti raggiungono solo il server MCP. Non valgono per l'API dell'app, la reception o gli scanner.

  • Token di breve durata

    Un token dell'agente dura un'ora. L'agente lo rinnova in background finché non lo scolleghi.

  • Scollega con un clic

    Scollega l'agente nelle impostazioni del tuo account. La sua chiamata successiva fallisce.

  • Pubblico vuol dire pubblico

    Il server Directory vede solo quello che mostrano le pagine pubbliche dei centri. Niente email, niente membri, niente staff.

Per gli sviluppatori e le altre app.

Jymbro ha un server MCP ospitato via Streamable HTTP. Funziona con ogni app che supporta i connettori MCP: indica l'indirizzo e accedi. Da parte nostra non c'è niente da configurare.

Esegui questo comando nel terminale.
claude mcp add --transport http jymbro-brands https://jymbro.app/mcp/brands
Alla prima chiamata, il tuo client apre Jymbro nel browser. Accedi e approva l'agente.Agenti collegati

Due server, due lavori.

Il server Brands lavora sul tuo centro. Il server Directory legge la directory pubblica, per qualsiasi agente.

Per i team dei brand

Jymbro Brands

39 strumenti

Leggi e modifica brand, sedi, orari, discipline, team, membri, iscrizioni online e piani, e segui la reception. Ogni chiamata usa il ruolo della persona che ha approvato l'agente.

Indirizzo
https://jymbro.app/mcp/brands
Accesso
Accesso OAuth con il tuo account Jymbro
Limite di richieste
120 richieste al minuto
Scheda server →
Per ogni agente

Jymbro Directory

3 strumenti

Cerca nella directory pubblica di palestre e centri sportivi. Orari, servizi, discipline, eventi e l'URL della pagina da citare.

Indirizzo
https://jymbro.app/mcp/directory
Accesso
Nessuno: pubblico e in sola lettura
Limite di richieste
30 richieste al minuto, 1.000 al giorno
Scheda server →

Chiedi una palestra. Ricevi una pagina da citare.

Un atleta chiede a un assistente dove allenarsi. L'assistente cerca nella directory di Jymbro e risponde con centri reali, i loro orari e il link a ogni pagina.

Un atleta cerca una palestra aperta 24/7 con powerlifting a Parma. L'assistente chiama search-facilities e risponde con due centri e i link alle loro pagine.

Prova la directory. Proprio qui.

Questo box invia la stessa richiesta che il tuo agente invia al server Directory pubblico. Dati reali, nessun token, niente da installare.

Esempi
RichiestaPOST /mcp/directory
Content-Type: application/json
Mcp-Method: tools/call
Mcp-Name: search-facilities

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search-facilities",
    "arguments": {
      "query": "piscina a Varese",
      "limit": 4
    }
  }
}
Risposta

Scegli un esempio o scrivi una ricerca, poi inviala.

Domande sul server MCP

Cosa fa il server MCP di Jymbro?

Collega il tuo assistente AI a Jymbro tramite il Model Context Protocol (MCP), lo standard aperto che permette a un assistente di usare strumenti esterni. Il server Brands permette al team di un brand di gestire orari, sedi, team, membri, iscrizioni online, piani di iscrizione e reception. Il server Directory permette a qualsiasi agente di cercare nella directory pubblica di palestre e centri sportivi.

Con quali assistenti AI funziona?

ChatGPT, Claude, Cursor, Claude Code, VS Code e ogni altro client MCP che supporta server remoti via Streamable HTTP con accesso OAuth. Il server Directory non richiede l'accesso.

Devo installare qualcosa?

No. Aggiungi l'indirizzo al tuo assistente, accedi con il tuo account Jymbro e approva l'accesso. Non c'è nessun plugin da installare e nessun token da copiare.

Cosa vede il mio assistente?

Solo quello che vedi tu in Jymbro, niente di più. Ogni chiamata segue il tuo ruolo nel brand, e lo staff di sede raggiunge solo i membri delle sedi in cui lavora. Documenti dei membri, pagamenti e fatturazione restano nell'app web di Jymbro.

L'agente può eliminare qualcosa da solo?

No. Gli strumenti che cancellano dati o chiudono un'iscrizione (rimuovere un membro del team, eliminare una sede, annullare un'iscrizione, rifiutare una richiesta di iscrizione online) funzionano solo con una conferma esplicita, e l'agente deve chiederla a te. Anche ogni altra modifica segue il tuo ruolo nel brand, e lo staff di sede vede solo le proprie sedi.

Come fermo un agente?

Apri Agenti collegati nelle impostazioni del tuo account e scollegalo. La chiamata successiva di quell'agente fallisce.

Cosa vede il server Directory?

Solo quello che mostrano le pagine pubbliche dei centri: nome, indirizzo, orari, servizi, discipline, eventi pubblici e l'URL della pagina. Non vede niente di quello che il team di un brand tiene privato.

Dai al tuo assistente le chiavi della reception.

Aggiungi un indirizzo, accedi e chiedi la tua prima modifica. Hai il controllo di ogni passaggio.