Skip to main content
Glama

Save the router rules with the expected version and a reason

summer_router_rules_update
Destructive

Save the router rules with the expected version and a reason. Keeps the original revision and updates the Routing rules knowledge document. Run router_rules.test first. Needs a company admin.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "company": "<company>",
      "version": "<version>",
      "rules": "<rules>",
      "reason": "<reason>"
    },
    "name": "summer_router_rules_update"
  }
}

Input Schema

NameRequiredDescriptionDefault
rulesYesThe rules document: { version: 1, intake: [...], activity: [...] }. Intake rules { id, description, enabled?, route: "file", emailType, match: { senderDomains?, senderAddresses?, onlyMessage?, automatic?, vendor?, subject?, subjectNot?, body?, bodyNot? } } file a new email without a ticket; route: "join_ticket" (no emailType) adds a vendor email about one order number to the open ticket that already holds that number, and opens a ticket otherwise. Activity rules { id, description, enabled?, route: "ignore", match: { sources, orderStatuses?, eventKinds?, eventSummary?, handledBy? } } skip the agent when every new ticket item matches. automatic: true matches mail a machine wrote; vendor: true matches mail from one of the company's pharmacies or clinical partners. Patterns are case-insensitive regular expressions.
reasonYesWhy the rules change. Kept with the revision.
companyYes
versionYesThe version you read. A newer saved version refuses the change.
idempotency_keyNoReuse the same key when retrying the same change

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / rules / description
      Previous value: -"The rules document: { version: 1, intake: [...], activity: [...] }. Intake rules { id, description, enabled?, route: \"file\", emailType, match: { senderDomains?, senderAddresses?, onlyMessage?, subject?, subjectNot?, body?, bodyNot? } } file a new email without a ticket; route: \"join_ticket\" (no emailType) adds a vendor email about one order number to the open ticket that already holds that number, and opens a ticket otherwise. Activity rules { id, description, enabled?, route: \"ignore\", match: { sources, orderStatuses?, eventKinds?, eventSummary?, handledBy? } } skip the agent when every new ticket item matches. Patterns are case-insensitive regular expressions."New value: +"The rules document: { version: 1, intake: [...], activity: [...] }. Intake rules { id, description, enabled?, route: \"file\", emailType, match: { senderDomains?, senderAddresses?, onlyMessage?, automatic?, vendor?, subject?, subjectNot?, body?, bodyNot? } } file a new email without a ticket; route: \"join_ticket\" (no emailType) adds a vendor email about one order number to the open ticket that already holds that number, and opens a ticket otherwise. Activity rules { id, description, enabled?, route: \"ignore\", match: { sources, orderStatuses?, eventKinds?, eventSummary?, handledBy? } } skip the agent when every new ticket item matches. automatic: true matches mail a machine wrote; vendor: true matches mail from one of the company's pharmacies or clinical partners. Patterns are case-insensitive regular expressions."
  2. Changed1 schema field changed
    • changedInput schema / properties / rules / description
      Previous value: -"The rules document: { version: 1, intake: [...], activity: [...] }. Intake rules { id, description, enabled?, route: \"file\", emailType, match: { senderDomains?, senderAddresses?, onlyMessage?, subject?, subjectNot?, body?, bodyNot? } } file a new email without a ticket. Activity rules { id, description, enabled?, route: \"ignore\", match: { sources, orderStatuses?, eventKinds?, eventSummary?, handledBy? } } skip the agent when every new ticket item matches. Patterns are case-insensitive regular expressions."New value: +"The rules document: { version: 1, intake: [...], activity: [...] }. Intake rules { id, description, enabled?, route: \"file\", emailType, match: { senderDomains?, senderAddresses?, onlyMessage?, subject?, subjectNot?, body?, bodyNot? } } file a new email without a ticket; route: \"join_ticket\" (no emailType) adds a vendor email about one order number to the open ticket that already holds that number, and opens a ticket otherwise. Activity rules { id, description, enabled?, route: \"ignore\", match: { sources, orderStatuses?, eventKinds?, eventSummary?, handledBy? } } skip the agent when every new ticket item matches. Patterns are case-insensitive regular expressions."
  3. Added

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false; the description adds the pieces the annotations cannot: the write targets the Routing rules knowledge document, the prior revision is retained, a stale version refuses the change, and admin privileges are required. It does not describe the failure/conflict response shape or how a partial rules document is treated, which keeps it below a 5.

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?

Four short sentences, front-loaded with the action and immediately followed by the operational constraints. The first sentence essentially restates the title, a small redundancy, but nothing else is wasted.

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 destructive, open-world save with five parameters and no output schema, the description covers the prerequisites, the permission requirement, the optimistic-concurrency failure mode, and the side effect on the knowledge document. Remaining gaps (error payload shape, whether the rules object is a full replacement) are minor given the schema detail.

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 80%, so parameters are largely self-documenting, and the nested rules object is heavily annotated in the schema. The description reinforces the 'expected version' and 'reason' semantics but adds no syntax or format detail beyond what the schema already says.

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 ('Save the router rules') plus the concurrency contract ('with the expected version and a reason'), and adds what actually changes ('updates the Routing rules knowledge document'). It is distinguishable from the sibling router_rules_read / history / test tools, though it does not explicitly name them as alternatives.

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?

'Run router_rules.test first' and 'Needs a company admin' give concrete preconditions an agent can act on before calling. It lacks an explicit statement of when to use this versus router_rules_read or history, so routing is implied by the verb rather than spelled out.

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.