vulnfeed-mcp 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ # Never commit secrets
2
+ *.env
3
+ secrets.*
4
+ .env*
5
+
6
+ # OS / editor
7
+ .DS_Store
8
+ *.swp
9
+ *~
10
+
11
+ # Local working files
12
+ /tmp/
13
+ /.cache/
14
+ node_modules/
15
+ __pycache__/
16
+ *.pyc
17
+ .wrangler/
18
+
19
+ # Power Pack build artifacts (generated by build/build-zip.sh + build-guide.sh)
20
+ products/power-pack/dist/
21
+ products/power-pack/build/GUIDE.pdf
@@ -0,0 +1,65 @@
1
+ # VulnFeed — Marketplace Listing Draft
2
+
3
+ Ready to submit to mcp.so, glama.ai, and the MCP Marketplace when licensing is resolved.
4
+
5
+ ---
6
+
7
+ ## Short description (one line)
8
+
9
+ Dependency vulnerability monitoring with EPSS prioritization. Reads your lockfile, tells you what's actually exploitable.
10
+
11
+ ## Description (full)
12
+
13
+ VulnFeed monitors your project's dependencies for known vulnerabilities using NVD, GitHub Advisories, and EPSS exploit probability data. Unlike raw CVE lookup tools, it knows your actual dependency tree and filters to only the vulnerabilities that affect you — prioritized by real-world exploitability.
14
+
15
+ **What it does:**
16
+ - Scans lockfiles (npm, pip, Go, Rust, Ruby, PHP) and reports vulnerabilities affecting your deps
17
+ - Prioritizes by EPSS — suppresses ~80% of noise (theoretical CVEs that are never exploited)
18
+ - Recommends exact fix versions from package registries
19
+ - Continuous monitoring: register a project once, check for new CVEs any time
20
+ - 9 tools covering the full security monitoring workflow
21
+
22
+ **Free tier:** 1 project, 10 scans/day
23
+ **Pro ($14/mo):** unlimited projects, unlimited scans, priority data sync
24
+
25
+ ## Category
26
+
27
+ Security / DevOps
28
+
29
+ ## Tags
30
+
31
+ security, vulnerabilities, CVE, dependencies, npm, python, go, rust, ruby, monitoring, EPSS
32
+
33
+ ## Tools (9)
34
+
35
+ | Tool | Description |
36
+ |------|-------------|
37
+ | scan_lockfile | Scan a lockfile for known vulnerabilities |
38
+ | check_package | Check a single package for known vulns |
39
+ | lookup_cve | Detailed CVE info with EPSS + fix versions |
40
+ | scan_project | Auto-detect and scan all lockfiles in a project |
41
+ | monitor_project | Register for continuous vulnerability monitoring |
42
+ | check_alerts | Check for new vulns since last scan |
43
+ | list_monitored | List all monitored projects |
44
+ | update_deps | Update dep snapshot after package upgrades |
45
+ | unmonitor_project | Remove a project from monitoring |
46
+
47
+ ## Transport
48
+
49
+ - stdio (local, recommended)
50
+ - SSE (remote/team access)
51
+
52
+ ## Requirements
53
+
54
+ - Python 3.10+
55
+ - `mcp` package (`pip install mcp`)
56
+ - VulnFeed API key (from purchase)
57
+
58
+ ## Author
59
+
60
+ Novadyne (an Infai company)
61
+
62
+ ## Links
63
+
64
+ - Landing page: https://vulnfeed.novadyne.ai
65
+ - Purchase: PURCHASE_URL_HERE
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: vulnfeed-mcp
3
+ Version: 0.3.0
4
+ Summary: Dependency vulnerability monitoring MCP server — knows your lockfile, prioritizes by EPSS exploit probability, recommends fix versions.
5
+ Project-URL: Homepage, https://vulnfeed.novadyne.ai
6
+ Author-email: Novadyne <support@infaicorp.com>
7
+ License: MIT
8
+ Keywords: cve,epss,mcp,security,vulnerability
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Topic :: Security
12
+ Classifier: Topic :: Software Development :: Quality Assurance
13
+ Requires-Python: >=3.10
14
+ Requires-Dist: mcp>=1.0
15
+ Description-Content-Type: text/markdown
16
+
17
+ # VulnFeed — Security MCP Server
18
+
19
+ Vulnerability scanning and continuous monitoring for Claude Code. Monitors your project's dependencies against NVD, GitHub Advisories, and EPSS exploit data.
20
+
21
+ ## Setup
22
+
23
+ 1. Install the MCP Python SDK:
24
+ ```bash
25
+ pip install mcp
26
+ ```
27
+
28
+ 2. Add to your Claude Code settings (`.claude/settings.json` or `~/.claude/settings.json`):
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "vulnfeed": {
33
+ "type": "stdio",
34
+ "command": "python3",
35
+ "args": ["/path/to/server.py"],
36
+ "env": {
37
+ "VULNFEED_WORKER_URL": "https://...",
38
+ "VULNFEED_API_KEY": "your-key"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ 3. Restart Claude Code. The tools are now available.
46
+
47
+ ### Remote mode (SSE)
48
+
49
+ Run as a remote server for shared/team access:
50
+ ```bash
51
+ python3 server.py --transport sse --host 0.0.0.0 --port 8383
52
+ ```
53
+
54
+ Then connect from Claude Code settings:
55
+ ```json
56
+ {
57
+ "mcpServers": {
58
+ "vulnfeed": {
59
+ "type": "sse",
60
+ "url": "http://your-server:8383/sse"
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ Or set `VULNFEED_TRANSPORT=sse` to default to SSE mode.
67
+
68
+ ## Tools
69
+
70
+ ### Scanning
71
+
72
+ #### `scan_lockfile`
73
+ Scan a specific lockfile for vulnerabilities.
74
+ ```
75
+ scan_lockfile(lockfile_path="/path/to/package-lock.json")
76
+ ```
77
+
78
+ #### `check_package`
79
+ Check a single package for known vulnerabilities.
80
+ ```
81
+ check_package(name="express", version="4.17.1", ecosystem="npm")
82
+ ```
83
+
84
+ #### `lookup_cve`
85
+ Get detailed info on a specific vulnerability.
86
+ ```
87
+ lookup_cve(cve_id="CVE-2024-29041")
88
+ ```
89
+
90
+ #### `scan_project`
91
+ Auto-detect and scan all lockfiles in a project directory.
92
+ ```
93
+ scan_project(project_path="/path/to/project")
94
+ ```
95
+
96
+ ### Monitoring
97
+
98
+ #### `monitor_project`
99
+ Register a project for continuous vulnerability monitoring. Takes a baseline snapshot of current dependencies and known vulns.
100
+ ```
101
+ monitor_project(project_path="/path/to/project", project_name="my-app")
102
+ ```
103
+
104
+ #### `check_alerts`
105
+ Check for new vulnerabilities since the last scan. Returns only vulns that weren't in the baseline.
106
+ ```
107
+ check_alerts(project_id="f47e98b0e47a")
108
+ ```
109
+
110
+ #### `list_monitored`
111
+ List all projects registered for monitoring.
112
+ ```
113
+ list_monitored()
114
+ ```
115
+
116
+ #### `update_deps`
117
+ Update the dependency snapshot after upgrading packages (e.g. after `npm update`).
118
+ ```
119
+ update_deps(project_id="f47e98b0e47a", project_path="/path/to/project")
120
+ ```
121
+
122
+ #### `unmonitor_project`
123
+ Remove a project from monitoring.
124
+ ```
125
+ unmonitor_project(project_id="f47e98b0e47a")
126
+ ```
127
+
128
+ ## Supported lockfiles
129
+
130
+ - `package-lock.json` (npm)
131
+ - `yarn.lock` (Yarn)
132
+ - `pnpm-lock.yaml` (pnpm)
133
+ - `Pipfile.lock` (Pipenv)
134
+ - `requirements.txt` (pip)
135
+ - `go.sum` / `go.mod` (Go)
136
+ - `Cargo.lock` (Rust / crates.io)
137
+ - `Gemfile.lock` (Ruby / RubyGems)
138
+ - `composer.lock` (PHP / Packagist)
139
+
140
+ ## Smart filtering
141
+
142
+ By default, VulnFeed suppresses low-priority CVEs (EPSS < 10% exploit probability AND CVSS < 9.0). This cuts noise by ~80% — most CVEs are theoretical, not actively exploited.
143
+
144
+ To see everything, pass `show_all=True` to any scan tool:
145
+ ```
146
+ scan_lockfile(lockfile_path="package-lock.json", show_all=True)
147
+ ```
148
+
149
+ ## How it works
150
+
151
+ 1. Parses your lockfile to extract dependency names + versions
152
+ 2. Batch-queries OSV.dev (which includes NVD + GitHub Advisories)
153
+ 3. Enriches each vulnerability with EPSS exploit probability scores
154
+ 4. Filters by exploitability — suppresses low-EPSS, non-critical CVEs by default
155
+ 5. Sorts results by exploitability — the CVEs most likely to be used in real attacks appear first
156
+ 6. Returns fix version recommendations from package registries
157
+
158
+ ### Monitoring flow
159
+
160
+ 1. `monitor_project` scans your deps and stores a baseline (known vulns + dep versions)
161
+ 2. `check_alerts` re-scans against the same dep list and diffs — new vulns that appeared since last check are surfaced, resolved vulns are noted
162
+ 3. Run `check_alerts` periodically (e.g. daily) to catch newly published CVEs affecting your deps
@@ -0,0 +1,42 @@
1
+ # VulnFeed — Polar.sh Setup (Nat-side, ~10 min)
2
+
3
+ Polar.sh handles licensing + payments for VulnFeed subscriptions. Free signup, 4% transaction fee.
4
+
5
+ ## Steps
6
+
7
+ 1. **Sign up at [polar.sh](https://polar.sh)** — use `natburke@infaicorp.com` or your preferred email. Create an organization (e.g., "Novadyne" or "Infai").
8
+
9
+ 2. **Create a Product:**
10
+ - Name: VulnFeed
11
+ - Type: Subscription (recurring)
12
+ - Price: $14/mo
13
+ - Add a "License Key" benefit — this auto-generates keys for each subscriber
14
+
15
+ 3. **Copy two values back to Discord:**
16
+ - **Organization ID** — found in Settings → Developer → Organization ID (UUID format)
17
+ - **Product URL** — the checkout link for VulnFeed (Polar provides a hosted checkout page)
18
+
19
+ 4. Agent will:
20
+ - PUT the Organization ID to the Worker as `POLAR_ORG_ID`
21
+ - Substitute the checkout URL into the landing page (replacing `PURCHASE_URL_HERE`)
22
+ - Deploy the updated landing page
23
+ - The license key validation code is already built and waiting
24
+
25
+ ## How it works (already built)
26
+
27
+ - Buyer completes checkout on Polar.sh → gets a license key
28
+ - Buyer sets `VULNFEED_API_KEY` in their MCP config to this key
29
+ - MCP server sends the key to the Worker on each request
30
+ - Worker validates against Polar.sh API, caches valid keys for 24h in KV
31
+ - Free tier (no key): 10 scans/day, 1 monitored project
32
+ - Paid tier: unlimited scans and projects
33
+
34
+ ## What's NOT needed from you
35
+
36
+ - No API key/token needed — Polar.sh's validation endpoint is unauthenticated (safe for public clients)
37
+ - No webhook setup needed for MVP — validation is on-demand, not event-driven
38
+ - Custom domain live at `vulnfeed.novadyne.ai` (also accessible at `vulnfeed.pages.dev`)
39
+
40
+ ## Timeline
41
+
42
+ Once you post the Org ID + product URL in Discord, the agent will wire everything up in one wake (~15 min of work). VulnFeed goes live immediately after.
@@ -0,0 +1,146 @@
1
+ # VulnFeed — Security MCP Server
2
+
3
+ Vulnerability scanning and continuous monitoring for Claude Code. Monitors your project's dependencies against NVD, GitHub Advisories, and EPSS exploit data.
4
+
5
+ ## Setup
6
+
7
+ 1. Install the MCP Python SDK:
8
+ ```bash
9
+ pip install mcp
10
+ ```
11
+
12
+ 2. Add to your Claude Code settings (`.claude/settings.json` or `~/.claude/settings.json`):
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "vulnfeed": {
17
+ "type": "stdio",
18
+ "command": "python3",
19
+ "args": ["/path/to/server.py"],
20
+ "env": {
21
+ "VULNFEED_WORKER_URL": "https://...",
22
+ "VULNFEED_API_KEY": "your-key"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ 3. Restart Claude Code. The tools are now available.
30
+
31
+ ### Remote mode (SSE)
32
+
33
+ Run as a remote server for shared/team access:
34
+ ```bash
35
+ python3 server.py --transport sse --host 0.0.0.0 --port 8383
36
+ ```
37
+
38
+ Then connect from Claude Code settings:
39
+ ```json
40
+ {
41
+ "mcpServers": {
42
+ "vulnfeed": {
43
+ "type": "sse",
44
+ "url": "http://your-server:8383/sse"
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ Or set `VULNFEED_TRANSPORT=sse` to default to SSE mode.
51
+
52
+ ## Tools
53
+
54
+ ### Scanning
55
+
56
+ #### `scan_lockfile`
57
+ Scan a specific lockfile for vulnerabilities.
58
+ ```
59
+ scan_lockfile(lockfile_path="/path/to/package-lock.json")
60
+ ```
61
+
62
+ #### `check_package`
63
+ Check a single package for known vulnerabilities.
64
+ ```
65
+ check_package(name="express", version="4.17.1", ecosystem="npm")
66
+ ```
67
+
68
+ #### `lookup_cve`
69
+ Get detailed info on a specific vulnerability.
70
+ ```
71
+ lookup_cve(cve_id="CVE-2024-29041")
72
+ ```
73
+
74
+ #### `scan_project`
75
+ Auto-detect and scan all lockfiles in a project directory.
76
+ ```
77
+ scan_project(project_path="/path/to/project")
78
+ ```
79
+
80
+ ### Monitoring
81
+
82
+ #### `monitor_project`
83
+ Register a project for continuous vulnerability monitoring. Takes a baseline snapshot of current dependencies and known vulns.
84
+ ```
85
+ monitor_project(project_path="/path/to/project", project_name="my-app")
86
+ ```
87
+
88
+ #### `check_alerts`
89
+ Check for new vulnerabilities since the last scan. Returns only vulns that weren't in the baseline.
90
+ ```
91
+ check_alerts(project_id="f47e98b0e47a")
92
+ ```
93
+
94
+ #### `list_monitored`
95
+ List all projects registered for monitoring.
96
+ ```
97
+ list_monitored()
98
+ ```
99
+
100
+ #### `update_deps`
101
+ Update the dependency snapshot after upgrading packages (e.g. after `npm update`).
102
+ ```
103
+ update_deps(project_id="f47e98b0e47a", project_path="/path/to/project")
104
+ ```
105
+
106
+ #### `unmonitor_project`
107
+ Remove a project from monitoring.
108
+ ```
109
+ unmonitor_project(project_id="f47e98b0e47a")
110
+ ```
111
+
112
+ ## Supported lockfiles
113
+
114
+ - `package-lock.json` (npm)
115
+ - `yarn.lock` (Yarn)
116
+ - `pnpm-lock.yaml` (pnpm)
117
+ - `Pipfile.lock` (Pipenv)
118
+ - `requirements.txt` (pip)
119
+ - `go.sum` / `go.mod` (Go)
120
+ - `Cargo.lock` (Rust / crates.io)
121
+ - `Gemfile.lock` (Ruby / RubyGems)
122
+ - `composer.lock` (PHP / Packagist)
123
+
124
+ ## Smart filtering
125
+
126
+ By default, VulnFeed suppresses low-priority CVEs (EPSS < 10% exploit probability AND CVSS < 9.0). This cuts noise by ~80% — most CVEs are theoretical, not actively exploited.
127
+
128
+ To see everything, pass `show_all=True` to any scan tool:
129
+ ```
130
+ scan_lockfile(lockfile_path="package-lock.json", show_all=True)
131
+ ```
132
+
133
+ ## How it works
134
+
135
+ 1. Parses your lockfile to extract dependency names + versions
136
+ 2. Batch-queries OSV.dev (which includes NVD + GitHub Advisories)
137
+ 3. Enriches each vulnerability with EPSS exploit probability scores
138
+ 4. Filters by exploitability — suppresses low-EPSS, non-critical CVEs by default
139
+ 5. Sorts results by exploitability — the CVEs most likely to be used in real attacks appear first
140
+ 6. Returns fix version recommendations from package registries
141
+
142
+ ### Monitoring flow
143
+
144
+ 1. `monitor_project` scans your deps and stores a baseline (known vulns + dep versions)
145
+ 2. `check_alerts` re-scans against the same dep list and diffs — new vulns that appeared since last check are surfaced, resolved vulns are noted
146
+ 3. Run `check_alerts` periodically (e.g. daily) to catch newly published CVEs affecting your deps
@@ -0,0 +1,123 @@
1
+ # Bet B — Security Feed MCP
2
+
3
+ **Product:** VulnFeed (working name) — a paid MCP server that monitors your dependencies for vulnerabilities and tells you what actually matters.
4
+
5
+ **Price:** $14/mo
6
+
7
+ **One-liner:** Snyk-grade vulnerability intelligence for $14/mo, native to Claude Code.
8
+
9
+ ## What it is
10
+
11
+ An MCP server that knows your project's dependencies (by reading your lockfile) and continuously monitors NVD, GitHub Advisories, and EPSS data. When a new CVE drops that affects your actual deps, it tells you: what's vulnerable, how likely it is to be exploited, and exactly which version to upgrade to.
12
+
13
+ ## What it is NOT
14
+
15
+ A raw CVE lookup tool. There are 6+ free MCP servers that wrap NVD's API. We don't compete with them on data access — we compete on signal-to-noise.
16
+
17
+ ## Why someone pays
18
+
19
+ 1. **Context-aware.** Free servers answer "tell me about CVE-2026-XXXX." VulnFeed answers "am I vulnerable right now?" It knows your `package-lock.json` / `requirements.txt` / `go.sum` and filters to only the CVEs that hit your actual dependency tree.
20
+
21
+ 2. **Prioritized.** EPSS (Exploit Prediction Scoring System) scores every CVE by real-world exploitability. Most CVEs are noise — EPSS cuts the alert volume by ~80%. VulnFeed surfaces the ones likely to be exploited, not every theoretical vuln.
22
+
23
+ 3. **Actionable.** Not just "you're vulnerable" but "upgrade `express` from 4.18.2 → 4.21.0 to fix CVE-2026-XXXX (EPSS: 0.73, CVSS: 9.1)." Cross-references package registries (npm, PyPI, Go) for fix versions.
24
+
25
+ 4. **Always-on.** Maintains a persistent watch list. New CVE published at 3am? Indexed by 3:15am. Your morning coding session knows about it without you asking.
26
+
27
+ 5. **Cheap.** Snyk Team is $25/dev/mo. GitHub Advanced Security is $49/committer/mo. VulnFeed is $14/mo flat — not per-seat.
28
+
29
+ ## Competitive positioning
30
+
31
+ | | Free MCP servers | Snyk/Socket ($25-49/dev/mo) | VulnFeed ($14/mo) |
32
+ |---|---|---|---|
33
+ | CVE lookup | ✅ | ✅ | ✅ |
34
+ | Knows your deps | ❌ | ✅ | ✅ |
35
+ | EPSS prioritization | ❌ | ✅ | ✅ |
36
+ | Fix recommendations | ❌ | ✅ | ✅ |
37
+ | Continuous monitoring | ❌ | ✅ | ✅ |
38
+ | MCP-native | ✅ | ❌ | ✅ |
39
+ | Auto-fix PRs | ❌ | ✅ | ❌ (v2) |
40
+ | Per-seat pricing | n/a | ✅ (expensive) | ❌ (flat) |
41
+
42
+ ## Architecture
43
+
44
+ ```
45
+ User's Claude Code session
46
+ ↓ MCP tool call
47
+ VulnFeed MCP Server (Cloudflare Worker)
48
+ ├── /scan — reads lockfile, returns vulns affecting your deps
49
+ ├── /monitor — registers a project for continuous monitoring
50
+ ├── /alerts — returns new vulns since last check
51
+ └── /cve/{id} — detailed CVE info with fix recommendation
52
+
53
+ Data layer (Worker KV / D1)
54
+ ├── NVD feed (synced hourly)
55
+ ├── GitHub Advisories (synced hourly)
56
+ ├── EPSS scores (synced daily)
57
+ └── Package registry metadata (npm, PyPI, Go — cached)
58
+ ```
59
+
60
+ Runs entirely on Cloudflare Workers + KV/D1. No server to maintain. Data sync runs on Worker Cron Triggers.
61
+
62
+ ## Build plan
63
+
64
+ ### v0.1 (wake #46) — MVP ✅
65
+ - [x] Worker `/vulnscan/query` endpoint: batch OSV.dev + EPSS enrichment
66
+ - [x] `/vulnscan/cve/{id}` endpoint: detailed CVE with fix versions
67
+ - [x] Python CLI scanner: lockfile parser + prioritized report
68
+
69
+ ### v0.2 (wake #47) — MCP Server ✅
70
+ - [x] FastMCP server with stdio transport: scan_lockfile, check_package, lookup_cve, scan_project
71
+ - [x] Support for package-lock.json, requirements.txt, go.sum, yarn.lock, Pipfile.lock
72
+
73
+ ### v0.3 (wake #48) — Monitoring ✅
74
+ - [x] `POST /vulnscan/monitor`: register project, store dep snapshot in KV
75
+ - [x] `GET /vulnscan/alerts`: diff current CVEs against stored snapshot
76
+ - [x] `PUT /vulnscan/monitor/:id`: update deps, preserve vuln history
77
+ - [x] MCP tools: monitor_project, check_alerts, update_deps, list_monitored, unmonitor_project
78
+ - [x] Landing page draft (products/security-mcp/landing/index.html)
79
+
80
+ ### v1.0 (~1 wake) — Ship
81
+ - [x] EPSS-based smart prioritization (suppress CVEs below 0.1 EPSS unless CVSS ≥ 9) — wake #49
82
+ - [x] SSE transport for remote MCP connections — wake #49
83
+ - [x] License key validation code (Polar.sh integration) — wake #51, activates on POLAR_ORG_ID
84
+ - [x] Deploy landing page to vulnfeed.pages.dev — wake #51
85
+ - [x] Custom domain: vulnfeed.novadyne.ai — wake #56
86
+ - [x] Substitute Polar.sh purchase URL into landing page — wake #57
87
+ - [x] Set POLAR_ORG_ID on Worker — wake #57
88
+ - [x] Free tier auth fix (route order bug: general auth gate blocked free-tier vulnscan requests) — wake #59
89
+ - [ ] Listing on mcp.so + glama.ai + Smithery (listing content drafted, manual submission needed)
90
+ - [ ] MCP Marketplace listing (free tier: 1 project, 10 scans/day)
91
+
92
+ ## Metrics
93
+
94
+ | Metric | Target | Timeframe |
95
+ |--------|--------|-----------|
96
+ | MCP Marketplace installs | 100 | 30 days post-listing |
97
+ | Free-to-paid conversion | 5-8% | 60 days |
98
+ | Paid subscribers | 50 | 60 days post-listing |
99
+ | MRR | $700 | 60 days |
100
+ | Churn | <10%/mo | After month 2 |
101
+
102
+ ## Kill criteria
103
+
104
+ - <20 paid users after 90 days of listing
105
+ - <50 free installs after 30 days (no organic interest)
106
+ - Upstream data costs exceed revenue (shouldn't happen — all sources are free)
107
+ - Anthropic ships native vulnerability scanning in Claude Code
108
+
109
+ ## Brand / marketing
110
+
111
+ **Novadyne umbrella (Nat 09:30Z).** Nat clarified: novadyne is the AI product umbrella (accounting, ledger, now MCP), infai is novadyne's parent company. Security MCP goes under novadyne alongside the bookkeeping assistant — unified AI product brand. Product name: VulnFeed by Novadyne. Marketing via @InfaiHq (parent-company channel) until novadyne has its own presence.
112
+
113
+ ## Upstream costs
114
+
115
+ $0 ongoing:
116
+ - NVD API: free (no key needed, <5 req/30s)
117
+ - GitHub Advisory DB: free (public GraphQL)
118
+ - EPSS: free (open data, daily CSV)
119
+ - npm/PyPI/Go registries: free (public APIs)
120
+ - Cloudflare Workers: free tier covers initial traffic
121
+ - D1 database: free tier (5GB, 5M reads/day)
122
+
123
+ Revenue breakeven: first subscriber.
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "vulnfeed": {
4
+ "command": "uvx",
5
+ "args": ["vulnfeed-mcp"],
6
+ "env": {
7
+ "VULNFEED_API_KEY": "YOUR_LICENSE_KEY_HERE"
8
+ }
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "account_id": "ea0a2969150760d35f85003f32bb927c",
3
+ "project_name": "vulnfeed"
4
+ }
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+ # Deploys the VulnFeed landing page to Cloudflare Pages.
3
+ # Project: vulnfeed (to be created on first deploy).
4
+ # Production URL: https://vulnfeed.novadyne.ai (also: https://vulnfeed.pages.dev)
5
+ #
6
+ # Required env (export before running):
7
+ # CLOUDFLARE_API_TOKEN
8
+ # CLOUDFLARE_ACCOUNT_ID
9
+ #
10
+ # On first deploy, create the Pages project first:
11
+ # curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/pages/projects" \
12
+ # -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
13
+ # -H "Content-Type: application/json" \
14
+ # -d '{"name":"vulnfeed","production_branch":"main"}'
15
+
16
+ set -euo pipefail
17
+
18
+ PROJECT_NAME=${PROJECT_NAME:-vulnfeed}
19
+ BRANCH=${BRANCH:-main}
20
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
21
+
22
+ : "${CLOUDFLARE_API_TOKEN:?CLOUDFLARE_API_TOKEN required}"
23
+ : "${CLOUDFLARE_ACCOUNT_ID:?CLOUDFLARE_ACCOUNT_ID required}"
24
+
25
+ echo "Deploying $SCRIPT_DIR to Pages project '$PROJECT_NAME' (branch=$BRANCH)..."
26
+ npx --yes wrangler@latest pages deploy "$SCRIPT_DIR" \
27
+ --project-name="$PROJECT_NAME" \
28
+ --branch="$BRANCH" \
29
+ --commit-dirty=true
30
+
31
+ echo
32
+ echo "Production: https://${PROJECT_NAME}.pages.dev"
33
+ echo "Latest deployment:"
34
+ curl -fsS -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
35
+ "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments" \
36
+ | python3 -c "
37
+ import json,sys
38
+ d=json.load(sys.stdin)
39
+ for dep in d.get('result',[])[:1]:
40
+ print(f\" {dep.get('id')[:8]} {dep.get('environment')} {dep.get('url')}\")
41
+ for s in dep.get('stages',[]):
42
+ if s.get('name') == 'deploy':
43
+ print(f\" deploy stage: {s.get('status')}\")
44
+ "