Skip to main content
Glama

Mark articles

mark_articles
DestructiveIdempotent

Update article states by marking as read, starring, or adding/removing labels. Requires confirmation token for irreversible read actions; verify results with unread counts.

Instructions

Sets the read state, the star and user labels of specific articles. Starring and labelling are reversible by calling this tool again with the opposite value. Marking as read is not, so read=true asks a person first; where the client cannot show a dialog, call once to receive a token and again with it. At most 100 articles per call; every given change is applied to all of them.

FreshRSS answers OK whether or not it recognised the ids, so the result of this tool cannot tell you the change landed. Use the ids exactly as list_article_ids returned them — not the long tag:google.com,... form — and confirm with get_unread_counts if it matters: the count is the only thing that moves.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
readNotrue marks as read, false marks as unread
starredNotrue adds the star (favourite), false removes it
add_labelsNoUser labels to attach; unknown labels are created
article_idsYesArticle ids as returned by list_articles
confirm_tokenNoToken from the first call of this tool
remove_labelsNoUser labels to detach

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
changesYes
updatedYes
articleIdsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv0.3.2
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / properties / add_labels / items / maxLength
      Added value: +200
    • addedInput schema / properties / add_labels / maxItems
      Added value: +50
    • addedInput schema / properties / article_ids / items / maxLength
      Added value: +64
    • addedInput schema / properties / confirm_token
      Added value: +{
      +  "description": "Token from the first call of this tool",
      +  "type": "string"
      +}
    • addedInput schema / properties / remove_labels / items / maxLength
      Added value: +200
    • addedInput schema / properties / remove_labels / maxItems
      Added value: +50
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "articleIds": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "changes": {
      +      "type": "string"
      +    },
      +    "updated": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "updated",
      +    "articleIds",
      +    "changes"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.1

TDQS

A5/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining real behavioral nuances: read changes are irreversible, starring/labelling are reversible, the tool always responds 'OK' regardless of whether ids were recognized, and confirmation requires get_unread_counts. This is exactly the kind of side-effect detail an agent needs.

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 dense but every sentence carries necessary operational guidance, and the most important action and constraints are front-loaded. No filler or redundant explanation is present.

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

Completeness5/5

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

Given the output schema exists, the description covers the essential behavioral context: idempotency, destructive irreversibility, the confirmation token, the OK-response ambiguity, and the recommended follow-up via get_unread_counts. An agent has enough context to invoke this tool correctly and safely.

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

Parameters5/5

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

Although the schema already covers all parameters, the description adds critical semantics not present in the schema: unknown labels are created, confirm_token comes from the first call, and article_ids must use the short form returned by list_articles. These clarifications materially improve correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Sets') and a specific resource ('read state, the star and user labels of specific articles'), making the tool's purpose unmistakable. It also distinguishes itself from related operations by noting the 100-article limit and pointing to get_unread_counts for confirmation.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: marking individual articles, using exact ids from list_article_ids, and confirming with get_unread_counts when the outcome matters. It also explains the token flow for read=true, which is essential for correct invocation.

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