Skip to main content
Glama

Save Chat settings

save_chat
Destructive

PARTIAL SAVE: writes ONLY the 'Chat' field of TitlePublicConfigurationModel; all other v1/v2 fields stay untouched. Player chat - the catalog of persistent CHANNELS the title offers (world / announcement / group), plus direct-message settings, moderation rules and polling economics. A channel declares who SEES it (SegmentGate + ScheduleSpec) and who may WRITE to it (a second gate plus LimitSpec anti-spam: slow mode, daily cap); an announcement channel is simply one nobody passes the write gate of. A channel may be PARTITIONED by the player's language or country and sharded by capacity - the partition key is computed by the SERVER (language is validated against this title's Localization locales, country comes from IP), so the set of rooms is bounded by config and never by client input. Type=Group is the extension point for clans: membership comes from an external provider named in GroupSource, and no provider exists yet, so such a channel is currently hidden rather than shown empty. Messages themselves are NOT here - they live in the ChatMessages collection and expire by Retention.HistoryHours; only the hot tail is cached in Redis. Muting a player and reviewing reports are admin actions, not config.

Input Schema

NameRequiredDescriptionDefault
valueYesConfiguration of the title's player chat: the catalog of persistent channels (world/announcement/group), direct-message settings, moderation rules and polling economics. Channels are addressed by ChannelID; a channel may be partitioned by the player's language or country and sharded by capacity, and the partition key is computed by the SERVER, never sent by the client. Messages themselves are not here - they live in the ChatMessages collection.
title_idYesTitleID, для которого сохраняются данные.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / definitions / EventTokenSourceType / enum
      Previous value: -[
      -  "BoardTileLanding",
      -  "BoardPassStart",
      -  "BoardAttack",
      -  "BoardRaid",
      -  "BoardBuild",
      -  "BoardStageComplete",
      -  "BoardSpecialComplete",
      -  "QuestComplete",
      -  "StorePurchase",
      -  "DailyLogin",
      -  "ReferralInvite",
      -  "MilestoneReward",
      -  "CustomAction",
      -  "LeaderboardRankReward",
      -  "MarketplaceSell",
      -  "MarketplaceBuy",
      -  "CurrencySpent",
      -  "LootboxOpened",
      -  "IapPurchase",
      -  "CryptoDeposit",
      -  "CryptoWithdraw",
      -  "CryptoSpent",
      -  "CurrencyEarned",
      -  "CryptoEarned"
      -]New value: +[
      +  "BoardTileLanding",
      +  "BoardPassStart",
      +  "BoardAttack",
      +  "BoardRaid",
      +  "BoardBuild",
      +  "BoardStageComplete",
      +  "BoardSpecialComplete",
      +  "QuestComplete",
      +  "StorePurchase",
      +  "DailyLogin",
      +  "ReferralInvite",
      +  "MilestoneReward",
      +  "CustomAction",
      +  "LeaderboardRankReward",
      +  "MarketplaceSell",
      +  "MarketplaceBuy",
      +  "CurrencySpent",
      +  "LootboxOpened",
      +  "IapPurchase",
      +  "CryptoDeposit",
      +  "CryptoWithdraw",
      +  "CryptoSpent",
      +  "CurrencyEarned",
      +  "CryptoEarned",
      +  "ClientScore"
      +]
    • changedInput schema / definitions / EventTokenSourceType / x-enum-descriptions
      Previous value: -[
      -  "Landing on an EventToken tile on the board.",
      -  "Passing start (GO) on the board.",
      -  "Successful board attack.",
      -  "Successful board raid.",
      -  "Building or repairing a structure on the board.",
      -  "Completing a board stage.",
      -  "Completing a board Special mode — either via Instant choice or via Claim after the Timed window. Post-resolution source (mirrors BoardAttack/BoardRaid): fires at the final Special reward grant, separately from BoardTileLanding (which fires on the actual tile landing during Roll).",
      -  "Completing a quest.",
      -  "Store purchase.",
      -  "Daily login.",
      -  "Referral invite.",
      -  "Token grant as a reward for a milestone or streak in another event. Server-only source — the client cannot invoke it directly.",
      -  "Arbitrary action — the developer calls the server API with ActionName in Params.",
      -  null,
      -  "Marketplace (v2) sale — deal settlement on the seller side. Server-only source. Filter Params: CatalogID / ItemID / OfferType.",
      -  "Marketplace (v2) purchase — deal settlement on the buyer side. Server-only source. Filter Params: CatalogID / ItemID / OfferType.",
      -  "In-game currency spend — any scenario where a resource operation actually consumed currency. Server-only source. The multiplier equals the amount spent. Filter Params: CurrencyID.",
      -  "Opening a lootbox/chest. Server-only source. The multiplier equals how many boxes were opened in the call. Filter Params: LootboxID.",
      -  "Real-money store purchase (IAP). Server-only source: fired in PurchaseV2 AFTER the receipt is verified and rewards are granted. The multiplier equals the number of product units granted. Filter Params: ProductID, Store. Deliberately separate from StorePurchase, which covers in-game currency spending.",
      -  "Crypto deposit credited to the in-game balance. Multiplier is 1 (one operation). Filter Params: CurrencyID, NetworkID.",
      -  "Crypto withdrawal CONFIRMED on chain. Multiplier is 1 (one operation). Filter Params: CurrencyID, NetworkID.",
      -  "Spending crypto currency in-game. The multiplier equals the amount spent. Filter Params: CurrencyID.",
      -  "In-game currency GRANT — mirror of CurrencySpent. The multiplier equals the amount granted, so ScaleWithRollMultiplier picks the meaning: \"earn N currency\" or \"receive currency N times\". Filter Params: CurrencyID and Origin (\"Gameplay\" | \"RewardClaim\"), the latter separating gameplay earnings from reward payouts — without it a goal like \"earn N\" would be closed by another quest's reward.",
      -  "CRYPTO currency GRANT in-game (wallet deposits are NOT included — that is CryptoDeposit). The multiplier equals the amount granted. Filter Params: CurrencyID, Origin."
      -]New value: +[
      +  "Landing on an EventToken tile on the board.",
      +  "Passing start (GO) on the board.",
      +  "Successful board attack.",
      +  "Successful board raid.",
      +  "Building or repairing a structure on the board.",
      +  "Completing a board stage.",
      +  "Completing a board Special mode — either via Instant choice or via Claim after the Timed window. Post-resolution source (mirrors BoardAttack/BoardRaid): fires at the final Special reward grant, separately from BoardTileLanding (which fires on the actual tile landing during Roll).",
      +  "Completing a quest.",
      +  "Store purchase.",
      +  "Daily login.",
      +  "Referral invite.",
      +  "Token grant as a reward for a milestone or streak in another event. Server-only source — the client cannot invoke it directly.",
      +  "Arbitrary action — the developer calls the server API with ActionName in Params.",
      +  null,
      +  "Marketplace (v2) sale — deal settlement on the seller side. Server-only source. Filter Params: CatalogID / ItemID / OfferType.",
      +  "Marketplace (v2) purchase — deal settlement on the buyer side. Server-only source. Filter Params: CatalogID / ItemID / OfferType.",
      +  "In-game currency spend — any scenario where a resource operation actually consumed currency. Server-only source. The multiplier equals the amount spent. Filter Params: CurrencyID.",
      +  "Opening a lootbox/chest. Server-only source. The multiplier equals how many boxes were opened in the call. Filter Params: LootboxID.",
      +  "Real-money store purchase (IAP). Server-only source: fired in PurchaseV2 AFTER the receipt is verified and rewards are granted. The multiplier equals the number of product units granted. Filter Params: ProductID, Store. Deliberately separate from StorePurchase, which covers in-game currency spending.",
      +  "Crypto deposit credited to the in-game balance. Multiplier is 1 (one operation). Filter Params: CurrencyID, NetworkID.",
      +  "Crypto withdrawal CONFIRMED on chain. Multiplier is 1 (one operation). Filter Params: CurrencyID, NetworkID.",
      +  "Spending crypto currency in-game. The multiplier equals the amount spent. Filter Params: CurrencyID.",
      +  "In-game currency GRANT — mirror of CurrencySpent. The multiplier equals the amount granted, so ScaleWithRollMultiplier picks the meaning: \"earn N currency\" or \"receive currency N times\". Filter Params: CurrencyID and Origin (\"Gameplay\" | \"RewardClaim\"), the latter separating gameplay earnings from reward payouts — without it a goal like \"earn N\" would be closed by another quest's reward.",
      +  "CRYPTO currency GRANT in-game (wallet deposits are NOT included — that is CryptoDeposit). The multiplier equals the amount granted. Filter Params: CurrencyID, Origin.",
      +  "Leaderboard ScoreSources only: the board accepts the NUMBER the game submits itself (SubmitScore / SubmitScoresBatch). Not an event — it grants nothing and matches nothing, it only allows. Without it the board refuses a score from the game: an empty ScoreSources list means the board is not set up. Caps live in Limits: PerActivationCap = max score of ONE submission, DailyCap / DailyWeightCap = submissions / total score per UTC day, CooldownSeconds, MaxPerWindow + WindowSeconds, TotalCap = submissions for all time. A submission over a cap is refused, not trimmed. BaseWeight is not read. Set caps the game can really reach: the client is not trusted, they are the only limit on a forged score."
      +]
    • changedInput schema / definitions / EventTokenSourceType / x-enumNames
      Previous value: -[
      -  "BoardTileLanding",
      -  "BoardPassStart",
      -  "BoardAttack",
      -  "BoardRaid",
      -  "BoardBuild",
      -  "BoardStageComplete",
      -  "BoardSpecialComplete",
      -  "QuestComplete",
      -  "StorePurchase",
      -  "DailyLogin",
      -  "ReferralInvite",
      -  "MilestoneReward",
      -  "CustomAction",
      -  "LeaderboardRankReward",
      -  "MarketplaceSell",
      -  "MarketplaceBuy",
      -  "CurrencySpent",
      -  "LootboxOpened",
      -  "IapPurchase",
      -  "CryptoDeposit",
      -  "CryptoWithdraw",
      -  "CryptoSpent",
      -  "CurrencyEarned",
      -  "CryptoEarned"
      -]New value: +[
      +  "BoardTileLanding",
      +  "BoardPassStart",
      +  "BoardAttack",
      +  "BoardRaid",
      +  "BoardBuild",
      +  "BoardStageComplete",
      +  "BoardSpecialComplete",
      +  "QuestComplete",
      +  "StorePurchase",
      +  "DailyLogin",
      +  "ReferralInvite",
      +  "MilestoneReward",
      +  "CustomAction",
      +  "LeaderboardRankReward",
      +  "MarketplaceSell",
      +  "MarketplaceBuy",
      +  "CurrencySpent",
      +  "LootboxOpened",
      +  "IapPurchase",
      +  "CryptoDeposit",
      +  "CryptoWithdraw",
      +  "CryptoSpent",
      +  "CurrencyEarned",
      +  "CryptoEarned",
      +  "ClientScore"
      +]
  2. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already flag this as a non-read-only, destructive write, and the description adds a genuinely useful trait beyond them: it is a PARTIAL save that leaves all other v1/v2 fields untouched, which tells the agent it will not clobber unrelated config. It still does not state the response shape or permission requirements, but the partial-write semantics are meaningful added context.

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

Conciseness2/5

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

The operational fact is correctly front-loaded, but the bulk of the paragraph is domain narrative about chat channels, gates, partitioning and retention that largely duplicates the schema definitions rather than helping the agent invoke the tool. It is dense and overlong for a tool description, so many sentences do not earn their place.

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 complex tool with deeply nested input and no output schema, the description supplies substantial context: what the Chat block contains, boundaries (messages live elsewhere, muting/reports are admin actions), and server-side behaviors like partition-key computation. What it lacks is any statement of what a successful save returns or requires, but overall context is strong.

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 description coverage is 100% and both parameters are already documented in the schema, including a rich nested description of the 'value' object. The description restates and expands the chat domain model but adds little parameter-specific syntax or format detail not already present, so the baseline 3 applies.

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?

The opening sentence gives a precise verb, resource and scope: 'PARTIAL SAVE: writes ONLY the Chat field of TitlePublicConfigurationModel; all other v1/v2 fields stay untouched.' Combined with the rest, an agent knows this tool persists the chat configuration. It stops short of naming a sibling or stating the general save_* family relationship, so it is clear but not maximally differentiated.

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?

There is no explicit when-to-use/when-not or routing to alternatives (e.g. get_chat for reads). Usage is only implied through boundary remarks such as 'Muting a player and reviewing reports are admin actions, not config' and 'Messages themselves are NOT here'. These help scope the tool but do not tell the agent when to prefer it over siblings.

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.