Skip to main content
Glama

Publish a notification

publish_message

Send notifications to one or more ntfy topics with per-topic success reports, so a rejected topic doesn't discard successful ones. Returns a sequence ID to update the same notification in place.

Instructions

Sends a notification to one or more topics.

ntfy has no multi-topic publish, so this sends one request per topic and reports each outcome separately — a rejection on one topic does not discard the ones that succeeded. Check the "ok" field per entry rather than assuming the whole call worked.

The returned id is also the notification's sequence id: pass it to update_message to revise this notification in place, which is how a progress report stays one notification instead of five.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
iconNoURL of a JPEG or PNG icon.
tagsNoTags as separate entries. Names that match an emoji short code (for example "warning", "rocket") are rendered as that emoji.
cacheNoSet false to keep the message out of the server cache. It then reaches only clients connected at that moment, and cannot be updated or deleted afterwards.
clickNoURL opened when the notification itself is tapped.
delayNoDeliver later: a duration such as "30m", a Unix timestamp, or natural language like "tomorrow, 10am". Between 10 seconds and 3 days.
titleNoThe notification title.
attachNoURL of a file to attach by reference.
topicsNoTopics to publish to. Defaults to the first NTFY_TOPICS entry.
actionsNoUp to 3 action buttons. An "http" action fires from the recipient's device, not from the server, and defaults to POST.
messageNoThe notification body.
filenameNoDownload name for the attachment.
firebaseNoSet false to skip forwarding via Firebase.
markdownNoRender the message as Markdown in clients that support it.
priorityNo1 (min) to 5 (max), or "min"/"low"/"default"/"high"/"max".

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
failedYesTopics that refused it.
resultsYes
publishedYesTopics that accepted it.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.2.0

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses non-obvious behavior beyond annotations: one request per topic, partial failure semantics, the need to check each 'ok' field, and the returned id also being the sequence id usable with update_message. This is the kind of behavioral context that prevents an agent from assuming atomicity or misinterpreting the result.

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?

Three tight paragraphs, each earning its place: one for the purpose, one for the critical partial-failure behavior, and one for the id/update workflow. The most important caveat is front-loaded in the second paragraph before any deeper detail. No filler or redundant restatement of schema content.

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?

For a 14-parameter tool with no required parameters and an output schema, the description appropriately focuses on what the schema cannot convey: non-atomic multi-topic publishing, per-topic result checking, and the relationship between returned ids and update_message. The output schema covers return values, and the input schema covers parameters, so the description fills the remaining semantic gaps.

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 14 parameters, including defaults, formats, and enums. The description adds no additional parameter-specific meaning; it focuses on return behavior and multi-topic semantics. With full schema coverage, the baseline of 3 is appropriate.

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 first sentence states a specific verb and resource: 'Sends a notification to one or more topics.' This is immediately distinguishable from sibling tools like get_message, delete_messages, or update_message, and the rest of the description clarifies its publish-oriented role by referencing update_message as a revision step rather than a publishing alternative.

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 clear context for using this tool: ntfy lacks multi-topic publish, so it sends per-topic requests and reports outcomes separately. It also explicitly routes follow-up revisions to update_message, explaining a concrete workflow. It does not list exclusions or when-not-to-use scenarios, but the purpose is clear enough and the update_message guidance provides practical selection context.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ni-c/ntfy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server