Skip to main content
Glama

NotifyMCP

NotifyMCP is a small FastMCP server that lets an agent publish messages to a configured MQTT topic.

It is intended to pair with the NotifyMQTT Android app: an agent calls the MCP tool, NotifyMCP publishes to MQTT, and NotifyMQTT turns that MQTT message into a phone notification.

NotifyMCP can run either directly with uvx or as a Docker container pulled from Docker Hub.

Tools

publish_message

Publishes a message to the MQTT topic configured by environment variables.

Arguments:

  • message — message payload to publish.

  • qos — MQTT QoS level, defaults to 1.

  • retain — whether to publish as a retained MQTT message, defaults to false.

get_mqtt_config

Returns the configured MQTT target without exposing the password.

Related MCP server: MQTT MCP Server

Environment variables

Required:

Variable

Description

MQTT_URL

Broker URL. Supports mqtt://, tcp://, mqtts://, and ssl://.

MQTT_TOPIC

Topic to publish all agent messages to.

Optional:

Variable

Description

MQTT_USERNAME

MQTT username. Leave blank for anonymous brokers.

MQTT_PASSWORD

MQTT password. Leave blank for anonymous brokers.

MQTT_KEEPALIVE_SECONDS

MQTT keepalive. Defaults to 30.

MQTT_PUBLISH_TIMEOUT_SECONDS

Publish wait timeout. Defaults to 10.

mqtt:// and tcp:// default to port 1883. mqtts:// and ssl:// default to port 8883 and enable TLS.

Run with uvx from GitHub

You can run the MCP server directly from the GitHub repo with uvx:

export MQTT_URL="mqtt://192.168.1.10:1883"
export MQTT_USERNAME=""
export MQTT_PASSWORD=""
export MQTT_TOPIC="notify/test"

uvx --from git+https://github.com/mbush91/NotifyMCP notifymcp

For a fixed version, use a tag or commit:

uvx --from git+https://github.com/mbush91/NotifyMCP@v0.1.0 notifymcp

Run from Docker Hub

After the Docker Hub publish workflow has run, pull and run the image:

docker pull <dockerhub-username>/notifymcp:latest

docker run --rm -i \
  -e MQTT_URL="mqtt://192.168.1.10:1883" \
  -e MQTT_USERNAME="" \
  -e MQTT_PASSWORD="" \
  -e MQTT_TOPIC="notify/test" \
  <dockerhub-username>/notifymcp:latest

The container runs the MCP server over stdio, so keep -i when using it from an MCP host.

Docker Hub publishing

The Docker Hub Publish GitHub Actions workflow pushes images on:

  • pushes to main as latest and sha-<commit>

  • tags like v0.1.0 as semver Docker tags

  • manual workflow_dispatch runs

Configure these repository secrets in GitHub before publishing:

Secret

Description

DOCKERHUB_USERNAME

Docker Hub username or organization.

DOCKERHUB_TOKEN

Docker Hub access token.

The image name will be:

DOCKERHUB_USERNAME/notifymcp

Example MCP client config: uvx

{
  "mcpServers": {
    "notifymcp": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/mbush91/NotifyMCP",
        "notifymcp"
      ],
      "env": {
        "MQTT_URL": "mqtt://192.168.1.10:1883",
        "MQTT_USERNAME": "",
        "MQTT_PASSWORD": "",
        "MQTT_TOPIC": "notify/test"
      }
    }
  }
}

Example MCP client config: Docker

{
  "mcpServers": {
    "notifymcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MQTT_URL=mqtt://192.168.1.10:1883",
        "-e",
        "MQTT_USERNAME=",
        "-e",
        "MQTT_PASSWORD=",
        "-e",
        "MQTT_TOPIC=notify/test",
        "<dockerhub-username>/notifymcp:latest"
      ]
    }
  }
}

Local development

uv sync --extra dev
uv run ruff check .
uv run pytest
uv build
docker build -t notifymcp:local .

You can also smoke-test the local checkout through uvx:

uvx --from . notifymcp

Available Tools

2 tools
get_mqtt_configA

Return the configured MQTT target, excluding secrets.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does mention that secrets are excluded, which is a useful redaction behavior, but does not describe other traits like whether it requires authentication or what happens if no config is set.

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 a single, compact sentence with no filler. It is front-loaded with the verb and resource, making it easy to scan, and every word earns its place.

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 simplicity (no params, output schema exists), the description is largely sufficient. It clearly states what is returned and an important caveat (secrets excluded). It could be slightly more complete by mentioning when to use it, but overall it is adequate.

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?

There are zero parameters, so the input schema fully covers the parameter side (baseline 4). The description adds a little semantic value about the output scope ('MQTT target, excluding secrets'), but it is not required for parameters.

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 uses a specific verb ('Return') with a clear resource ('configured MQTT target') and adds a key qualifier ('excluding secrets'). It distinguishes itself from the sibling publish_message by clearly being a read operation for configuration.

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 implies its use case (reading MQTT config) but does not explicitly state when to use it over alternatives or any exclusions. The sibling publish_message is different, but no direct comparison or guidance is provided.

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

publish_messageB

Publish a message to the configured MQTT topic.

The broker URL, username, password, and topic are configured through the container environment: MQTT_URL, MQTT_USERNAME, MQTT_PASSWORD, MQTT_TOPIC.

ParametersJSON Schema
NameRequiredDescriptionDefault
qosNo
retainNo
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure. It indicates a publish operation (an outgoing side effect) but does not mention potential message loss semantics, delivery guarantees based on QoS, failure behavior, or whether the call returns an acknowledgment. This is a significant transparency gap for a mutation tool.

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 two sentences, front-loaded with the core purpose, and the second sentence adds necessary configuration context. Every word earns its place with no redundancy or fluff.

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

Completeness2/5

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

Despite having an output schema, the description is incomplete for a tool with 3 parameters and an external side effect. It lacks parameter semantics and behavioral details, so an agent would not know how to craft a correct message or interpret QoS/retain values. The configuration note is helpful but insufficient for full operational understanding.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no information about the parameters (message, qos, retain). It does not explain what 'message' content should contain, what QoS values are accepted, or how retain behaves. The description adds zero value beyond the schema's bare property names.

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 clearly states the tool's action—'Publish a message to the configured MQTT topic'—with a specific verb and resource. This distinguishes it from the sibling tool get_mqtt_config, which retrieves configuration rather than sending data.

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 provides clear context by noting that broker connection settings are pre-configured via environment variables, so the agent understands no connection parameters are needed. However, it does not explicitly mention when to use this tool versus get_mqtt_config or any exclusion scenarios, so it falls short of a perfect score.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.0
    • First observedget_mqtt_config
    • First observedpublish_message

TDQS

A3.9/5.0
Disambiguation5/5

publish_message and get_mqtt_config have clearly distinct purposes: one sends a message, the other reads configuration. There is no overlap or ambiguity between the two tools.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern: 'publish_message' and 'get_mqtt_config'. The naming is uniformly action-first and predictable.

Tool Count4/5

With only 2 tools, the set is minimal but appropriate for the server's narrow purpose of MQTT notification publishing. It could arguably include a test-connection tool, but the count is reasonable for the scope.

Completeness5/5

The domain is focused on publishing messages to a configured MQTT topic and checking configuration. Providing both an action and a config inspection covers the essential operations without obvious gaps.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLM agents to interact with MQTT brokers through publish, subscribe, and query operations. Provides fine-grained topic permissions with wildcard support for secure IoT device communication and sensor data access.
    1
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides MQTT communication capabilities for Large Language Models and other clients, enabling connections to MQTT brokers, publishing and subscribing to topics, and managing real-time messaging workflows.
    -

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/mbush91/NotifyMCP'

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