{
  "markdown": "<div align=\"center\">\n\n<img src=\".github/banner.svg\" alt=\"LastPing\" width=\"100%\">\n\n\n[![MIT](https://img.shields.io/badge/license-MIT-0f766e)](LICENSE)\n[![Go](https://img.shields.io/badge/go-1.26-0f766e)](go.mod)\n[![Terraform](https://img.shields.io/badge/terraform-lastping--dev%2Flastping-0f766e)](https://registry.terraform.io/providers/lastping-dev/lastping/latest)\n[![Free](https://img.shields.io/badge/free_for_individuals-0f766e)](https://lastping.dev)\n\n</div>\n\n---\n\nMost monitoring watches a thing and tells you when it looks wrong. LastPing\nwaits for a thing to check in and tells you when it doesn't. That inversion is\nthe whole product: **a job that breaks can't send you an error, but it can fail\nto send you anything** — and absence is the one signal a broken process can\nstill produce.\n\nThis repository holds the open-source pieces: the `lastping` CLI and the MCP\nserver. The hosted service they talk to is at **[lastping.dev](https://lastping.dev)**,\nfree for individuals.\n\n## Install\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/tp322d/lastping-app/main/install.sh | sh\n```\n\nNo Go toolchain needed — that pulls a prebuilt binary for macOS and Linux, on\namd64 and arm64, and verifies its checksum. Windows builds are on the\n[releases page](https://github.com/tp322d/lastping-app/releases).\n\nIf you do have Go:\n\n```sh\ngo install github.com/tp322d/lastping-app/cmd/lastping@latest\n```\n\n## `lastping run` — reporting you can't forget\n\nPut it in front of whatever you already run:\n\n```sh\nlastping run --monitor <monitor-id> -- python nightly_etl.py\nlastping run --monitor <monitor-id> -- ./backup.sh\nlastping run --monitor <monitor-id> -- claude\n```\n\nIt sends a start ping, runs your command untouched, and reports the exit code\nwhen it finishes — success on 0, failure on anything else, with the tail of\nstderr attached so the alert says *why*.\n\nThree properties worth knowing, because they are the difference between a\nmonitoring wrapper you can trust in production and one you remove after a bad\nnight:\n\n- **Your exit code always propagates.** The wrapper exits with whatever your\n  command exited with, so CI behaves exactly as it did before you added it.\n- **A failed ping never touches your command.** If LastPing is unreachable, your\n  job still runs, still writes its output, still exits normally.\n- **Interactive stays interactive.** stdin and stdout are handed over as file\n  descriptors, so wrapping a REPL or an agent session works.\n\nWhy a wrapper rather than an instruction? Because anything advisory decays. An\nAI agent told to report on every task will stop doing it, and a cron line you\nmeant to add a `curl` to never gets it. A wrapper reports from the process\nlifecycle, so nothing depends on anybody remembering.\n\n## MCP server — let an agent set up its own monitoring\n\n```jsonc\n// claude_desktop_config.json, .mcp.json, or your client's equivalent\n{\n  \"mcpServers\": {\n    \"lastping\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://mcp.lastping.dev/mcp\",\n               \"--header\", \"Authorization: Bearer ${LASTPING_API_KEY}\"],\n      \"env\": { \"LASTPING_API_KEY\": \"lp__your_key_here\" }\n    }\n  }\n}\n```\n\nThe hosted server is the recommended path — nothing to install, and it always\ncarries the current tool set.\n\nA stdio binary is also here if you would rather run it yourself:\n\n```sh\ngo install github.com/tp322d/lastping-app/cmd/lastping-mcp@latest\n```\n\n<details>\n<summary><b>Tools in this repository's stdio binary (36)</b></summary>\n\nMonitors: `create_monitor` · `get_monitor` · `list_monitors` ·\n`update_monitor` · `delete_monitor` · `pause_monitor` · `resume_monitor` ·\n`snooze_monitor`\n\nDiscovery: `discover_monitors_reconcile`\n\nReporting: `get_ping_instructions` · `declare_run_expectations`\n\nIncidents & runs: `list_incidents` · `get_run_history`\n\nThe failure loop: `list_open_incidents` · `add_incident_note`\n\nAlert routing: `set_route`\n\nDestinations: `list_destinations` · `create_destination` ·\n`update_destination` · `test_destination` · `delete_destination`\n\nAlert templates: `get_alert_templates` · `set_alert_template`\n\nAgent registry: `register_agent` · `list_agents` · `get_agent` ·\n`update_agent` · `delete_agent`\n\nStatus pages: `list_status_pages` · `create_status_page` ·\n`update_status_page` · `delete_status_page`\n\nAPI keys: `create_api_key` · `list_api_keys` · `revoke_api_key`\n\nTerraform: `export_terraform`\n\nThis binary carries the same tool set as the hosted server at\n`mcp.lastping.dev`. It is a thin REST client throughout: every tool is a\ndirect HTTP call to the management API, so it stays free to run yourself with\nno lag behind the hosted surface beyond a new release.\n\n</details>\n\nThe one that matters most is `get_ping_instructions`: an agent calls\n`create_monitor`, then asks for its own ping commands, and wires them into its\nown work — in one conversation, without a human opening a dashboard.\n\n## Ping API\n\nEvery monitor gets a URL. There is nothing to install and no library to keep\ncurrent; anything that can make an HTTP request can report.\n\n| What happened | Request |\n|---|---|\n| finished successfully | `POST <ping-url>` |\n| started a run | `POST <ping-url>/start` |\n| failed | `POST <ping-url>/fail` with the error as the body |\n| exited with a code | `POST <ping-url>/<exit-code>` |\n| waiting on a human | `POST <ping-url>/blocked` |\n| progress worth recording | `POST <ping-url>/note` |\n\nAdd `?rid=<id>` to pair a run's start with its result, so LastPing can group a\nrun's pings and time it.\n\n```sh\n# The classic one-liner, at the end of a cron job:\ncurl -fsS -m 10 --retry 3 https://ping.lastping.dev/<monitor-id>\n```\n\n## Monitoring as code\n\n```hcl\nresource \"lastping_monitor\" \"nightly_etl\" {\n  name          = \"nightly-etl\"\n  slug          = \"nightly-etl\"\n  schedule_kind = \"cron\"\n  cron_expr     = \"0 3 * * *\"\n  tz            = \"Europe/Berlin\"\n  grace_s       = 900\n}\n```\n\nThe provider is on the\n[Terraform Registry](https://registry.terraform.io/providers/lastping-dev/lastping/latest)\nas `lastping-dev/lastping`, with source at\n[lastping-dev/terraform-provider-lastping](https://github.com/lastping-dev/terraform-provider-lastping).\n\n## Links\n\n- **[lastping.dev](https://lastping.dev)** — the hosted service, free for individuals\n- **[AI agent monitoring](https://lastping.dev/agents/)** — the agent-first guide\n- **[MCP server](https://lastping.dev/mcp/)** — connect configs per client\n- **[Terraform provider](https://lastping.dev/terraform)** — monitoring as code\n- **[Integration guides](https://lastping.dev/monitor/)** — cron, Kubernetes, systemd, GitHub Actions, Python, Node\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n",
  "bytes": 6634,
  "sha": "81fb75991afef5aea7eb13b95b5572ab00a061b9c823857c54da8a2cd5fa3164",
  "repo_slug": "tp322d/lastping-app",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_dev_lastping_lastping_0f412059/readme"
}