Skip to main content
Glama
aikts

Yandex Tracker MCP

Update Issue

issue_update

Update an existing Yandex Tracker issue while preserving unspecified fields. Change summary, assignee, priority, tags, components, sprint, project, or description with a single request.

Instructions

Update an existing Yandex Tracker issue. Only the parameters you pass change; the rest stay as they are. Use queue_get_fields to discover the queue's fields. version is optional optimistic locking - pass one read moments earlier with issue_get, never the one issue_create returned, since triggers bump it right after creation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tagsNoIssue tags as array of strings.
typeNoIssue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'), or the bare key/ID. Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue.
fieldsNoAdditional fields to update, for those without a dedicated parameter above. Field ids come from `queue_get_fields` or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null}), since a dedicated parameter left unset is simply not sent. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name.
parentNoParent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key.
sprintNoSprint assignments. Array of objects, each with 'id' field containing the sprint ID (integer).
projectNoProject assignment. Object with 'primary' (int, main project shortId) and optional 'secondary' (list of ints, additional project shortIds).
summaryNoNew issue title/summary
versionNoIssue version for optimistic locking: the change lands only if this is the issue's current version, otherwise the call fails with an editing conflict. Read it with `issue_get` right before updating, or omit it to update whatever the latest version is. The version `issue_create` returned is not safe here - triggers bump it right after creation.
assigneeNoNew assignee login or UID
issue_idYesIssue ID in the format '<project>-<id>', like 'SOMEPROJECT-1'
priorityNoIssue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'), or the bare key/ID. Use get_priorities to find available priorities.
followersNoIssue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login. Replaces the current follower list.
componentsNoQueue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list.
descriptionNoNew issue description (use markdown formatting)
markup_typeNoMarkup type for description text. Use 'md' for YFM (markdown) markup.md

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyNo
epicNo
tagsNo
typeNo
spentNo
startNo
votesNo
boardsNoAgile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.
parentNo
sprintNoSprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them.
statusNo
uniqueNo
summaryNo
versionNo
assigneeNo
deadlineNo
priorityNo
createdAtNo
createdByNo
updatedAtNo
updatedByNo
componentsNo
estimationNo
descriptionNo
storyPointsNo
previousStatusNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.10.0
    • changedInput schema / $defs / IssueComponentRef / properties / id / description
      Previous value: -"Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number."New value: +"Component ID (numeric, as returned by queue_get_components or queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number."
    • changedInput schema / properties / components / description
      Previous value: -"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list."New value: +"Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_components or queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list."
    • changedInput schema / properties / fields / description
      Previous value: -"Additional fields to update, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null, 'parent': null}), since a dedicated parameter left unset simply is not sent. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name."New value: +"Additional fields to update, for those without a dedicated parameter above. Field ids come from `queue_get_fields` or `get_global_fields`, which also lists system fields such as `parent` or `estimation` that the queue listing may omit. Keys are Tracker's own camelCase ids, e.g. 'storyPoints'. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null}), since a dedicated parameter left unset is simply not sent. Values are sent as-is: reference fields want numeric IDs as numbers or {'id': ...} objects, since a bare string may be read as a name."
    • changedInput schema / properties / version / description
      Previous value: -"Issue version for optimistic locking; changes are only applied when it is the issue's current version, otherwise the call fails with an editing conflict. Read it with issue_get immediately before updating, and omit it when you just want the update to land on whatever the latest version is. The version returned by issue_create is not safe to use here: queue triggers and automation bump it right after creation."New value: +"Issue version for optimistic locking: the change lands only if this is the issue's current version, otherwise the call fails with an editing conflict. Read it with `issue_get` right before updating, or omit it to update whatever the latest version is. The version `issue_create` returned is not safe here - triggers bump it right after creation."
    • addedOutput schema / $defs / IssueBoardReference
      Added value: +{
      +  "description": "A board an issue shows up on, as nested in an issue record.\n\nTracker spells this one differently from its other references: `name`\ninstead of `display`, and a numeric id. That id is what `board_get`,\n`board_get_columns` and `board_get_sprints` take.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Board identifier, as taken by the `board_get`, `board_get_columns` and `board_get_sprints` tools",
      +      "title": "Id"
      +    },
      +    "name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Board name",
      +      "title": "Name"
      +    }
      +  },
      +  "title": "IssueBoardReference",
      +  "type": "object"
      +}
    • addedOutput schema / properties / boards
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/IssueBoardReference"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Agile boards the issue shows up on. Tracker fills this in from the boards' own filters - an issue is not assigned to a board directly, so this is read-only. Use the board id with `board_get`, `board_get_columns` or `board_get_sprints`.",
      +  "title": "Boards"
      +}
    • addedOutput schema / properties / sprint / description
      Added value: +"Sprints the issue is in. Use `board_get_sprints` to look up the sprints of a board, and pass a sprint id to `issue_update` to move the issue between them."
  2. Changed30 schema fields changedv0.8.0
    • addedInput schema / $defs / IssueComponentRef
      Added value: +{
      +  "description": "Queue component reference.\n\nExactly one of `id` / `name` must be set: Tracker treats numbers as\ncomponent ids and strings as component names, so `\"694\"` is a *name*.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Component ID (numeric, as returned by queue_get_metadata with expand=['components']). A numeric string is accepted and sent as a number.",
      +      "title": "Id"
      +    },
      +    "name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Component name, used only when the ID is unknown",
      +      "title": "Name"
      +    }
      +  },
      +  "title": "IssueComponentRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssueFollowerRef
      Added value: +{
      +  "description": "Follower reference.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "integer"
      +        }
      +      ],
      +      "description": "User ID (uid, e.g. 8000000000000034) or login (e.g. 'jdoe')",
      +      "title": "Id"
      +    }
      +  },
      +  "required": [
      +    "id"
      +  ],
      +  "title": "IssueFollowerRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssueParentRef
      Added value: +{
      +  "description": "Parent issue reference.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Parent issue ID",
      +      "title": "Id"
      +    },
      +    "key": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Parent issue key (e.g., 'QUEUE-123')",
      +      "title": "Key"
      +    }
      +  },
      +  "title": "IssueParentRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssuePriorityRef
      Added value: +{
      +  "description": "Priority reference.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Priority ID",
      +      "title": "Id"
      +    },
      +    "key": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Priority key (e.g., 'critical', 'normal')",
      +      "title": "Key"
      +    }
      +  },
      +  "title": "IssuePriorityRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssueProjectRef
      Added value: +{
      +  "description": "Project configuration for an issue.",
      +  "properties": {
      +    "primary": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Primary project ID (shortId of the project)",
      +      "title": "Primary"
      +    },
      +    "secondary": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "integer"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Secondary project IDs (shortId of additional projects)",
      +      "title": "Secondary"
      +    }
      +  },
      +  "title": "IssueProjectRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssueSprintRef
      Added value: +{
      +  "description": "Sprint reference.",
      +  "properties": {
      +    "id": {
      +      "description": "Sprint ID",
      +      "title": "Id",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "id"
      +  ],
      +  "title": "IssueSprintRef",
      +  "type": "object"
      +}
    • addedInput schema / $defs / IssueTypeRef
      Added value: +{
      +  "description": "Issue type reference.",
      +  "properties": {
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Issue type ID",
      +      "title": "Id"
      +    },
      +    "key": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Issue type key (e.g., 'bug', 'task')",
      +      "title": "Key"
      +    }
      +  },
      +  "title": "IssueTypeRef",
      +  "type": "object"
      +}
    • removedInput schema / $defs / IssueUpdateFollower
      Removed value: -{
      -  "description": "Follower reference for issue update.",
      -  "properties": {
      -    "id": {
      -      "description": "User ID or login",
      -      "title": "Id",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "id"
      -  ],
      -  "title": "IssueUpdateFollower",
      -  "type": "object"
      -}
    • removedInput schema / $defs / IssueUpdateParent
      Removed value: -{
      -  "description": "Parent issue reference for issue update.",
      -  "properties": {
      -    "id": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Parent issue ID",
      -      "title": "Id"
      -    },
      -    "key": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Parent issue key (e.g., 'QUEUE-123')",
      -      "title": "Key"
      -    }
      -  },
      -  "title": "IssueUpdateParent",
      -  "type": "object"
      -}
    • removedInput schema / $defs / IssueUpdatePriority
      Removed value: -{
      -  "description": "Priority reference for issue update.",
      -  "properties": {
      -    "id": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Priority ID",
      -      "title": "Id"
      -    },
      -    "key": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Priority key (e.g., 'critical', 'normal')",
      -      "title": "Key"
      -    }
      -  },
      -  "title": "IssueUpdatePriority",
      -  "type": "object"
      -}
    • removedInput schema / $defs / IssueUpdateProject
      Removed value: -{
      -  "description": "Project configuration for issue update.",
      -  "properties": {
      -    "primary": {
      -      "anyOf": [
      -        {
      -          "type": "integer"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Primary project ID (shortId of the project)",
      -      "title": "Primary"
      -    },
      -    "secondary": {
      -      "anyOf": [
      -        {
      -          "items": {
      -            "type": "integer"
      -          },
      -          "type": "array"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Secondary project IDs (shortId of additional projects)",
      -      "title": "Secondary"
      -    }
      -  },
      -  "title": "IssueUpdateProject",
      -  "type": "object"
      -}
    • removedInput schema / $defs / IssueUpdateSprint
      Removed value: -{
      -  "description": "Sprint reference for issue update.",
      -  "properties": {
      -    "id": {
      -      "description": "Sprint ID",
      -      "title": "Id",
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "id"
      -  ],
      -  "title": "IssueUpdateSprint",
      -  "type": "object"
      -}
    • removedInput schema / $defs / IssueUpdateType
      Removed value: -{
      -  "description": "Issue type reference for issue update.",
      -  "properties": {
      -    "id": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Issue type ID",
      -      "title": "Id"
      -    },
      -    "key": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Issue type key (e.g., 'bug', 'task')",
      -      "title": "Key"
      -    }
      -  },
      -  "title": "IssueUpdateType",
      -  "type": "object"
      -}
    • addedInput schema / properties / assignee
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "New assignee login or UID",
      +  "title": "Assignee"
      +}
    • addedInput schema / properties / components
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/IssueComponentRef"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Queue components. Array of objects with either 'id' (numeric component ID, from queue_get_metadata with expand=['components']) or 'name' (component name). Tracker resolves numbers as IDs and strings as names, so the object form is required to avoid a 422 on a numeric-looking name. Replaces the current component list.",
      +  "title": "Components"
      +}
    • changedInput schema / properties / fields / description
      Previous value: -"Additional fields to update. Use queue_get_fields to discover available fields. Use the field's 'id' property as the key (e.g., {'fieldId': 'value'})."New value: +"Additional fields to update, for fields without a dedicated parameter above. Call `queue_get_fields` for the fields configured on the queue and `get_global_fields` for the whole registry - system fields such as `parent` or `estimation` are settable but may be missing from the queue listing. Keys are Tracker field ids as those tools return them (camelCase, e.g. 'storyPoints'), which is also how they come back in issue responses. An entry here overrides the dedicated parameter of the same name, which is how a field is cleared: pass null (e.g. {'assignee': null, 'parent': null}), since a dedicated parameter left unset simply is not sent. Values are sent to Tracker as-is: reference fields expect numeric IDs as numbers (or {'id': ...} objects), because a bare string may be resolved as a name."
    • changedInput schema / properties / followers / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "$ref": "#/$defs/IssueUpdateFollower"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "$ref": "#/$defs/IssueFollowerRef"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / followers / description
      Previous value: -"Issue followers/watchers. Array of objects, each with 'id' field containing the user ID or login."New value: +"Issue followers/watchers. Array of objects, each with an 'id' field holding the user ID (uid) or login. Replaces the current follower list."
    • changedInput schema / properties / parent / anyOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/IssueUpdateParent"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/IssueParentRef"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / parent / description
      Previous value: -"Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123')."New value: +"Parent issue reference. Object with 'id' (parent issue ID) and/or 'key' (parent issue key like 'QUEUE-123'); when both are given Tracker resolves by 'id', or the bare key."
    • addedInput schema / properties / parent / title
      Added value: +"Parent"
    • changedInput schema / properties / priority / anyOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/IssueUpdatePriority"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/IssuePriorityRef"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / priority / description
      Previous value: -"Issue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'). Use get_priorities to find available priorities."New value: +"Issue priority. Object with 'id' (priority ID) and/or 'key' (priority key like 'critical', 'normal'), or the bare key/ID. Use get_priorities to find available priorities."
    • addedInput schema / properties / priority / title
      Added value: +"Priority"
    • changedInput schema / properties / project / anyOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/IssueUpdateProject"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/IssueProjectRef"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / sprint / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "$ref": "#/$defs/IssueUpdateSprint"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "$ref": "#/$defs/IssueSprintRef"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / type / anyOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/IssueUpdateType"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/IssueTypeRef"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / type / description
      Previous value: -"Issue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'). Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue."New value: +"Issue type. Object with 'id' (type ID) and/or 'key' (type key like 'bug', 'task'), or the bare key/ID. Use `queue_get_metadata` tool with expand=['issueTypesConfig'] to get available issue types in this queue."
    • addedInput schema / properties / type / title
      Added value: +"Type"
    • changedInput schema / properties / version / description
      Previous value: -"Issue version for optimistic locking. Changes are only made to the current version of the issue. Always try to receive issue's version using issue_get tool first."New value: +"Issue version for optimistic locking; changes are only applied when it is the issue's current version, otherwise the call fails with an editing conflict. Read it with issue_get immediately before updating, and omit it when you just want the update to land on whatever the latest version is. The version returned by issue_create is not safe to use here: queue triggers and automation bump it right after creation."
  3. Addedv0.6.3

TDQS

A3.8/5.0
Behavior4/5

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

With only readOnlyHint=false in annotations, the description adds meaningful behavioral detail: only passed parameters change, and version is an optional optimistic-locking mechanism with a caution about using the version from issue_create due to triggers. This goes beyond the minimal mutation signal provided by annotations.

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

Conciseness5/5

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

The description is three concise sentences with the core purpose front-loaded first, followed by the partial-update semantics and the most important operational caveats. Every sentence adds value and there is no redundant or filler content.

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 15-parameter update tool, the description covers the critical behavioral semantics: partial update, field discovery, and optimistic locking. The output schema exists, so return-value details are not needed, though a bit more explicit guidance on when to prefer sibling tools would make it fully complete.

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%, so the schema already documents all parameters thoroughly. The description reinforces the version guidance and points to queue_get_fields, but it does not add substantial new parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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 description states a clear verb and resource: 'Update an existing Yandex Tracker issue,' and the partial-update sentence clarifies the operation's semantics. It does not explicitly name or contrast sibling tools like issue_create or issue_execute_transition, so it stops short of full sibling differentiation.

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 description gives useful operational guidance such as using queue_get_fields to discover fields and reading the version with issue_get before updating. It does not explicitly state when this tool should be preferred over alternatives or when it should not be used, leaving usage context mostly implied.

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