{"id":49418409,"url":"https://github.com/groupthink-dev/ntfy-blade-mcp","last_synced_at":"2026-04-29T04:12:57.169Z","repository":{"id":352332225,"uuid":"1205629523","full_name":"Groupthink-dev/ntfy-blade-mcp","owner":"Groupthink-dev","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-19T02:08:38.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T04:13:40.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Groupthink-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-09T06:18:10.000Z","updated_at":"2026-04-19T02:08:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Groupthink-dev/ntfy-blade-mcp","commit_stats":null,"previous_names":["groupthink-dev/ntfy-blade-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Groupthink-dev/ntfy-blade-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Groupthink-dev%2Fntfy-blade-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Groupthink-dev%2Fntfy-blade-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Groupthink-dev%2Fntfy-blade-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Groupthink-dev%2Fntfy-blade-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Groupthink-dev","download_url":"https://codeload.github.com/Groupthink-dev/ntfy-blade-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Groupthink-dev%2Fntfy-blade-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32410087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T03:46:11.172Z","status":"ssl_error","status_checked_at":"2026-04-29T03:37:55.317Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-29T04:12:45.575Z","updated_at":"2026-04-29T04:12:57.162Z","avatar_url":"https://github.com/Groupthink-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ntfy Blade MCP\n\nToken-efficient MCP server for [ntfy](https://ntfy.sh) push notifications. Publish alerts, poll topics, manage tokens and reservations.\n\n## Requirements\n\n- Python 3.12+\n- A ntfy server (self-hosted or ntfy.sh)\n- Optional: bearer token for authenticated access\n\n## Quick Start\n\n```bash\n# Install\nuv sync\n\n# Configure\nexport NTFY_BASE_URL=https://ntfy.sh\nexport NTFY_TOKEN=tk_your_token_here\nexport NTFY_DEFAULT_TOPIC=my-alerts\nexport NTFY_WRITE_ENABLED=true\n\n# Run\nuv run ntfy-blade-mcp\n```\n\n## Tools (10)\n\n| Tool | Type | Description |\n|------|------|-------------|\n| `ntfy_info` | read | Server health + capabilities + stats (3-in-1) |\n| `ntfy_account` | read | Usage limits, reserved topics, active tokens |\n| `ntfy_poll` | read | Poll topic(s) for cached messages |\n| `ntfy_publish` | write | Send notification (priority, tags, actions, markdown, delay) |\n| `ntfy_cancel` | write | Cancel a scheduled message |\n| `ntfy_reserve` | write | Reserve a topic (set ACL) |\n| `ntfy_unreserve` | write | Release a topic reservation |\n| `ntfy_token_create` | write | Create a new API token |\n| `ntfy_token_extend` | write | Extend/relabel a token |\n| `ntfy_token_revoke` | write | Revoke a token |\n\n## Security Model\n\n1. **Environment gate** — all write tools require `NTFY_WRITE_ENABLED=true`\n2. **Per-call confirmation** — every write tool requires `confirm=true`\n3. **Token redaction** — tokens are truncated in output (full token shown only on create)\n4. **PII scrubbing** — bearer tokens and API keys redacted from error messages\n5. **No admin endpoints** — user management excluded by design\n\n## Token Efficiency\n\n- `ntfy_info` collapses 3 API calls (health + config + stats) into 1 tool call\n- Pipe-delimited output, null-field omission, truncation at 200 chars\n- Default priority (3) omitted from poll output\n- `NTFY_DEFAULT_TOPIC` eliminates per-call topic specification\n\n## Environment Variables\n\n| Variable | Required | Secret | Description |\n|----------|----------|--------|-------------|\n| `NTFY_BASE_URL` | yes | no | ntfy server URL |\n| `NTFY_TOKEN` | no | yes | Bearer token (tk_...) |\n| `NTFY_DEFAULT_TOPIC` | no | no | Default topic for publish/poll |\n| `NTFY_WRITE_ENABLED` | no | no | Enable write operations |\n| `TRANSPORT` | no | no | `stdio` (default) or `http` |\n| `NTFY_MCP_PORT` | no | no | HTTP port (default: 8773) |\n| `NTFY_MCP_API_TOKEN` | no | yes | HTTP transport bearer auth |\n\n## Development\n\n```bash\nmake install-dev   # Install with dev deps\nmake test          # Run unit tests\nmake check         # Lint + format + typecheck\nmake test-cov      # Tests with coverage\n```\n\n## Architecture\n\n```\nsrc/ntfy_blade_mcp/\n├── __init__.py\n├── __main__.py      # Entry point\n├── server.py        # FastMCP + 10 @mcp.tool definitions\n├── client.py        # httpx async client for ntfy API\n├── formatters.py    # Pipe-delimited token-efficient output\n└── models.py        # Config, gates, constants, exceptions\n```\n\n## Sidereal Marketplace\n\nContract: `notifications-push-v1` — see `sidereal-plugin.yaml`.\n\n## Licence\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroupthink-dev%2Fntfy-blade-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgroupthink-dev%2Fntfy-blade-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroupthink-dev%2Fntfy-blade-mcp/lists"}