Skip to main content
Glama
vakandi

mcp-macos-popup

by vakandi

mcp-macos-popup

MCP server for native macOS popup notifications, with multi-screen support.

It shows dark glassy popup cards on macOS and lets an AI agent target a specific display. On multi-monitor setups, it can list every screen and return the screen that currently has focus.

Tools

  • show_popup — quick notification popup

  • show_docs — larger Markdown popup

  • dismiss_all_popups — close all popups

  • list_screens — list connected displays

  • get_focused_screen — return the focused display

show_popup and show_docs accept an optional screen argument: display id, index, label, primary, or focused.

Related MCP server: Automation MCP

Install

npm install -g mcp-macos-popup

Or run directly:

npx mcp-macos-popup

Electron is installed automatically as a dependency.

MCP configuration

{
  "mcpServers": {
    "macos-popup": {
      "command": "mcp-macos-popup"
    }
  }
}

Usage

mcp-cli call macos-popup show_popup '{"title":"Elia","message":"the answer","level":"info","duration":10}'
mcp-cli call macos-popup list_screens '{}'
mcp-cli call macos-popup get_focused_screen '{}'

Multi-screen

If four displays are connected, call list_screens or get_focused_screen first, then pass the chosen display id as screen:

mcp-cli call macos-popup show_popup '{"title":"Elia","message":"hello","screen":"focused"}'

Development

npm install
npm run daemon

Available Tools

5 tools
dismiss_all_popupsA

Immediately close every popup currently shown on screen.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. 'Immediately' usefully signals that dismissal is instantaneous and non-interactive (no per-popup confirmation), but it says nothing about what happens when no popups exist, whether the action is reversible, or whether it affects only the focused screen.

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?

A single, front-loaded sentence with no filler. Every word ('immediately', 'every', 'currently shown') contributes scope or timing information.

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?

For a zero-parameter, no-output tool this is nearly complete: the agent knows the effect, the scope, and the timing. The one gap is the no-popups edge case, which the description leaves unstated.

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?

The tool takes zero parameters, so the baseline is 4. The description correctly implies no targeting input is needed because all on-screen popups are handled.

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

Purpose4/5

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

Specific verb ('close') plus resource ('every popup currently shown on screen') with a clear scope qualifier. The 'every... currently shown' phrasing separates it from the sibling show_popup, though no sibling is named explicitly.

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 phrase 'currently shown on screen' implies the applicable situation (popups blocking the view), but there is no explicit when-to-use, no exclusion, and no reference to alternatives such as show_popup or get_focused_screen.

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

get_focused_screenA

Return the display that currently has focus, so a popup can be shown on the right screen.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a read operation returning the currently focused display and gives the intended downstream use, but it does not explain return shape, behavior when no display has focus, or any error conditions.

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?

A single front-loaded sentence with no wasted wording. The trailing purpose clause adds useful context without bloat.

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?

With no annotations and no output schema, the description should say more about what 'the display' contains or how to use it with show_popup. As written, an agent knows the high-level intent but not the return shape or edge-case behavior.

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?

The tool takes zero parameters, so there is nothing for the description to clarify. Baseline 4 applies.

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

Purpose4/5

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

The description uses a specific verb ('Return') and resource ('the display that currently has focus'), which clearly distinguishes it from list_screens. It does not explicitly name siblings, but the focused-vs-all distinction is clear enough.

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 phrase 'so a popup can be shown on the right screen' implies it should be called before show_popup, but there is no explicit when-to-use, when-not-to-use, or named alternative. Usage is inferable rather than stated.

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

list_screensA

List every connected macOS display, including ids, labels, sizes and which one is focused.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations and no output schema, the description does useful work by naming the returned fields (ids, labels, sizes, focused flag), which signals this is a non-mutating enumeration. However, it doesn't state whether display state can change mid-call, what 'focused' means if no display is focused, or any permission requirements.

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?

A single sentence with the resource and the payload described up front and zero filler. Every clause ('every connected display', the field list) carries information an agent needs.

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?

For a zero-parameter, no-output-schema tool, the description covers the return shape and scope well enough to call it correctly. The only remaining gap is the unaddressed relationship to get_focused_screen.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly frames this as a whole-system enumeration rather than a filtered query.

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

Purpose4/5

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

States a specific verb ('List') and resource ('every connected macOS display') and enumerates what each entry contains (ids, labels, sizes, focused flag). It is clear without opening the schema, though it doesn't explicitly distinguish itself from the sibling get_focused_screen, which returns a subset of the same information.

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?

Usage is only implied: an agent can infer this is the tool for enumerating all displays. There is no explicit statement of when to prefer it over get_focused_screen (which returns just the focused display) and no prerequisites or exclusions noted.

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

show_docsA

Show a larger documentation-style popup on Wael's macOS screen that renders MARKDOWN (headings, lists, code blocks, links, quotes). Use it to surface rich information: a summary report, API results, a changelog, key findings. Stays longer on screen than show_popup.

NameRequiredDescriptionDefault
levelNoAccent color: info/success/warning/error
titleYesTitle of the docs card
screenNoDisplay id, index, label, 'primary', or 'focused'. Omit for primary.
sourceNoOrigin chip label
durationNoSeconds before auto-dismiss (default 30, max 300)
markdownYesMarkdown content to render

TDQS

A3.9/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 and does add useful behavior: it auto-dismisses after a duration and persists longer than show_popup. However it never states that the popup is non-blocking, whether the user can dismiss it manually (dismiss_all_popups exists), or how it behaves when called repeatedly.

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?

Three tight sentences, capability first, use cases second, sibling differentiation last. No filler, though the parenthetical construct list is slightly verbose relative to its value.

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?

With no output schema and no annotations, the description covers purpose, content format, use cases, and the key comparison to its closest sibling. Remaining gaps are behavioral details (dismissal, blocking) rather than anything that would prevent a correct invocation.

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 all six parameters (level, title, screen, source, duration, markdown) are already documented with enum and defaults. The description adds no parameter-level detail beyond restating that markdown is rendered, so baseline 3 applies.

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?

Specific verb+resource: renders MARKDOWN in a documentation-style popup on the macOS screen, enumerating supported constructs (headings, lists, code blocks, links, quotes). It explicitly contrasts with the sibling show_popup ('stays longer on screen'), so an agent can distinguish the two without opening either 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?

Gives concrete use cases ('a summary report, API results, a changelog, key findings') and a relative rule versus show_popup. It stops short of an explicit 'use show_popup instead when...' exclusion or prerequisites, leaving the inverse inference implicit.

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

show_popupA

Show a quick notification popup on Wael's macOS screen via a native Electron window (dark glassy card, top-right, auto-dismiss). Use it to alert Wael of important information: task done, deploy finished, error found, etc.

NameRequiredDescriptionDefault
levelNoVisual severity: info (blue), success (green), warning (orange), error (red)
titleYesShort bold title of the popup
screenNoDisplay id, index, label, 'primary', or 'focused'. Omit for primary.
sourceNoOrigin chip label, e.g. 'Gilfoyle', 'Deploy'
messageNoNotification body text (plain text)
durationNoSeconds before auto-dismiss (default 8, max 300)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It usefully describes the transient native window, top-right placement, glassy card, and auto-dismiss behavior, but omits details like whether multiple popups stack, whether focus is stolen, and any macOS permission or notification-center requirements.

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?

Two tight sentences: the first front-loads the action and visual behavior, and the second gives usage guidance. There is no redundant restatement of schema fields or filler.

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?

For a six-parameter display-only tool with full schema coverage and no output schema, the description covers purpose and usage well enough to invoke correctly. It could be more complete by naming dismissal/stacking behavior or pointing to dismiss_all_popups, but those are minor 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 defines title, level, screen, source, message, and duration. The description adds no parameter-level detail beyond the implicit auto-dismiss duration and screen targeting; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb ('Show') and resource ('notification popup'), including platform and rendering context. It is clearly distinct from siblings like dismiss_all_popups and list_screens, though it does not explicitly differentiate itself from show_docs.

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 second sentence gives concrete use cases and a clear trigger: alerting Wael of important information such as task completion, deploy completion, or errors. It stops short of stating when not to use this tool or directing long-form content to show_docs.

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.

  1. 5 tool updatesv1.0.0
    • First observeddismiss_all_popups
    • First observedget_focused_screen
    • First observedlist_screens
    • First observedshow_docs
    • First observedshow_popup

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

show_popup vs show_docs are the closest pair, but descriptions clearly separate them by content type (quick notification vs markdown) and duration. list_screens and get_focused_screen overlap since list_screens already reports focus, making the focused-only tool somewhat redundant, but each still has a distinct intent.

Naming Consistency5/5

All five tools follow a clean snake_case verb_noun pattern (list_screens, get_focused_screen, dismiss_all_popups, show_popup, show_docs). No mixed conventions or camelCase deviations.

Tool Count5/5

Five tools is well-scoped for a popup-display server: enumerate screens, get the active screen, show a quick popup, show a rich popup, and dismiss all. Each earns its place with no filler.

Completeness4/5

Core lifecycle is covered: discover screens, target the focused one, show two popup styles, and clear them. Minor gaps exist—no individual popup dismissal (only dismiss_all_popups) and no way to list currently active popups.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides native macOS computer control tools including mouse and keyboard simulation, screenshot capture, and application management for MCP-compatible agents. It enables AI assistants to directly interact with the macOS operating system and installed apps through standard tool calls.
    24
    7 npm
    8
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to automate macOS desktop tasks including mouse control, keyboard input, screenshots, window management, and UI interaction.
    4 npm
    415
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to send desktop notifications on macOS with rich formatting, urgency levels, and sound options.
    1
    7 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides native macOS desktop automation for AI agents, enabling screen capture, mouse/keyboard control, window management, and iOS/Android simulator control in both foreground and background modes without focus stealing.
    3
    MIT