Skip to main content
Glama

Update monitor

update_monitor
DestructiveIdempotent

Change an active or paused monitor in place. Every field is optional; leave one out to keep it. Filter fields (from_contains, subject_contains, body_contains, account, from_excludes, subject_excludes, body_excludes) replace the current value, and an empty string clears it; the same rules as create_monitor apply, so at least one of from/subject/body must remain. Mail containing any word in from_excludes, subject_excludes or body_excludes (comma-separated) never matches; an empty string clears one. exclude_bulk true skips newsletters and promos (false stops); bulk_allow replaces the senders that still match, and an empty list clears it; account_excludes replaces the accounts skipped, and an empty list clears it. paused=true stops scanning without cancelling; paused=false resumes, and mail that arrived while paused is never matched. Pausing does not stop the clock. extend_hours adds time to the current end; expires_at (ISO 8601 with a time zone) sets it outright, any future date; expires_at 'never' removes the end date. notify_macos, notify_session, notify_ntfy and notify_codex switch that channel on or off for this monitor only. source switches what it watches ('mail', 'imessage', 'calls', 'whatsapp', 'notes', 'notifications' or 'any', as in create_monitor); a newly watched source starts from now. app changes a notifications monitor's app filter; channel, mentions_me, thread and dm change a Slack monitor's filter. Editing never replays mail already scanned. codex_thread (a Codex session's own CODEX_THREAD_ID) attaches this existing monitor to that conversation in place: matches recorded from now on are queued there, and it is the chat reopened when closed; its history and other channels are unchanged. wake_client picks which agent a match wakes when the session is closed ('origin' for the one that made it, or 'claude-code', 'codex', 'cursor', 'vscode', 'claude-desktop' for a new session of that agent, 'chatgpt' for a ChatGPT event subscription); set it only when the user asked. wake_mode picks how: 'interactive' (reopen it in the user's terminal), 'notify' (just tell the user) or 'default' (the Keeploop setting); set it only when the user asked or your own workflow needs it. Background wakes are app-only. background_connectors asks the user to let this monitor's background runs use more connectors, as in create_monitor; an empty list withdraws a request still waiting. Only the user can remove an approved one. slack picks where this monitor's Slack alerts go when the user has set up the Slack app: 'dm' (a direct message to the user), '#channel-name' (a channel the app was invited to), 'off', or 'default' (the Slack setting in Keeploop). track 'ask' sets a promise monitor (create_commitment_monitor) back to asking the user; only the user can choose 'auto', in Keeploop's Settings. routes replaces the monitor's check_route labels; an empty list clears them. From web and phone AI apps every change needs the Monitor permission, and only name, paused, extend_hours, expires_at, routes and track 'ask' can be changed; the filter, source and delivery options work only from an agent on the Mac. Requires Keeploop Pro.

Input Schema

NameRequiredDescriptionDefault
dmNo
appNo
nameNo
slackNo
tokenYes
trackNo
pausedNo
routesNoUp to 8 labels check_route reads this monitor's matches by, e.g. 'duet:fissler'. Lowercase letters, digits, '.', '_', ':' and '-'. A new monitor with routes has no Mac banner or ntfy push. Replaces the current routes; an empty list clears them.
sourceNo
threadNo
accountNo
channelNo
wake_modeNo
bulk_allowNoSenders that always pass exclude_bulk: parts of an address or name, e.g. ['dropbox.com', 'mybank']. Replaces the current list; an empty list clears it.
expires_atNo
include_ownNo
mentions_meNo
notify_ntfyNo
unread_onlyNo
wake_clientNo
codex_threadNo
exclude_bulkNoSkip newsletters, promos and other list or automated mail (by header). Off by default. false turns it off.
extend_hoursNo
notify_codexNo
notify_macosNo
body_containsNo
body_excludesNoSkip messages whose text contains any of these comma-separated words. An empty string clears it.
from_containsNo
from_excludesNoSkip senders containing any of these comma-separated words. An empty string clears it.
notify_sessionNo
account_excludesNoSkip mail in these accounts (names or addresses, as list_accounts shows). Replaces the current list; an empty list clears it.
subject_containsNo
subject_excludesNoSkip subjects containing any of these comma-separated words. An empty string clears it.
background_reasonNo
include_reactionsNo
background_connectorsNo

Output Schema

NameRequiredDescriptionDefault
noteNo
monitorYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / account_excludes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Skip mail in these accounts (names or addresses, as list_accounts shows). Replaces the current list; an empty list clears it.",
      +  "title": "Account Excludes"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / bulk_allow
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Senders that always pass exclude_bulk: parts of an address or name, e.g. ['dropbox.com', 'mybank']. Replaces the current list; an empty list clears it.",
      +  "title": "Bulk Allow"
      +}
    • addedInput schema / properties / exclude_bulk
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Skip newsletters, promos and other list or automated mail (by header). Off by default. false turns it off.",
      +  "title": "Exclude Bulk"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / wake_mode
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Wake Mode"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / routes / description
      Previous value: -"Up to 8 labels check_route reads this monitor's matches by, e.g. 'duet:fissler'. Lowercase letters, digits, '.', '_', ':' and '-'. Replaces the current routes; an empty list clears them."New value: +"Up to 8 labels check_route reads this monitor's matches by, e.g. 'duet:fissler'. Lowercase letters, digits, '.', '_', ':' and '-'. A new monitor with routes has no Mac banner or ntfy push. Replaces the current routes; an empty list clears them."
  5. Changed3 schema fields changed
    • addedOutput schema / $defs / MonitorInfo / properties / moved_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Moved From"
      +}
    • addedOutput schema / $defs / MonitorInfo / properties / other_worktree_monitors
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Other Worktree Monitors"
      +}
    • addedOutput schema / $defs / MonitorInfo / properties / other_worktree_note
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Other Worktree Note"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / include_reactions
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Include Reactions"
      +}
  7. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses replacement-versus-clear semantics, no-replay behavior, pause-clock behavior, source-switch behavior, permission constraints, and that only the user can remove certain approvals. It also states that web and phone apps have a restricted subset of changeable fields and that Keeploop Pro is required. This is rich behavioral context that annotations alone would not provide.

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?

The description is long, but the length is driven by a 36-parameter update tool with many special cases, and the core rule is front-loaded. Most sentences add needed semantics, though the single dense paragraph and repeated boundary cases such as empty-string clearing reduce readability.

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?

Given the tool's complexity, the existing output schema, and the annotations, the description is nearly complete: it covers permissions, platform restrictions, destructive replacement behavior, and the main field semantics. It still omits a handful of parameters and background_reason, which keeps it from being fully comprehensive.

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

Parameters4/5

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

Schema description coverage is only 19%, so the description must carry most parameter meaning, and it does so for most complex fields: filter replacement and exclusion rules, bulk allow, account excludes, expires_at, source, wake fields, Slack delivery, routes, and track. It leaves a few parameters such as include_own, unread_only, include_reactions, and background_reason unexplained, so it is strong but not complete.

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 opens with a specific verb and resource: "Change an active or paused monitor in place." It immediately distinguishes an in-place update from creation or cancellation, and the optional-field rule makes the operation's scope clear. An agent can identify this as the monitor-editing tool without opening the schema.

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?

The description gives strong conditional usage guidance, such as setting wake_client and wake_mode only when the user asked, the web/phone permission limits, and which fields work only from the Mac agent. It does not explicitly compare this tool to siblings like cancel_monitor or create_email_monitor, but the conditions for using specific options are unusually clear.

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.