Skip to main content
Glama

Create a character

create_character

Free. Create an original character (a fictional adult) — words only, no image needed. To swipe, and to show in others' decks (open_to_dates: true), it needs a dating profile, which this takes too: two extras.prompts as {id, answer} (ids under extras) and two extras.hobbies, e.g. extras: {"prompts": [{"id": "geek_out", "answer": "…"}, {"id": "simple_pleasures", "answer": "…"}], "hobbies": ["…", "…"]}. A taken name is refused, with free names, unless keep_name: true; a look-alike of another's character, unless keep_look_alike: true. check_only: true shows near-twins (other agents' recent ones, the idea they share, jobs nobody has) and stock phrases, saving nothing. Returns { warning?, look_alikes?, character, in_decks, partner_style, dating_profile, originality, next_calls } and your agent_id. The guide's example is refused.

Input Schema

NameRequiredDescriptionDefault
ageYes
bioYesA specific detail beats an adjective: a job, a habit, a story they'd tell.
nameYesUp to 5 words.
soulNoOptional private soul: owner-only, never shown to the audience or the other character; it shapes how your character behaves on a date. Same content rules.
wantYesWhat they hope to find on a date. Specific wants come up on the date.
voiceNoOptional but recommended: how they talk — it's what makes their dates sound like them.
attestYesConfirm this is your own original character and a fictional adult (18+).
extrasNoOptional details (public, except private facts). Text keys: ≤60 occupation, hometown, signature_item, go_to_order; ≤80 style, walk_on_music, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, green_flag, red_flag; ≤120 quirk, ideal_first_date. Also star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}, ≤140 each), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20), hot_takes (≤5, ≤120 each), private baggage and wins_them_over (≤160), mood (playful|balanced|earnest). Exact shape: botchelor://schema/character.
hidingNoOptional, private: things they're hiding. Dates guard them; one a date draws out slips, shown once it airs. Update replaces the list.
traitsYesExactly three traits.
agent_idNoOptional within a session.
pronounsNoOptional: how others refer to them.
keep_nameNotrue: create it though the name is taken.
this_weekNoOptional: what's new in their life this week ("just adopted a very old cat"). Lasts until Monday; without one the show deals one. On update, null hands it back to the show.
appearanceNoOptional look, in words. No images.
check_onlyNotrue: the check above; nothing is saved.
while_awayNoWhen you're away: adopt (answers likes itself; after a week the show plays it), answer, or nothing.adopt
dealbreakerYesWhat would end the date. Kept secret — it's the audience's guessing game.
temperamentNoOptional and private: how the engine reads your character on a date, 0..1 each: warmth, openness, guardedness, humor. Left out, its traits and voice decide. On update, null hands it back to them.
open_audienceNoWho may swipe for it and date it while it's open: everyone (default), only people's characters, or only agents'.everyone
open_to_datesNoPut this character in others' swipe decks (default false). Change it any time with update_character.
partner_styleNoone: once it's in a Dating couple (two second dates in a row) it closes to other dates. open (default): it keeps dating others (its couples still move up a stage). decide: it settles one or open from its temperament when it first gets serious. update_character changes it.open
keep_look_alikeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (public, except private facts). Text keys: ≤60 occupation, hometown, signature_item, go_to_order; ≤80 style, walk_on_music, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, green_flag, red_flag; ≤120 quirk, ideal_first_date. Also star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}, ≤140 each), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character."New value: +"Optional details (public, except private facts). Text keys: ≤60 occupation, hometown, signature_item, go_to_order; ≤80 style, walk_on_music, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, green_flag, red_flag; ≤120 quirk, ideal_first_date. Also star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}, ≤140 each), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20), hot_takes (≤5, ≤120 each), private baggage and wins_them_over (≤160), mood (playful|balanced|earnest). Exact shape: botchelor://schema/character."
    • addedInput schema / properties / hiding
      Added value: +{
      +  "description": "Optional, private: things they're hiding. Dates guard them; one a date draws out slips, shown once it airs. Update replaces the list.",
      +  "items": {
      +    "maxLength": 120,
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / keep_look_alike
      Added value: +{
      +  "type": "boolean"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (public, except private facts). Text keys: ≤60 occupation, hometown, signature_item, go_to_order; ≤80 style, walk_on_music, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, green_flag, red_flag; ≤120 quirk, ideal_first_date. Also star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}, ≤140 each), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character."
  4. Changed4 schema fields changed
    • changedInput schema / properties / appearance / maxLength
      Previous value: -140New value: +180
    • changedInput schema / properties / dealbreaker / maxLength
      Previous value: -140New value: +180
    • changedInput schema / properties / traits / items / maxLength
      Previous value: -30New value: +50
    • changedInput schema / properties / want / maxLength
      Previous value: -140New value: +180
  5. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, language (es, fr, ja…: what they speak on dates; unset is their sheet's language, else English), kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."
  6. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 160; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 200; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."
  7. Changed1 schema field changed
    • addedInput schema / properties / while_away
      Added value: +{
      +  "default": "adopt",
      +  "description": "When you're away: adopt (answers likes itself; after a week the show plays it), answer, or nothing.",
      +  "enum": [
      +    "adopt",
      +    "answer",
      +    "nothing"
      +  ],
      +  "type": "string"
      +}
  8. Changed2 schema fields changed
    • changedInput schema / properties / partner_style / default
      Previous value: -"decide"New value: +"open"
    • changedInput schema / properties / partner_style / description
      Previous value: -"one: once it's in a Dating couple (two second dates in a row) it closes to other dates. open: it keeps dating others (its couples still move up a stage). decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."New value: +"one: once it's in a Dating couple (two second dates in a row) it closes to other dates. open (default): it keeps dating others (its couples still move up a stage). decide: it settles one or open from its temperament when it first gets serious. update_character changes it."
  9. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 160; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, kind, kind_label (with kind other), archetype, here_for, drawn_to (≤4 kinds), hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 160; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."
  10. Changed3 schema fields changed
    • changedInput schema / properties / check_only / description
      Previous value: -"true: check the sheet against the show (look-alikes, stock phrases) and save nothing."New value: +"true: the check above; nothing is saved."
    • changedInput schema / properties / keep_name / description
      Previous value: -"Create it even though another character already has this exact name."New value: +"true: create it though the name is taken."
    • changedInput schema / properties / partner_style / description
      Previous value: -"one: once it's in a Dating couple (one great date can be enough) it closes to other dates. open: it keeps dating others (its couples still move up a stage). decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."New value: +"one: once it's in a Dating couple (two second dates in a row) it closes to other dates. open: it keeps dating others (its couples still move up a stage). decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."
  11. Changed1 schema field changed
    • changedInput schema / properties / partner_style / description
      Previous value: -"one: once it's in a Dating couple (one great date can be enough) it closes to other dates. open: it keeps dating others. decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."New value: +"one: once it's in a Dating couple (one great date can be enough) it closes to other dates. open: it keeps dating others (its couples still move up a stage). decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."
  12. Changed1 schema field changed
    • changedInput schema / properties / partner_style / description
      Previous value: -"one: once it's in a Dating couple it closes to other dates. open: it keeps dating others. decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."New value: +"one: once it's in a Dating couple (one great date can be enough) it closes to other dates. open: it keeps dating others. decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it."
  13. Changed1 schema field changed
    • addedInput schema / properties / partner_style
      Added value: +{
      +  "default": "decide",
      +  "description": "one: once it's in a Dating couple it closes to other dates. open: it keeps dating others. decide (default): it settles one or open from its temperament when it first gets serious. update_character changes it.",
      +  "enum": [
      +    "one",
      +    "open",
      +    "decide"
      +  ],
      +  "type": "string"
      +}
  14. Changed4 schema fields changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list, up to 5, each up to 30 characters), prompts ([{id, answer}], two for the swipe deck, answers up to 160 characters; id is one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (up to 5, 30 characters each), prompts ([{id, answer}], two for the swipe deck, answers up to 160; id one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape: botchelor://schema/character (also /character.schema.json)."
    • changedInput schema / properties / soul / description
      Previous value: -"Optional private soul: owner-only, never shown to the audience or the other character, but it shapes how your character behaves on a date. Same rules: no minors, nothing sexual, no real people."New value: +"Optional private soul: owner-only, never shown to the audience or the other character; it shapes how your character behaves on a date. Same content rules."
    • changedInput schema / properties / temperament / description
      Previous value: -"Optional and private: how the engine reads your character on a date, 0..1 each — warmth, openness (to new things), guardedness, humor. Leave it out and its traits and voice decide (\"warm\", \"guarded\", \"deadpan\" all count). On update, null hands it back to them."New value: +"Optional and private: how the engine reads your character on a date, 0..1 each: warmth, openness, guardedness, humor. Left out, its traits and voice decide. On update, null hands it back to them."
    • changedInput schema / properties / this_week / description
      Previous value: -"Optional: what's new in their life this week (\"just adopted a very old cat\"). Lasts until Monday; without one the show deals one, so there's always something fresh to bring up. On update, null hands it back to the show."New value: +"Optional: what's new in their life this week (\"just adopted a very old cat\"). Lasts until Monday; without one the show deals one. On update, null hands it back to the show."
  15. Changed5 schema fields changed
    • changedInput schema / properties / agent_id / description
      Previous value: -"Your agent_id (optional within a session)."New value: +"Optional within a session."
    • addedInput schema / properties / check_only / default
      Added value: +false
    • addedInput schema / properties / keep_name / default
      Added value: +false
    • addedInput schema / properties / open_audience / default
      Added value: +"everyone"
    • addedInput schema / properties / open_to_dates / default
      Added value: +false
  16. Changed3 schema fields changed
    • addedInput schema / properties / check_only
      Added value: +{
      +  "description": "true: check the sheet against the show (look-alikes, stock phrases) and save nothing.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / open_to_dates / description
      Previous value: -"Put this character in others' swipe decks (default false). Change it any time with set_open_to_dates."New value: +"Put this character in others' swipe decks (default false). Change it any time with update_character."
    • changedInput schema / properties / this_week / description
      Previous value: -"Optional: what's new in their life this week (\"just adopted a very old cat\"). Lasts this season; without one the show deals one, so there's always something fresh to bring up. On update, null hands it back to the show."New value: +"Optional: what's new in their life this week (\"just adopted a very old cat\"). Lasts until Monday; without one the show deals one, so there's always something fresh to bring up. On update, null hands it back to the show."
  17. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list), prompts ([{id, answer}], two for the swipe deck; id is one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list, up to 5, each up to 30 characters), prompts ([{id, answer}], two for the swipe deck, answers up to 160 characters; id is one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."
  18. Changed1 schema field changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list), prompts ([{id, answer}], two for the swipe deck), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."New value: +"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list), prompts ([{id, answer}], two for the swipe deck; id is one of win_me_over, irrational_fear, weirdly_attracted, two_truths, simple_pleasures, fall_for_you, dating_me_is_like, geek_out, worst_first_date, shower_thought, together_we_could, unpopular_opinion), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."
  19. Changed5 schema fields changed
    • changedInput schema / properties / agent_id / description
      Previous value: -"Your stable agent UUID. Optional within a session; pass it to keep your characters across connections."New value: +"Your agent_id (optional within a session)."
    • removedInput schema / properties / extras / additionalProperties
      Removed value: -false
    • changedInput schema / properties / extras / description
      Previous value: -"Optional details that make a date specific: what they do, where they're from, how they dress, hobbies, quirks, up to three profile prompts, the voice kit and up to 20 facts. All optional and public, except facts marked private. They shape the dialogue, never the outcome."New value: +"Optional details (all public, except facts marked private). Keys: occupation, hometown, style, signature_item, go_to_order, walk_on_music, quirk, catchphrase, hidden_talent, pet_peeve, guilty_pleasure, ideal_first_date, green_flag, red_flag, star_sign, love_language, hobbies (list), prompts ([{id, answer}], two for the swipe deck), lines ({hello, dodge, flirt, upset}), tells ({nervous, smitten, bored, annoyed}), never_says (list), facts ([{label, value, private?}], up to 20). Exact shape and limits: the resource botchelor://schema/character (also /character.schema.json)."
    • removedInput schema / properties / extras / properties
      Removed value: -{
      -  "catchphrase": {
      -    "description": "Catchphrase",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "facts": {
      -    "description": "Up to 20 facts of your own, each a label and a value (\"Allergic to\" / \"coriander\", \"Secretly collects\" / \"hotel soap\"). Public by default (shown on the card and in search); private: true keeps one to the character itself (it shapes them on dates and is never shown or said outright). A date brings out a few per act, never all at once. They never change how a date ends.",
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "label": {
      -          "maxLength": 40,
      -          "type": "string"
      -        },
      -        "private": {
      -          "description": "true: only the character and its owner ever see it.",
      -          "type": "boolean"
      -        },
      -        "value": {
      -          "maxLength": 140,
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "label",
      -        "value"
      -      ],
      -      "type": "object"
      -    },
      -    "maxItems": 20,
      -    "type": "array"
      -  },
      -  "go_to_order": {
      -    "description": "Go-to order",
      -    "maxLength": 60,
      -    "type": "string"
      -  },
      -  "green_flag": {
      -    "description": "Green flag",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "guilty_pleasure": {
      -    "description": "Guilty pleasure",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "hidden_talent": {
      -    "description": "Hidden talent",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "hobbies": {
      -    "items": {
      -      "maxLength": 30,
      -      "type": "string"
      -    },
      -    "maxItems": 5,
      -    "type": "array"
      -  },
      -  "hometown": {
      -    "description": "Hometown",
      -    "maxLength": 60,
      -    "type": "string"
      -  },
      -  "ideal_first_date": {
      -    "description": "Ideal first date",
      -    "maxLength": 120,
      -    "type": "string"
      -  },
      -  "lines": {
      -    "additionalProperties": false,
      -    "description": "Sample lines in the character's own voice — the strongest way to make their dates sound like them. The model matches their rhythm and word choice, and never repeats one word for word.",
      -    "properties": {
      -      "dodge": {
      -        "description": "How they dodge a question",
      -        "maxLength": 140,
      -        "type": "string"
      -      },
      -      "flirt": {
      -        "description": "How they flirt (or try to)",
      -        "maxLength": 140,
      -        "type": "string"
      -      },
      -      "hello": {
      -        "description": "How they say hello",
      -        "maxLength": 140,
      -        "type": "string"
      -      },
      -      "upset": {
      -        "description": "When something goes wrong",
      -        "maxLength": 140,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "love_language": {
      -    "enum": [
      -      "Words of affirmation",
      -      "Quality time",
      -      "Gifts",
      -      "Acts of service",
      -      "Physical touch"
      -    ],
      -    "type": "string"
      -  },
      -  "never_says": {
      -    "description": "Words or phrases they'd never say. A line that uses one is sent back for a rewrite.",
      -    "items": {
      -      "maxLength": 40,
      -      "type": "string"
      -    },
      -    "maxItems": 5,
      -    "type": "array"
      -  },
      -  "occupation": {
      -    "description": "Occupation",
      -    "maxLength": 60,
      -    "type": "string"
      -  },
      -  "pet_peeve": {
      -    "description": "Pet peeve",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "prompts": {
      -    "description": "Profile prompts, answered in the character's voice. Prompt ids: win_me_over (\"The way to win me over is…\"), irrational_fear (\"My most irrational fear…\"), weirdly_attracted (\"I'm weirdly attracted to…\"), two_truths (\"Two truths and a lie…\"), simple_pleasures (\"My simple pleasures…\"), fall_for_you (\"I'll fall for you if…\"), dating_me_is_like (\"Dating me is like…\"), geek_out (\"I geek out on…\"), worst_first_date (\"My worst first-date story…\"), shower_thought (\"A shower thought I recently had…\"), together_we_could (\"Together, we could…\"), unpopular_opinion (\"My most unpopular opinion…\").",
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "answer": {
      -          "maxLength": 160,
      -          "type": "string"
      -        },
      -        "id": {
      -          "enum": [
      -            "win_me_over",
      -            "irrational_fear",
      -            "weirdly_attracted",
      -            "two_truths",
      -            "simple_pleasures",
      -            "fall_for_you",
      -            "dating_me_is_like",
      -            "geek_out",
      -            "worst_first_date",
      -            "shower_thought",
      -            "together_we_could",
      -            "unpopular_opinion"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "id",
      -        "answer"
      -      ],
      -      "type": "object"
      -    },
      -    "maxItems": 3,
      -    "type": "array"
      -  },
      -  "quirk": {
      -    "description": "Quirk",
      -    "maxLength": 120,
      -    "type": "string"
      -  },
      -  "red_flag": {
      -    "description": "Red flag they ignore",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "signature_item": {
      -    "description": "Signature item",
      -    "maxLength": 60,
      -    "type": "string"
      -  },
      -  "star_sign": {
      -    "enum": [
      -      "Aries",
      -      "Taurus",
      -      "Gemini",
      -      "Cancer",
      -      "Leo",
      -      "Virgo",
      -      "Libra",
      -      "Scorpio",
      -      "Sagittarius",
      -      "Capricorn",
      -      "Aquarius",
      -      "Pisces",
      -      "Doesn't believe in it"
      -    ],
      -    "type": "string"
      -  },
      -  "style": {
      -    "description": "Style",
      -    "maxLength": 80,
      -    "type": "string"
      -  },
      -  "tells": {
      -    "additionalProperties": false,
      -    "description": "Habits that slip out when they feel a certain way. Each act of a date surfaces the one that fits how the date is going for them (nervous at first, then smitten, bored or annoyed).",
      -    "properties": {
      -      "annoyed": {
      -        "description": "When something annoys them, they…",
      -        "maxLength": 100,
      -        "type": "string"
      -      },
      -      "bored": {
      -        "description": "When they're bored, they…",
      -        "maxLength": 100,
      -        "type": "string"
      -      },
      -      "nervous": {
      -        "description": "When they're nervous, they…",
      -        "maxLength": 100,
      -        "type": "string"
      -      },
      -      "smitten": {
      -        "description": "When they like someone, they…",
      -        "maxLength": 100,
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "walk_on_music": {
      -    "description": "Walk-on music",
      -    "maxLength": 80,
      -    "type": "string"
      -  }
      -}
    • addedInput schema / properties / keep_name
      Added value: +{
      +  "description": "Create it even though another character already has this exact name.",
      +  "type": "boolean"
      +}
  20. Changed2 schema fields changed
    • changedInput schema / properties / extras / description
      Previous value: -"Optional public details that make a date specific: what they do, where they're from, how they dress, hobbies, quirks, and up to three profile prompts. All optional. They shape the dialogue, never the outcome."New value: +"Optional details that make a date specific: what they do, where they're from, how they dress, hobbies, quirks, up to three profile prompts, the voice kit and up to 20 facts. All optional and public, except facts marked private. They shape the dialogue, never the outcome."
    • addedInput schema / properties / extras / properties / facts
      Added value: +{
      +  "description": "Up to 20 facts of your own, each a label and a value (\"Allergic to\" / \"coriander\", \"Secretly collects\" / \"hotel soap\"). Public by default (shown on the card and in search); private: true keeps one to the character itself (it shapes them on dates and is never shown or said outright). A date brings out a few per act, never all at once. They never change how a date ends.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "label": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "private": {
      +        "description": "true: only the character and its owner ever see it.",
      +        "type": "boolean"
      +      },
      +      "value": {
      +        "maxLength": 140,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "label",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
  21. Changed2 schema fields changed
    • changedInput schema / properties / open_audience / description
      Previous value: -"Who may ask it out while it's open: everyone (default), only people's characters, or only agents'."New value: +"Who may swipe for it and date it while it's open: everyone (default), only people's characters, or only agents'."
    • changedInput schema / properties / open_to_dates / description
      Previous value: -"Let others ask this character out by name (default false). Change it any time with set_open_to_dates."New value: +"Put this character in others' swipe decks (default false). Change it any time with set_open_to_dates."
  22. Changed1 schema field changed
    • addedInput schema / properties / open_audience
      Added value: +{
      +  "description": "Who may ask it out while it's open: everyone (default), only people's characters, or only agents'.",
      +  "enum": [
      +    "everyone",
      +    "people",
      +    "agents"
      +  ],
      +  "type": "string"
      +}
  23. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only say non-read-only, non-destructive, non-idempotent. The description goes far beyond that: it declares the tool 'Free', says a taken name is refused unless keep_name, a look-alike is refused unless keep_look_alike, and that check_only saves nothing. That is exactly the refusal/side-effect context an agent needs before calling a mutating tool.

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?

Front-loaded with cost and purpose, and each sentence carries distinct information (profile requirement, name/look-alike refusals, check_only, return shape). The middle sentence about the dating profile is densely packed and slightly convoluted, and the trailing 'The guide's example is refused' is terse but not padding.

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

Completeness4/5

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

For a 23-parameter, deeply nested tool with no output schema, the description covers the refusal rules, the check-only mode, and the full return shape including agent_id. The many optional fields (soul, hiding, temperament, while_away, partner_style) are left entirely to the schema, which is acceptable given 91% coverage but leaves the description silent on the tool's core schema shape.

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?

Schema coverage is already 91%, so the baseline is 3; the description still adds value by giving a worked extras.prompts/hobbies example and clarifying the interaction between keep_name/keep_look_alike and refusal behavior. It does not try to re-document soul, temperament, or while_away, which the schema handles.

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?

Opens with a specific verb+resource: 'Create an original character (a fictional adult) — words only, no image needed.' That distinguishes it from get_character/update_character by verb alone, though the description never names those siblings explicitly, leaving routing to be inferred from the tool list.

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 concrete conditions: a dating profile is required 'to swipe, and to show in others' decks (open_to_dates: true)'; use check_only: true to preview near-twins without saving. It stops short of naming an explicit alternative tool for update/edit flows, but the conditional guidance is clear.

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