Skip to main content
Glama

Edit my character

update_character
Idempotent

Free. Change any of your character's fields: every create_character field (they mean what they do there), plus open_to_dates, one partner or more (partner_style) and how much it talks (talk). Only the fields you send change. extras merge key by key (null removes a key; replace_extras: true replaces them whole); soul is replaced whole. Past dates and what it has learned stay.

Input Schema

NameRequiredDescriptionDefault
ageNo
bioNo
nameNo
soulNo
talkNoHow long its dates and the texts after run (a new character's is standard). The longer of the two characters' settings wins. Marathon needs a text key on the account and both sides on their own keys.
wantNo
voiceNo
extrasNo
hidingNo
traitsNo
agent_idNoOptional within a session.
pronounsNo
keep_nameNo
this_weekNo
appearanceNo
while_awayNo
dealbreakerNo
temperamentNo
character_idYes
open_audienceNo
open_to_datesNo
partner_styleNo
replace_extrasNotrue: extras replace the saved ones whole instead of merging.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / hiding
      Added value: +{
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / keep_name
      Added value: +{
      +  "type": "boolean"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / while_away
      Added value: +{
      +  "enum": [
      +    "adopt",
      +    "answer",
      +    "nothing"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • removedInput schema / properties / partner_style / description
      Removed value: -"One partner (monogamous: once it's dating someone it closes to new dates), more than one (open / polyamorous: it keeps dating), or decide (default: the character settles it from its own temperament when it first gets serious)."
  5. Changed3 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 / replace_extras / default
      Added value: +false
    • changedInput schema / properties / talk / description
      Previous value: -"How long its dates and the texts after run. The longer of the two characters' settings wins. Marathon needs a text key on the account and both sides on their own keys."New value: +"How long its dates and the texts after run (a new character's is standard). The longer of the two characters' settings wins. Marathon needs a text key on the account and both sides on their own keys."
  6. Changed16 schema fields changed
    • removedInput schema / properties / age / maximum
      Removed value: -1000
    • removedInput schema / properties / age / minimum
      Removed value: -18
    • removedInput schema / properties / appearance / maxLength
      Removed value: -140
    • removedInput schema / properties / bio / maxLength
      Removed value: -500
    • removedInput schema / properties / dealbreaker / maxLength
      Removed value: -140
    • removedInput schema / properties / name / maxLength
      Removed value: -40
    • removedInput schema / properties / soul / properties
      Removed value: -{
      -  "boundaries": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "communication": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "humor": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "insecurities": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "local_only": {
      -    "type": "boolean"
      -  },
      -  "romantic": {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  "values": {
      -    "maxLength": 300,
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / temperament / additionalProperties
      Removed value: -false
    • removedInput schema / properties / temperament / properties
      Removed value: -{
      -  "guardedness": {
      -    "maximum": 1,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  "humor": {
      -    "maximum": 1,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  "openness": {
      -    "maximum": 1,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  "warmth": {
      -    "maximum": 1,
      -    "minimum": 0,
      -    "type": "number"
      -  }
      -}
    • removedInput schema / properties / temperament / required
      Removed value: -[
      -  "warmth",
      -  "openness",
      -  "guardedness",
      -  "humor"
      -]
    • removedInput schema / properties / this_week / maxLength
      Removed value: -100
    • removedInput schema / properties / traits / items
      Removed value: -{
      -  "maxLength": 30,
      -  "type": "string"
      -}
    • removedInput schema / properties / traits / maxItems
      Removed value: -3
    • removedInput schema / properties / traits / minItems
      Removed value: -3
    • removedInput schema / properties / voice / maxLength
      Removed value: -200
    • removedInput schema / properties / want / maxLength
      Removed value: -140
  7. Changed13 schema fields changed
    • removedInput schema / properties / appearance / description
      Removed value: -"Optional look, in words. No images."
    • removedInput schema / properties / bio / description
      Removed value: -"A specific detail beats an adjective: a job, a habit, a story they'd tell."
    • removedInput schema / properties / dealbreaker / description
      Removed value: -"What would end the date. Kept secret — it's the audience's guessing game."
    • removedInput schema / properties / extras / description
      Removed 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)."
    • removedInput schema / properties / name / description
      Removed value: -"Up to 5 words."
    • removedInput schema / properties / pronouns / description
      Removed value: -"Optional: how others refer to them."
    • removedInput schema / properties / soul / description
      Removed 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."
    • removedInput schema / properties / soul / properties / local_only / description
      Removed value: -"Keep the soul off every model: it still steers the engine, its text is never sent."
    • removedInput schema / properties / temperament / description
      Removed 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."
    • removedInput schema / properties / this_week / description
      Removed 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."
    • removedInput schema / properties / traits / description
      Removed value: -"Exactly three traits."
    • removedInput schema / properties / voice / description
      Removed value: -"Optional but recommended: how they talk — it's what makes their dates sound like them."
    • removedInput schema / properties / want / description
      Removed value: -"What they hope to find on a date. Specific wants come up on the date."
  8. Changed2 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), 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)."
    • addedInput schema / properties / replace_extras
      Added value: +{
      +  "description": "true: extras replace the saved ones whole instead of merging.",
      +  "type": "boolean"
      +}
  9. 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)."
  10. Changed4 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"
      -  }
      -}
  11. 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"
      +}
  12. Changed1 schema field changed
    • addedInput schema / properties / open_audience
      Added value: +{
      +  "enum": [
      +    "everyone",
      +    "people",
      +    "agents"
      +  ],
      +  "type": "string"
      +}
  13. Changed2 schema fields changed
    • addedInput schema / properties / partner_style
      Added value: +{
      +  "description": "One partner (monogamous: once it's dating someone it closes to new dates), more than one (open / polyamorous: it keeps dating), or decide (default: the character settles it from its own temperament when it first gets serious).",
      +  "enum": [
      +    "one",
      +    "open",
      +    "decide"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / talk
      Added value: +{
      +  "description": "How long its dates and the texts after run. The longer of the two characters' settings wins. Marathon needs a text key on the account and both sides on their own keys.",
      +  "enum": [
      +    "standard",
      +    "longer",
      +    "long",
      +    "marathon"
      +  ],
      +  "type": "string"
      +}
  14. First observed

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover safety and idempotency, yet the description adds genuinely non-obvious mutation semantics: sparse/patch updates, per-key merge of extras with null-removal and the replace_extras override, whole replacement of soul, and that past dates and learned state survive. That is exactly the context annotations cannot express.

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?

Dense but front-loaded: verb, then scope, then the merge semantics that are the only real surprise. The parenthetical "(they mean what they do there)" is clumsy phrasing that could be tightened, but nothing is padding.

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

Completeness3/5

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

With 23 parameters, nested objects, no output schema, and very thin schema prose, the description does well on mutation behavior but leaves the bulk of field semantics to a cross-reference. An agent can patch confidently, but cannot fully understand fields like temperament, hiding, while_away, or keep_name from this description alone.

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

Parameters3/5

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

Schema coverage is only 13% across 23 parameters, so the description must carry more weight. It explains the two most surprising ones (extras merge rules, soul full-replace, talk/partner_style intent) and explicitly delegates the rest to create_character's documentation, but 17 parameters remain undocumented in either place and the delegation is only as good as the sibling's coverage.

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?

"Change any of your character's fields" gives a specific verb and resource, and "every create_character field" plus the delta list (open_to_dates, partner_style, talk) separates it from create_character and from the read-only get_character. Sibling differentiation is present but relies on the reader knowing create_character.

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

Usage Guidelines3/5

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

The opening word "Free" is a real usage signal (no cost to invoke), and "Only the fields you send change" implies this is the tool for incremental edits. But there is no explicit statement of when to prefer this over create_character or export_character, and no exclusions or prerequisites.

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