NotifyMCP
Allows publishing messages to an MQTT broker via the publish_message tool, enabling agents to send notifications or data to MQTT topics.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NotifyMCPpublish a message 'Deployment finished successfully'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 to1.retain— whether to publish as a retained MQTT message, defaults tofalse.
get_mqtt_config
Returns the configured MQTT target without exposing the password.
Related MCP server: MQTT MCP Server
Environment variables
Required:
Variable | Description |
| Broker URL. Supports |
| Topic to publish all agent messages to. |
Optional:
Variable | Description |
| MQTT username. Leave blank for anonymous brokers. |
| MQTT password. Leave blank for anonymous brokers. |
| MQTT keepalive. Defaults to |
| Publish wait timeout. Defaults to |
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 notifymcpFor a fixed version, use a tag or commit:
uvx --from git+https://github.com/mbush91/NotifyMCP@v0.1.0 notifymcpRun 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:latestThe 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
mainaslatestandsha-<commit>tags like
v0.1.0as semver Docker tagsmanual
workflow_dispatchruns
Configure these repository secrets in GitHub before publishing:
Secret | Description |
| Docker Hub username or organization. |
| Docker Hub access token. |
The image name will be:
DOCKERHUB_USERNAME/notifymcpExample 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 . notifymcpAvailable Tools
2 toolsget_mqtt_configA
Return the configured MQTT target, excluding secrets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| qos | No | ||
| retain | No | ||
| message | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.1.0- First observed
get_mqtt_config - First observed
publish_message
TDQS
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.
Both tools follow a consistent verb_noun pattern: 'publish_message' and 'get_mqtt_config'. The naming is uniformly action-first and predictable.
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.
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
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
Let agents send content-free push notifications to a paired phone via MCP.
- mcp-serverOAuthnet.vybit
Push notifications with personalized sounds - manage and trigger your vybits via MCP
Push notifications for AI agents - send instant iPhone notifications from any MCP client.
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.1BSD 3-Clause
- FlicenseAqualityDmaintenanceEnables interacting with MQTT brokers to publish, subscribe, and manage connections, with a real-time web UI for visual feedback.61-
- FlicenseNot gradedqualityDmaintenanceProvides 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.-
- AlicenseAqualityCmaintenanceLets you send push notifications to your phone via ntfy, enabling alerts from scheduled tasks or direct messages.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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