Mcp Await

io.github.ricardo-hdrnPublished by GitHub account ricardo-hdrnv0.1.3Updated Oct 24, 2026

Condition watcher for AI assistants — wait for ports, files, URLs, processes, and more

VerifiedSTDIODesktop onlyCloud & InfrastructureDeveloper Tools

Overview

AI-generated overview

A local MCP server and CLI that lets an assistant wait for a condition — a port, file event, URL status, process, Docker container, GitHub Actions run or shell-

What you can do
Wait for network and service readiness: TCP ports and URLs with an expected HTTP status, optionally non-blocking with a watch ID and resource URI for later retrieval or cancellation.
When to use it
Use it when an assistant needs to wait for a service, deployment, file, process, container or CI run before continuing, instead of writing sleep or retry loops that waste round-trips.
Requirements
Runs as a local process on the user's machine, installed from a prebuilt binary, crates.io or source. Some tools need external programs on the PATH: curl for URL waits, docker for container waits and gh for GitHub Actions waits. No accounts, API keys or environment variables are declared.
Before you install
The command wait tool re-runs an arbitrary shell command via sh -c until it exits 0, so it executes whatever the assistant supplies on the local machine. URL waits make outbound network requests, and GitHub Actions waits use the local gh credentials. Non-blocking watches keep running in the background until they finish or are cancelled.

Installation

In SourceWeft

  1. Open Mcp Await in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-await

[crates.io] [CI] [license]

Condition watcher MCP server + CLI for AI CLI assistants (Claude Code, Codex, Cursor, etc.).

Instead of polling with sleep loops and curl --retry that waste API round-trips, call a wait tool once — it blocks until the condition is met and returns the result.

[demo]

Installation

bash
# Prebuilt binary (Linux, macOS, Windows) — download from GitHub Releases# https://github.com/ricardo-hdrn/mcp-await/releases/latest
# From crates.iocargo install mcp-await
# From sourcegit clone https://github.com/ricardo-hdrn/mcp-await.gitcd mcp-awaitcargo build --release

Quick Start

bash
# Wait for a service to be readymcp-await port localhost 8080 --timeout 30
# Wait for a file to appearmcp-await file /tmp/deploy.lock --event create --timeout 60
# Wait for a command to succeedmcp-await cmd "curl -sf http://localhost:8080/health" --interval 2 --timeout 30

Tools

ToolKey ParamsHow it watches
wait_for_porthost, portTCP dial loop, 500ms interval
wait_for_filepath, event (create/modify/delete)inotify via notify crate, no polling
wait_for_urlurl, expected_status (default 200)curl loop, 2s interval (requires curl)
wait_for_pidpid/proc/{pid} check, 500ms interval
wait_for_dockercontainerdocker wait (requires docker)
wait_for_gh_runrun_id, repo (optional)gh run watch (requires gh)
wait_for_commandcommand, interval_seconds (default 5)Re-run via sh -c until exit 0
cancel_watchwatch_idCancels a non-blocking watch

All tools accept timeout_seconds (default: 300) and blocking (default: true).

CLI Usage

The binary doubles as a standalone CLI tool:

bash
# TCP portmcp-await port localhost 5432 --timeout 30
# File eventsmcp-await file /var/log/app.log --event modify --timeout 120mcp-await file /tmp/flag --event create --timeout 60mcp-await file /tmp/old.pid --event delete --timeout 30
# HTTP statusmcp-await url https://api.example.com/health --status 200 --timeout 120
# Process exitmcp-await pid 12345 --timeout 300
# Docker container exitmcp-await docker my-container --timeout 600
# GitHub Actions runmcp-await gh-run 12345678 --repo owner/repo --timeout 1800
# Arbitrary shell command (exit 0 = success)mcp-await cmd "test -f /tmp/ready" --interval 2 --timeout 30

Exit Codes

CodeMeaning
0Condition met (success)
1Timeout
2Error

Output Format

All commands output JSON:

json
{  "status": "success",  "elapsed_seconds": 1.23,  "detail": "localhost:8080 is accepting connections"}

MCP Server Setup

Claude Code

Add to ~/.claude.json:

json
{  "mcpServers": {    "await": {      "command": "/path/to/mcp-await"    }  }}

The binary runs as a stdio MCP server when invoked without a subcommand (or with mcp-await serve).

MCP Inspector

bash
npx @modelcontextprotocol/inspector ./target/release/mcp-await

Blocking vs Non-Blocking Mode

Blocking (default)

The tool call holds until the condition is met, times out, or is cancelled. This is the simplest mode — the AI assistant waits for the result.

Non-Blocking

Set blocking: false to get an immediate response with a watch_id and resource URI. The server monitors in the background and pushes a notification when done.

Flow:

  1. Call wait_for_port with blocking: false
  2. Get back immediately:
    json
    {"watch_id": "port-1", "resource": "watch://port-1", "status": "watching"}
  3. Do other work while waiting
  4. Receive notifications/resources/updated when the condition is met
  5. Read watch://port-1 for the full result

Cancellation

Cancel any non-blocking watch with cancel_watch:

json
{"watch_id": "port-1"}

Resources

Non-blocking watches are exposed as MCP resources at watch://{watch_id}.

  • list_resources — returns all active and completed watches
  • read_resource("watch://port-1") — returns JSON with the watch status and result

Reinforcing Agent Usage

Agents sometimes fall back to shell workarounds instead of using mcp-await. Add a snippet to your project's agent instructions file to reinforce the behavior:

AgentInstructions file
Claude CodeCLAUDE.md
CodexAGENTS.md
Gemini CLIGEMINI.md
Cursor.cursor/rules/
Windsurf.windsurfrules
markdown
## Waiting for conditions
Use mcp-await tools instead of shell workarounds:- `wait_for_port` instead of `while ! nc ...; do sleep 1; done`- `wait_for_url` instead of `curl --retry`- `wait_for_file` instead of polling loops- `wait_for_command` instead of `while ! cmd; do sleep N; done`
Prefer `blocking: false` when there is independent work to do in parallel.

Roadmap

  • Agent-level instructions to enforce mcp-await usage across all agents (system prompts, tool metadata hints)
  • Broader agent compatibility testing (Codex, Gemini CLI, Cursor, Windsurf)

Development

bash
cargo build           # debug buildcargo build --release # release buildcargo test            # run testscargo clippy          # lintcargo fmt             # format

License

MIT

Source: README.md at commit 8dbd6d0

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.3LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts