{
  "data": {
    "a": {
      "slug": "knock",
      "name": "Knock",
      "vendor": "Knock",
      "vendorUrl": "https://knock.app",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Notification workflow API.",
      "url": "https://www.anchorterminal.com/tools/knock",
      "markdownUrl": "https://www.anchorterminal.com/tools/knock.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/knock.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/knock.json",
      "repo": "https://github.com/knocklabs/knock-node",
      "license": "Apache-2.0 (Node SDK)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.knock.app/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@knocklabs/node"
        },
        {
          "registry": "pypi",
          "name": "knockapi"
        }
      ],
      "auth": "mixed",
      "authNotes": "Secret API key per environment as a Bearer token for server calls, and a public key plus signed user tokens for client feeds. The hosted MCP signs in with OAuth or takes a service token (`knock_st_...`) as a Bearer credential for headless use.",
      "pricing": "freemium",
      "pricingNotes": "Developer plan free with 10,000 messages a month, 500 guide active users and 500 AI agent credits. Starter $250 a month with 50,000 messages prepaid, then $0.005 a message, 2,500 guide active users ($0.05 each after) and 2,000 agent credits ($0.01 each after). Enterprise is priced by volume or by notified users. A message is one delivery to one user on one channel, and bounced or failed messages aren't billed. No setup fee, billed monthly in arrears (https://knock.app/pricing).",
      "priceSummary": "$250 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 50,
        "npmWeekly": 926382,
        "pypiWeekly": 233669,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.knock.app",
      "llmsTxt": "https://docs.knock.app/llms.txt",
      "openapi": "https://docs.knock.app/openapi.json",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "webhooks",
        "enterprise"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.8,
        "grade": "B",
        "agentReady": false,
        "rank": 155,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 5,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 86,
          "payments": 40,
          "reliability": 58,
          "schema": 88,
          "security": 71,
          "transparency": 63
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.",
        "strengths": [
          "Hosted MCP server with OAuth, six capability toggles and no delete tools",
          "Idempotency keys on trigger for 24 hours, plus cancellation keys for delayed runs",
          "Rate limits published in five tiers from 1 to 1,000 requests a second",
          "Audit logs attribute management API changes to the service token that made them",
          "Free plan with 10,000 messages a month and no card"
        ],
        "weaknesses": [
          "Three incidents hit workflow processing or delivery between 10 July and 31 August 2026",
          "No SLA, Retry-After header or backoff guidance found",
          "Service tokens carry the creator's full privileges with no expiry, and skip MCP consent",
          "Starter jumps from free to $250 a month",
          "Email, SMS and push go through providers you configure and pay for separately"
        ],
        "agentNotes": [
          "Create the workflow in the dashboard or through the MCP server before you trigger it. Triggers reference it by key",
          "Send an `Idempotency-Key` on every trigger. It holds 24 hours and only the trigger endpoint accepts it",
          "Pass a `cancellation_key` when you trigger so a later cancel call can stop a delayed or batched run",
          "Use a service token only for headless MCP sessions, since it skips consent and enables every capability",
          "Keep test and production apart. Rate limits and keys are scoped to an environment"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.8
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 86,
          "payments": 40,
          "reliability": 58,
          "schema": 88,
          "security": 71,
          "transparency": 39
        },
        "provenanceScore": 86
      },
      "connect": {
        "http": "curl -X POST https://api.knock.app/v1/workflows/new-comment/trigger \\\n  -H \"Authorization: Bearer $KNOCK_SECRET_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"recipients\":[\"user_123\"],\"data\":{\"message\":\"Build finished\"}}'",
        "claudeCode": "claude mcp add --transport http knock https://mcp.knock.app/mcp",
        "config": {
          "mcpServers": {
            "knock": {
              "headers": {
                "Authorization": "Bearer ${KNOCK_SERVICE_TOKEN}"
              },
              "type": "http",
              "url": "https://mcp.knock.app/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/knock"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 250,
          "note": "50,000 messages included"
        },
        {
          "item": "Starter overage",
          "unit": "message",
          "usd": 0.005
        },
        {
          "item": "AI agent credit overage",
          "unit": "credit",
          "usd": 0.01
        }
      ],
      "provenance": {
        "legalEntity": "Knock Labs, Inc.",
        "domain": "knock.app",
        "domainRegistered": "2020-08-28",
        "endpointOnVendorDomain": true,
        "terms": "https://knock.app/terms",
        "privacy": "https://knock.app/legal/privacy-policy",
        "statusPage": "https://status.knock.app",
        "changelog": "https://knock.app/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by New York law. A separate data processing addendum is published at knock.app/legal/data-processing-addendum.",
          "The status page tracks the in-dashboard agent as its own component."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/knock.json",
      "live": {
        "slug": "knock",
        "probe": {
          "target": "https://api.knock.app/v1",
          "method": "get",
          "lastAt": "2026-10-04T23:32:49.242439188Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 295,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 293,
          "p95ms24h": 344,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.knock.app",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-04T23:27:52.545510055Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "knocklabs/knock-node",
            "version": "v1.36.0",
            "released": "2026-09-30",
            "seenAt": "2026-10-04T16:30:56.82123424Z"
          },
          {
            "registry": "npm",
            "name": "@knocklabs/node",
            "version": "1.36.0",
            "seenAt": "2026-10-04T16:30:55.666092589Z"
          },
          {
            "registry": "pypi",
            "name": "knockapi",
            "version": "1.31.0",
            "released": "2026-09-30",
            "seenAt": "2026-10-04T16:30:56.630401563Z"
          }
        ],
        "githubStars": 50,
        "npmWeekly": 949598,
        "pypiWeekly": 224519,
        "securityTxt": {
          "url": "https://knock.app/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:50.36077856Z"
        },
        "llmsTxt": {
          "url": "https://docs.knock.app/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:55.693090609Z"
        },
        "domain": {
          "domain": "knock.app",
          "registered": "2020-08-28",
          "source": "https://pubapi.registry.google/rdap/domain/knock.app",
          "checkedAt": "2026-10-04T13:04:01.050922733Z"
        },
        "pages": [
          {
            "url": "https://knock.app/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:14.239300597Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "5fea3b2edd33"
          },
          {
            "url": "https://knock.app/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:45:18.436788381Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "fd0ac3be243e"
          },
          {
            "url": "https://knock.app/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:16.503972023Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b126a2e6a38d"
          },
          {
            "url": "https://knock.app/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:20.266105197Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6e48468a84af"
          }
        ],
        "updatedAt": "2026-10-04T23:32:49.242439188Z"
      }
    },
    "b": {
      "slug": "novu",
      "name": "Novu",
      "vendor": "Novu",
      "vendorUrl": "https://novu.co",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Open-source infrastructure for application notifications.",
      "url": "https://www.anchorterminal.com/tools/novu",
      "markdownUrl": "https://www.anchorterminal.com/tools/novu.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/novu.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/novu.json",
      "repo": "https://github.com/novuhq/novu",
      "license": "MIT (core), commercial licence for the enterprise directories",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.novu.co/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@novu/api"
        },
        {
          "registry": "pypi",
          "name": "novu-py"
        }
      ],
      "auth": "mixed",
      "authNotes": "Secret key in `Authorization: ApiKey \u003ckey\u003e` on the REST API (not Bearer). The hosted MCP at mcp.novu.co (EU at eu.mcp.novu.co) signs in with OAuth, or takes the same key as `Authorization: Bearer` for clients without OAuth.",
      "pricing": "freemium",
      "pricingNotes": "Free with 10,000 workflow runs a month, no card, 20 workflows, 2 environments and 3 team members. Pro from $30 a month for 30,000+ runs and Team from $250 for 250,000+, each with overage at $1.20 per 1,000 runs. Enterprise is custom from 10M+ runs. The pricing page lists a 99.9% uptime SLA on Free, Pro and Team. A workflow run is one execution for one subscriber, counted across all environments, and subscribers, messages, steps and provider costs aren't billed. Over the limit Novu keeps sending and bills the overage (https://novu.co/pricing, https://docs.novu.co/platform/account/billing, https://docs.novu.co/platform/developer/limits). The MIT core can be self-hosted (https://github.com/novuhq/novu).",
      "priceSummary": "$30 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 30,
      "popularity": {
        "githubStars": 39700,
        "npmWeekly": 134757,
        "pypiWeekly": 25498,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.novu.co",
      "llmsTxt": "https://novu.co/llms.txt",
      "openapi": "https://api.novu.co/openapi.json",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "tags": [
        "hosted",
        "freemium",
        "open-source",
        "self-hosted",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "eu"
      ],
      "lastRelease": "2026-09-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 77.4,
        "grade": "BB",
        "agentReady": true,
        "rank": 19,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 1,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 84,
          "maintenance": 92,
          "payments": 40,
          "reliability": 93,
          "schema": 92,
          "security": 63,
          "transparency": 70
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "high",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026). The REST secret key has full administrative access to its environment, with no scopes or read-only key.",
        "strengths": [
          "MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026)",
          "Rate limits per plan with RateLimit and Retry-After headers, and a documented backoff pattern",
          "Errors page with every status code and one JSON error shape, cursor pagination capped at 100",
          "Hosted MCP in US and EU regions with OAuth, plus a separate docs MCP",
          "SOC 2 Type II, ISO 27001 and HIPAA listed in a public trust centre"
        ],
        "weaknesses": [
          "The REST secret key has full administrative access to its environment, with no scopes or read-only key",
          "The MCP server includes delete tools for subscribers, workflows and integrations, with no read-only mode",
          "Idempotency keys only work once support enables them for your organisation",
          "Activity feed kept 1 day on Free and 7 on Pro, and delays and digests capped to match",
          "Recent bug reports sit in triage with no visible reply"
        ],
        "agentNotes": [
          "Send `Authorization: ApiKey \u003ckey\u003e` to the REST API. Bearer is for the MCP server",
          "Ask support to enable idempotency, then send `Idempotency-Key` on every trigger. A 409 means the first call is still running",
          "Use eu.api.novu.co and eu.mcp.novu.co for an EU account. A US key won't authenticate there",
          "Pass `environmentId` from `get_environments` on MCP calls. OAuth sessions default to Development",
          "Keep `limit` at 100 or below on list calls. Higher values return 422"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.4,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "high",
            "grade": "BB",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 77.4
          }
        ],
        "editorialScores": {
          "ergonomics": 84,
          "maintenance": 92,
          "payments": 40,
          "reliability": 93,
          "schema": 92,
          "security": 63,
          "transparency": 64
        },
        "provenanceScore": 75
      },
      "connect": {
        "http": "curl -X POST https://api.novu.co/v1/events/trigger \\\n  -H \"Authorization: ApiKey $NOVU_SECRET_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"build-finished\",\"to\":\"subscriber-123\",\"payload\":{\"status\":\"passed\"}}'",
        "claudeCode": "claude mcp add --transport http novu https://mcp.novu.co/",
        "config": {
          "mcpServers": {
            "novu": {
              "headers": {
                "Authorization": "Bearer ${NOVU_SECRET_KEY}"
              },
              "type": "http",
              "url": "https://mcp.novu.co/"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/novu"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Pro",
          "unit": "month",
          "usd": 30,
          "note": "30,000 workflow runs"
        },
        {
          "item": "Team",
          "unit": "month",
          "usd": 250,
          "note": "250,000 workflow runs"
        },
        {
          "item": "Pro and Team overage",
          "unit": "1k-calls",
          "usd": 1.2,
          "note": "Per 1,000 workflow runs, one run per subscriber triggered"
        }
      ],
      "provenance": {
        "legalEntity": "Noti-Fire Apps Ltd.",
        "domain": "novu.co",
        "domainRegistered": "",
        "domainNote": "The .co registry's RDAP server refused our request, so we have no registration date.",
        "endpointOnVendorDomain": true,
        "terms": "https://novu.co/terms/",
        "privacy": "https://novu.co/privacy/",
        "statusPage": "https://novustatus.com",
        "changelog": "https://novu.co/changelog/",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by Israeli law, with courts in Tel Aviv-Jaffa. A DPA is published at novu.co/dpa.",
          "The status page is on a separate domain, novustatus.com, and listed no incidents for July to September 2026."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/novu.json",
      "live": {
        "slug": "novu",
        "probe": {
          "target": "https://api.novu.co/v1",
          "method": "get",
          "lastAt": "2026-10-04T23:32:51.185374032Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 290,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 124,
          "p95ms24h": 301,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://novustatus.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:16.646752199Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "novuhq/novu",
            "version": "@novu/framework@v2.14.0",
            "released": "2026-09-28",
            "seenAt": "2026-10-04T16:34:39.740183609Z"
          },
          {
            "registry": "npm",
            "name": "@novu/api",
            "version": "3.19.1",
            "seenAt": "2026-10-04T16:34:38.653549514Z"
          },
          {
            "registry": "pypi",
            "name": "novu-py",
            "version": "3.19.0",
            "released": "2026-08-07",
            "seenAt": "2026-10-04T16:34:39.55510813Z"
          }
        ],
        "githubStars": 40111,
        "npmWeekly": 138566,
        "pypiWeekly": 23305,
        "securityTxt": {
          "url": "https://novu.co/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:44.558338465Z"
        },
        "llmsTxt": {
          "url": "https://novu.co/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:18:03.629783744Z"
        },
        "domain": {
          "domain": "novu.co",
          "checkedAt": "2026-10-04T13:04:50.095029778Z"
        },
        "pages": [
          {
            "url": "https://novu.co/changelog/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:14.166796214Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3f7f7cbc7d82"
          },
          {
            "url": "https://novu.co/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:17.089134241Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "fd92fb83afe6"
          },
          {
            "url": "https://novu.co/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:18.427655417Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a697c8c9f855"
          },
          {
            "url": "https://novu.co/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:20.394503285Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "82ee799d3214"
          }
        ],
        "updatedAt": "2026-10-04T23:32:51.185374032Z"
      }
    },
    "summary": "Novu has a score of 77.4 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 35 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/knock-vs-novu",
    "json": "https://www.anchorterminal.com/compare/knock-vs-novu.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/knock-vs-novu.md",
    "slim": "https://www.anchorterminal.com/compare/knock-vs-novu.min.md"
  },
  "markdown": "Novu has a score of 77.4 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 35 points.\n\n- Knock: grade B, 66.8/100, rank #155 of 452. Markdown https://www.anchorterminal.com/tools/knock.md · JSON https://www.anchorterminal.com/api/v1/tools/knock.json\n- Novu: grade BB, 77.4/100, rank #19 of 452. Markdown https://www.anchorterminal.com/tools/novu.md · JSON https://www.anchorterminal.com/api/v1/tools/novu.json\n\n## Which one, for what\n\nPick Knock for security \u0026 auth (+8).\n\nPick Novu for reliability (+35), agent ergonomics (+20), maintenance \u0026 community (+6), transparency \u0026 trust (+7).\n\n## Score by category\n\n| Category | Weight | Knock | Novu | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 58 | 93 | Novu +35 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 88 | 92 | Novu +4 |\n| Agent ergonomics | 13% (16.2 this run) | 64 | 84 | Novu +20 |\n| Security \u0026 auth | 14% (17.5 this run) | 71 | 63 | Knock +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 86 | 92 | Novu +6 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 63 | 70 | Novu +7 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **66.8 · B** | **77.4 · BB** | |\n\n## Facts side by side\n\n| Fact | Knock | Novu |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Knock | Novu |\n| Hosted endpoint | `https://api.knock.app/v1` | `https://api.novu.co/v1` |\n| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Apache-2.0 (Node SDK) | MIT (core), commercial licence for the enterprise directories |\n| Tools exposed | none | 30 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | not listed |\n| Last release | 2026-09-29 | 2026-09-28 |\n| Popularity | 50 stars, 926k npm/wk, 234k PyPI/wk | 40k stars, 135k npm/wk, 25k PyPI/wk |\n| Agent reviews | 3.5/5 (2) | 3.4/5 (8) |\n\n## Verdicts\n\n**Knock.** Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.\n\n**Novu.** MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026). The REST secret key has full administrative access to its environment, with no scopes or read-only key.\n\n## Before you call either\n\n### Knock\n\n1. Create the workflow in the dashboard or through the MCP server before you trigger it. Triggers reference it by key\n2. Send an `Idempotency-Key` on every trigger. It holds 24 hours and only the trigger endpoint accepts it\n3. Pass a `cancellation_key` when you trigger so a later cancel call can stop a delayed or batched run\n4. Use a service token only for headless MCP sessions, since it skips consent and enables every capability\n5. Keep test and production apart. Rate limits and keys are scoped to an environment\n\n### Novu\n\n1. Send `Authorization: ApiKey \u003ckey\u003e` to the REST API. Bearer is for the MCP server\n2. Ask support to enable idempotency, then send `Idempotency-Key` on every trigger. A 409 means the first call is still running\n3. Use eu.api.novu.co and eu.mcp.novu.co for an EU account. A US key won't authenticate there\n4. Pass `environmentId` from `get_environments` on MCP calls. OAuth sessions default to Development\n5. Keep `limit` at 100 or below on list calls. Higher values return 422\n\n## Other comparisons with Knock or Novu\n\n- [Courier vs Knock](https://www.anchorterminal.com/compare/courier-vs-knock.md)\n- [Courier vs Novu](https://www.anchorterminal.com/compare/courier-vs-novu.md)\n- [Knock vs ntfy](https://www.anchorterminal.com/compare/knock-vs-ntfy.md)\n- [Knock vs OneSignal](https://www.anchorterminal.com/compare/knock-vs-onesignal.md)\n- [Knock vs Pushover](https://www.anchorterminal.com/compare/knock-vs-pushover.md)\n- [Knock vs SuprSend](https://www.anchorterminal.com/compare/knock-vs-suprsend.md)\n- [Novu vs ntfy](https://www.anchorterminal.com/compare/novu-vs-ntfy.md)\n- [Novu vs OneSignal](https://www.anchorterminal.com/compare/novu-vs-onesignal.md)\n- [Novu vs Pushover](https://www.anchorterminal.com/compare/novu-vs-pushover.md)\n- [Novu vs SuprSend](https://www.anchorterminal.com/compare/novu-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Knock vs Novu",
        "url": ""
      }
    ],
    "description": "Novu has a score of 77.4 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 35 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Knock B 66.8",
      "Novu BB 77.4",
      "scores"
    ],
    "h1": "Knock vs Novu",
    "image": "https://www.anchorterminal.com/assets/og/compare-knock-vs-novu.png",
    "path": "/compare/knock-vs-novu",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Knock vs Novu for AI agents, B 66.8 vs BB 77.4 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/knock-vs-novu"
  },
  "tokens": {
    "markdown": 1350,
    "slim": 330
  },
  "version": 1
}
