Skip to main content
Glama

Set my event goal

event_set_intent
DestructiveIdempotent

Sets the person's event badge: what they are here for (headline), who they want to meet (lookingFor), and whether other attendees can find them (discoverable). Needs a personal connector token. Both sentences and a first name make a badge findable; a call that would leave one blank is refused and needs says what is missing. The event is the one given, or the person's one current event. Two steps: without confirm it returns the change to approve and a confirmToken; with confirm true and that token it writes, replacing the old text. It changes only that person's badge.

Input Schema

NameRequiredDescriptionDefault
labelNoOptional own word for the category ("Investor").
facetsNoOptional read-back answer ({confirm}, {add} or {remove}).
intentNoOptional: Buyer, Vendor, Networker or Social.
confirmNoAbsent first: nothing changes. true with confirmToken makes the change.
eventIdNoOptional event id.
headlineNoWhat they are here for, own words, up to 280 characters.
firstNameNoOptional first name for the badge.
requestIdNoOptional caller id; a repeat returns the first result.
intentTextNoOlder name for `lookingFor`.
lookingForNoWho they want to meet, own words, up to 280 characters.
confirmTokenNoThe token the first call returned.
discoverableYestrue makes the person findable by other attendees; false does not.
eventIdOrSlugNoOptional event id, slug or name.

Output Schema

NameRequiredDescriptionDefault
okNo
badgeNo
errorNo
needsNo
changedNo
messageNo
previewNo
readBackNo
replayedNo
servedByNo
confirmTokenNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Absent on the first call, which changes nothing. true, together with confirmToken, makes the change."New value: +"Absent first: nothing changes. true with confirmToken makes the change."
    • changedInput schema / properties / confirmToken / description
      Previous value: -"The token the first call returned. Needed when confirm is true."New value: +"The token the first call returned."
    • changedInput schema / properties / discoverable / description
      Previous value: -"true lists the person where other attendees at that event can find them; false keeps them off that list. It is a separate answer from the intent and is not inferred from it; a missing or non-boolean value is refused rather than defaulted."New value: +"true makes the person findable by other attendees; false does not."
    • changedInput schema / properties / eventId / description
      Previous value: -"Optional. An event id the person has joined. When this and eventIdOrSlug are both absent, the event is the one current event the person has joined."New value: +"Optional event id."
    • changedInput schema / properties / eventIdOrSlug / description
      Previous value: -"OPTIONAL. Event id (tie_la_demo), public slug, or the event name, as the events tools accept it. When this and eventId are both absent, the event is the one current event the person has joined."New value: +"Optional event id, slug or name."
    • changedInput schema / properties / facets / description
      Previous value: -"Optional. The person's answer to the read-back: {confirm: true}, {add: [their words]} or {remove: [their words]}. The server maps the words onto the read-back's own list."New value: +"Optional read-back answer ({confirm}, {add} or {remove})."
    • changedInput schema / properties / firstName / description
      Previous value: -"Optional. The first name the badge shows, 2 to 40 characters of letters, spaces, hyphens and apostrophes. A badge without a name is not findable. When absent, the stored name is kept; a name the badge cannot take refuses the whole call and the reply says why."New value: +"Optional first name for the badge."
    • changedInput schema / properties / headline / description
      Previous value: -"What the person is here for, in their own words, up to 280 characters. The first of the two badge sentences: the matcher reads it and other attendees see it, so a full sentence (\"raising a seed round for a logistics startup\") matches better than a word. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."New value: +"What they are here for, own words, up to 280 characters."
    • changedInput schema / properties / intent / description
      Previous value: -"Optional. One of Buyer, Vendor, Networker or Social, as the person said it; case and surrounding spaces are ignored. When absent, the server derives the category from the two sentences and falls back to Networker. A word outside the four belongs in `label`."New value: +"Optional: Buyer, Vendor, Networker or Social."
    • changedInput schema / properties / intentText / description
      Previous value: -"Optional. The older name for `lookingFor`; it writes the same badge sentence, up to 280 characters. When both are sent, `lookingFor` is used. Phone numbers, email addresses and links are removed on the server. An absent or empty value leaves the stored sentence as it is."New value: +"Older name for `lookingFor`."
    • changedInput schema / properties / label / description
      Previous value: -"Optional. The person's own word for their category when none of the four fits (\"Investor\", \"Director\", \"Press\"). Up to 24 characters of letters, spaces and hyphens. It is kept and shown as written; the server still files one of the four behind it."New value: +"Optional own word for the category (\"Investor\")."
    • changedInput schema / properties / lookingFor / description
      Previous value: -"Who the person wants to meet, in their own words, up to 280 characters. The second badge sentence, the same field the older `intentText` writes. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."New value: +"Who they want to meet, own words, up to 280 characters."
    • changedInput schema / properties / requestId / description
      Previous value: -"An id for this change chosen by the caller, at least 8 characters. A repeat with the same id and the same arguments returns the first result without changing anything a second time."New value: +"Optional caller id; a repeat returns the first result."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "anyOf": [
      +    {
      +      "required": [
      +        "ok",
      +        "changed"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "ok": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "ok"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "found": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "found"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "replayed"
      +      ]
      +    }
      +  ],
      +  "properties": {
      +    "badge": {
      +      "type": "object"
      +    },
      +    "changed": {
      +      "type": "boolean"
      +    },
      +    "confirmToken": {
      +      "type": "string"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "needs": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "preview": {
      +      "type": "object"
      +    },
      +    "readBack": {
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "replayed": {
      +      "type": "boolean"
      +    },
      +    "servedBy": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed13 schema fields changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Leave this out on the first call. Pass true with confirmToken to commit."New value: +"Absent on the first call, which changes nothing. true, together with confirmToken, makes the change."
    • changedInput schema / properties / confirmToken / description
      Previous value: -"The token the preview returned. Required when confirm is true."New value: +"The token the first call returned. Needed when confirm is true."
    • changedInput schema / properties / discoverable / description
      Previous value: -"REQUIRED, and never inferred from the intent: true puts them in the list other attendees at that event can see, false keeps them out of it. Ask the person which they want; a missing or non-boolean answer is refused rather than defaulted."New value: +"true lists the person where other attendees at that event can find them; false keeps them off that list. It is a separate answer from the intent and is not inferred from it; a missing or non-boolean value is refused rather than defaulted."
    • changedInput schema / properties / eventId / description
      Previous value: -"OPTIONAL. Omit for the event the person is currently in, which is the usual case. Only pass one if they named a different show, and it must be one they have already joined."New value: +"Optional. An event id the person has joined. When this and eventIdOrSlug are both absent, the event is the one current event the person has joined."
    • addedInput schema / properties / eventIdOrSlug
      Added value: +{
      +  "description": "OPTIONAL. Event id (tie_la_demo), public slug, or the event name, as the events tools accept it. When this and eventId are both absent, the event is the one current event the person has joined.",
      +  "type": "string"
      +}
    • changedInput schema / properties / facets / description
      Previous value: -"OPTIONAL. Their answer to the read-back: {confirm: true} when they say it is right, {add: [their words]} or {remove: [their words]} when they change it. Words are mapped onto the read-back's own list on the server, so pass what they said and never invent a facet."New value: +"Optional. The person's answer to the read-back: {confirm: true}, {add: [their words]} or {remove: [their words]}. The server maps the words onto the read-back's own list."
    • changedInput schema / properties / firstName / description
      Previous value: -"OPTIONAL. The person's FIRST NAME, 2 to 40 characters of letters, spaces, hyphens and apostrophes. It is the THIRD thing a badge is made of, beside the two sentences: a badge with no name cannot be found by other attendees either. Pass it only when they have just told you their name or asked to change it; leaving it out keeps whatever their badge already says and never clears it. Never invent a name, never shorten one they gave you, and never pass a surname."New value: +"Optional. The first name the badge shows, 2 to 40 characters of letters, spaces, hyphens and apostrophes. A badge without a name is not findable. When absent, the stored name is kept; a name the badge cannot take refuses the whole call and the reply says why."
    • changedInput schema / properties / headline / description
      Previous value: -"What they are here for, in their OWN words, up to 280 characters. This is the first of the two sentences the badge is made of, so ask \"What are you here for?\" and pass what they say. FULL SENTENCES ARE THE POINT: it is read by the matcher that decides who they are shown to and it is what strangers read about them, so \"raising a seed round for a logistics startup\" beats \"raising money\". Phone numbers, email addresses and links are removed on the server, because other attendees read it. Leaving it out keeps whatever their badge already says and never clears it."New value: +"What the person is here for, in their own words, up to 280 characters. The first of the two badge sentences: the matcher reads it and other attendees see it, so a full sentence (\"raising a seed round for a logistics startup\") matches better than a word. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."
    • changedInput schema / properties / intent / description
      Previous value: -"OPTIONAL quick pick, not a question you have to ask. One of Buyer, Vendor, Networker or Social, as the person said it; case and surrounding spaces do not matter. Leave it out when they did not name one of those four words: the server derives the category from the two sentences and falls back to Networker, which is what their badge in the app does. A word outside the four does NOT go here - it goes in `label`, where it is kept rather than refused."New value: +"Optional. One of Buyer, Vendor, Networker or Social, as the person said it; case and surrounding spaces are ignored. When absent, the server derives the category from the two sentences and falls back to Networker. A word outside the four belongs in `label`."
    • changedInput schema / properties / intentText / description
      Previous value: -"OPTIONAL, and the OLDER NAME for `lookingFor`: it writes the same badge line. Prefer `lookingFor`, which is the badge's own word for it, and pass only one of the two. What they are looking for, in their OWN words, up to 280 characters. FULL SENTENCES ARE WELCOME and are what this field is for: it is read by the matcher that decides who they are shown, so \"raising a seed round for a logistics startup, and looking for operators who have scaled a warehouse\" matches better than \"raising money\". Do not compress what they said to save room. Phone numbers, email addresses and links are removed from it on the server, because other attendees read it. Leave it out to keep whatever their badge already says; sending an empty string also leaves it alone."New value: +"Optional. The older name for `lookingFor`; it writes the same badge sentence, up to 280 characters. When both are sent, `lookingFor` is used. Phone numbers, email addresses and links are removed on the server. An absent or empty value leaves the stored sentence as it is."
    • changedInput schema / properties / label / description
      Previous value: -"OPTIONAL. Their own word for what they are, when none of the four fits: \"Investor\", \"Director\", \"Press\". Up to 24 characters, letters, spaces and hyphens only. It is KEPT AND SHOWN as their word and is never refused for being outside the four; the server still files one of the four behind it so the match list can say why two people fit. Pass it only when the person named it themselves - it is a fact about them, so never invent one and never tidy theirs."New value: +"Optional. The person's own word for their category when none of the four fits (\"Investor\", \"Director\", \"Press\"). Up to 24 characters of letters, spaces and hyphens. It is kept and shown as written; the server still files one of the four behind it."
    • changedInput schema / properties / lookingFor / description
      Previous value: -"Who they want to meet, in their OWN words, up to 280 characters. This is the second of the two sentences the badge is made of, so ask \"Who do you want to meet?\" and pass what they say. It is the SAME badge line the older `intentText` argument writes, under the badge's own name for it; pass one or the other, not both. Phone numbers, email addresses and links are removed on the server. Leaving it out keeps whatever their badge already says and never clears it."New value: +"Who the person wants to meet, in their own words, up to 280 characters. The second badge sentence, the same field the older `intentText` writes. Phone numbers, email addresses and links are removed on the server. When absent, the stored sentence is kept."
    • changedInput schema / properties / requestId / description
      Previous value: -"Your own id for this change, at least 8 characters. Sending the same one twice with the same arguments returns the first result instead of writing again."New value: +"An id for this change chosen by the caller, at least 8 characters. A repeat with the same id and the same arguments returns the first result without changing anything a second time."
  4. Changed1 schema field changed
    • addedInput schema / properties / facets
      Added value: +{
      +  "description": "OPTIONAL. Their answer to the read-back: {confirm: true} when they say it is right, {add: [their words]} or {remove: [their words]} when they change it. Words are mapped onto the read-back's own list on the server, so pass what they said and never invent a facet.",
      +  "properties": {
      +    "add": {
      +      "items": {
      +        "maxLength": 60,
      +        "type": "string"
      +      },
      +      "maxItems": 6,
      +      "type": "array"
      +    },
      +    "confirm": {
      +      "type": "boolean"
      +    },
      +    "remove": {
      +      "items": {
      +        "maxLength": 60,
      +        "type": "string"
      +      },
      +      "maxItems": 6,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / firstName
      Added value: +{
      +  "description": "OPTIONAL. The person's FIRST NAME, 2 to 40 characters of letters, spaces, hyphens and apostrophes. It is the THIRD thing a badge is made of, beside the two sentences: a badge with no name cannot be found by other attendees either. Pass it only when they have just told you their name or asked to change it; leaving it out keeps whatever their badge already says and never clears it. Never invent a name, never shorten one they gave you, and never pass a surname.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
  6. Changed6 schema fields changed
    • addedInput schema / properties / headline
      Added value: +{
      +  "description": "What they are here for, in their OWN words, up to 280 characters. This is the first of the two sentences the badge is made of, so ask \"What are you here for?\" and pass what they say. FULL SENTENCES ARE THE POINT: it is read by the matcher that decides who they are shown to and it is what strangers read about them, so \"raising a seed round for a logistics startup\" beats \"raising money\". Phone numbers, email addresses and links are removed on the server, because other attendees read it. Leaving it out keeps whatever their badge already says and never clears it.",
      +  "maxLength": 280,
      +  "type": "string"
      +}
    • changedInput schema / properties / intent / description
      Previous value: -"One of Buyer, Vendor, Networker or Social, as the person said it. Case and surrounding spaces do not matter. Anything outside those four is refused, never mapped onto the closest one."New value: +"OPTIONAL quick pick, not a question you have to ask. One of Buyer, Vendor, Networker or Social, as the person said it; case and surrounding spaces do not matter. Leave it out when they did not name one of those four words: the server derives the category from the two sentences and falls back to Networker, which is what their badge in the app does. A word outside the four does NOT go here - it goes in `label`, where it is kept rather than refused."
    • changedInput schema / properties / intentText / description
      Previous value: -"OPTIONAL. What they are looking for, in their OWN words, up to 280 characters. FULL SENTENCES ARE WELCOME and are what this field is for: it is read by the matcher that decides who they are shown, so \"raising a seed round for a logistics startup, and looking for operators who have scaled a warehouse\" matches better than \"raising money\". Do not compress what they said to save room. Phone numbers, email addresses and links are removed from it on the server, because other attendees read it. Leave it out to keep whatever their badge already says; sending an empty string also leaves it alone."New value: +"OPTIONAL, and the OLDER NAME for `lookingFor`: it writes the same badge line. Prefer `lookingFor`, which is the badge's own word for it, and pass only one of the two. What they are looking for, in their OWN words, up to 280 characters. FULL SENTENCES ARE WELCOME and are what this field is for: it is read by the matcher that decides who they are shown, so \"raising a seed round for a logistics startup, and looking for operators who have scaled a warehouse\" matches better than \"raising money\". Do not compress what they said to save room. Phone numbers, email addresses and links are removed from it on the server, because other attendees read it. Leave it out to keep whatever their badge already says; sending an empty string also leaves it alone."
    • addedInput schema / properties / label
      Added value: +{
      +  "description": "OPTIONAL. Their own word for what they are, when none of the four fits: \"Investor\", \"Director\", \"Press\". Up to 24 characters, letters, spaces and hyphens only. It is KEPT AND SHOWN as their word and is never refused for being outside the four; the server still files one of the four behind it so the match list can say why two people fit. Pass it only when the person named it themselves - it is a fact about them, so never invent one and never tidy theirs.",
      +  "maxLength": 24,
      +  "type": "string"
      +}
    • addedInput schema / properties / lookingFor
      Added value: +{
      +  "description": "Who they want to meet, in their OWN words, up to 280 characters. This is the second of the two sentences the badge is made of, so ask \"Who do you want to meet?\" and pass what they say. It is the SAME badge line the older `intentText` argument writes, under the badge's own name for it; pass one or the other, not both. Phone numbers, email addresses and links are removed on the server. Leaving it out keeps whatever their badge already says and never clears it.",
      +  "maxLength": 280,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "intent",
      -  "discoverable"
      -]New value: +[
      +  "discoverable"
      +]
  7. Added

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior well beyond the annotations: it discloses the auth prerequisite (personal connector token), the validation rule that a badge missing a first name or either sentence is refused with a `needs` explanation, the preview/confirmToken write protocol, and that the write replaces prior text. This contextualizes destructiveHint=true and idempotentHint=true rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Effectively front-loaded — the purpose lands in the first clause, with prerequisites, validation, event resolution, and the two-step flow following in descending order of importance. Sentences are dense but each carries a distinct fact; only the confirm-token sentence is slightly awkward to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, nested-schema mutation tool with an output schema, the description covers the things an agent must know to call it correctly: auth, event defaulting, validation failure signaling via `needs`, and the preview/commit contract. Return values are left to the output schema as intended.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds real semantics: it maps the badge concept onto headline/lookingFor/discoverable, explains the confirm/confirmToken pairing, and states the default event resolution when no event id is supplied. It leaves the nested `facets` object (which carries its own `confirm`) and `label`/`intent` unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Sets the person's event badge') and names the three fields it governs (headline, lookingFor, discoverable), plus the resolution rule for which event applies. It scopes itself ('changes only that person's badge'), though it never explicitly contrasts with adjacent siblings like event_change_detail or events_personal_card.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: requires a personal connector token, defaults to the person's current event when no event is given, and spells out the two-step preview-then-commit flow. It does not name an alternative tool or state when not to use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources