npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

digital-pm-mcp

v0.5.1

Published

Digital twin product manager MCP server — populates NotebookLM with codebase summaries, market research, and user feedback so Claude Code can consult it as a senior PM.

Downloads

675

Readme

digital-pm-mcp

Give Claude Code a senior product manager it can consult before answering your questions.

Most AI coding sessions are missing context. Claude knows how to write code, but it doesn't know what to build next, who your competitors are, or what your users are actually complaining about.

digital-pm-mcp fixes that. It creates and maintains a NotebookLM notebook that acts as a living PM brain for your project — populated with your codebase architecture, competitive research, and captured user feedback. Claude Code consults it automatically when you ask strategic questions.


The 30-Second Pitch

You:   "What's the most impactful feature I should build next?"

Claude: [calls digitalPM_query]
        → Checks your NotebookLM notebook (which knows your codebase,
          your competitors, and your captured user feedback)
        → Combines that with its own knowledge of your code
        → Returns a prioritized recommendation grounded in real context

No more generic AI answers. Your notebook becomes smarter every time you:

  • Ship new code → sync updates the codebase snapshot
  • Hear from a user → feedback logs it as a permanent source
  • Want fresh intel → research adds real web sources NotebookLM can read

What It Does

| Say this to Claude Code | What fires | What happens | |---|---|---| | "Initialize my digital PM" | digitalPM_init | Analyzes the codebase and bootstraps the whole system | | "Sync my digital PM" | digitalPM_sync | Adds codebase summary + all .md files as NotebookLM sources | | "My user reported a bug with the dashboard widgets" | digitalPM_feedback | Logs it as a permanent source in your notebook | | "Research competitors for our new AI features via digital PM" | digitalPM_research | Adds research URLs as real Website sources via Tavily | | "What should I build next based on market research?" | digitalPM_query | Queries your notebook, combines the answer with Claude's code knowledge | | "Give me a strategic PM briefing" | digitalPM_insights | 5-section digest: gaps, unmet demand, risk, top priority, pivot signals | | "Schedule my digital PM to sync daily" | digitalPM_schedule | Installs a launchd job (macOS) or cron entry that syncs automatically |

You never type the function names. Just talk to Claude naturally.


How Sources Actually Get Added

Unlike tools that just inject text into a chat, digital-pm-mcp uses browser automation to add real, permanent sources to your NotebookLM notebook — the kind you'd add by clicking "+ Add sources" yourself.

  • Research URLs → added as Website sources (NotebookLM fetches and indexes the full page)
  • Codebase summaries & .md files → added as Copied text sources
  • User feedback & insights → added as Copied text sources

This means your notebook is genuinely grounded in the content — it can cite sources, cross-reference them, and generate Audio Overviews, Mind Maps, and Study Guides from them.


Requirements

  • Node.js 18+
  • A Google account with NotebookLM access (free)
  • notebooklm-mcp installed and authenticated (handles Google login)
  • Tavily API key (free tier — 1,000 searches/month) — required for digitalPM_research and research syncs. Get one at app.tavily.com

Installation

1. Set up notebooklm-mcp and authenticate with Google (one-time)

digital-pm-mcp reuses the Google auth that notebooklm-mcp manages. You need to set it up first:

# Add notebooklm-mcp to Claude Code (user-wide)
claude mcp add --scope user notebooklm npx notebooklm-mcp@latest

Then restart Claude Code and authenticate:

# Inside Claude Code, call:
setup_auth

This opens a browser window for Google login. Complete it, then verify with get_health — you should see authenticated: true. You only do this once.


2. Add digital-pm-mcp to Claude Code (with Tavily key)

# User-wide — available in every project (recommended)
claude mcp add --scope user digitalpm npx digital-pm-mcp@latest

Then add your Tavily API key to the MCP config. Edit ~/.claude.json (or wherever your user-scoped MCP config lives) and add the env block:

"digitalpm": {
  "command": "npx",
  "args": ["digital-pm-mcp@latest"],
  "env": {
    "TAVILY_API_KEY": "tvly-your-key-here"
  }
}

Get a free key at app.tavily.com — the free tier covers 1,000 searches/month, more than enough for ongoing project research.

Restart Claude Code, then run /mcp to confirm both servers show ✓ Connected:

notebooklm   ✓ Connected
digitalpm    ✓ Connected

If either shows ✗ Failed: run claude mcp list to check the command, or open Claude Code with claude --debug to see the startup error.


3. Initialize for your project

Open Claude Code in your project directory and say:

"Initialize my digital PM for this project"

Claude will fully automate:

  1. Scan your codebase (respects .gitignore, detects tech stack)
  2. Auto-create a new NotebookLM notebook via browser automation
  3. Add a rich codebase architecture summary as a source
  4. Run competitive web research and add URL sources
  5. Generate a ROADMAP.md (Living Execution Graph) in your project root
  6. Save .digitalpM.json to your project root

No manual pasting. No notebook setup. That's it — your PM brain is live.


Staying Updated

digital-pm-mcp checks npm for updates at startup. If you're running an older version, you'll see a banner like:

⚠️ digital-pm-mcp update available: v0.4.0 → v0.4.2
   Restart with the latest: update your MCP config to use `npx digital-pm-mcp@latest`

To update: Since you installed with npx digital-pm-mcp@latest, just clear the npx cache and restart Claude Code:

# Clear npx cache (forces re-download of latest version)
rm -rf ~/.npm/_npx

# Then restart Claude Code — it will pull the latest automatically

This is the only thing you need to do. Your .digitalpM.json and NotebookLM notebook are preserved — only the server binary updates.


Example Conversations

Strategic planning:

"Based on the codebase and market research, what's the most impactful feature I should build next?"

Logging feedback:

"My beta user said the onboarding flow is confusing — they didn't understand what to do after signup. Log that as feedback."

Staying current:

"We just shipped the new AI assistant feature. Sync the digital PM so the notebook reflects the latest code."

Competitive research:

"Do some research on how other productivity apps handle recurring tasks and update our NotebookLM sources."


How It Works

Your Codebase
     │
     ▼
digitalPM_init / digitalPM_sync
     │  Walks files (respects .gitignore)
     │  Detects tech stack, maps architecture
     │  Finds all .md files (README, CLAUDE.md, CHANGELOG, docs/)
     ▼
Browser Automation (patchright)
     │  Opens NotebookLM headlessly
     │  Clicks "+ Add sources → Copied text / Websites"
     │  Inserts each source individually
     ▼
NotebookLM Notebook  ◄──────────────────────────────────────┐
     │  Codebase architecture + .md files                    │
     │  Research URLs (full web content)                     │  digitalPM_research
     │  User feedback & product insights                     │  digitalPM_feedback
     ▼                                                       │
digitalPM_query                                    ──────────┘
     │  Asks your notebook a strategic question
     │  Claude combines the answer with its own code context
     ▼
You get PM-grade guidance, grounded in your actual project

Config File

.digitalpM.json is created in your project root on init:

{
  "notebook_url": "https://notebooklm.google.com/notebook/your-notebook-id",
  "project_name": "my-project",
  "description": "What the project does",
  "research_topics": [
    "React alternatives competitors 2026",
    "AI productivity app trends 2026"
  ],
  "sync": {
    "mode": "on_demand",
    "last_synced": "2026-02-26T17:00:00Z"
  }
}

Add .digitalpM.json to .gitignore if your notebook URL is private.


Keeping the Notebook Fresh

"Sync my digital PM"                  → updates code snapshot + research
"Sync digital PM — code only"         → re-analyzes codebase only
"Research new topics: AI agent tools" → pulls fresh research
"Schedule my PM to sync daily at 8am" → runs automatically, even when Claude is closed

A good habit: sync after any significant feature ship. Or set a schedule and forget about it — digitalPM_schedule installs a background job that keeps the notebook current automatically.


Architecture

digital-pm-mcp/
├── bin/
│   ├── digital-pm-mcp.js        # CLI entry (npx target)
│   └── digital-pm-sync.js       # Standalone sync runner (used by launchd/cron)
├── src/
│   ├── index.js                  # MCP server, tool registration, stdio transport
│   ├── tools/
│   │   ├── init.js               # digitalPM_init
│   │   ├── sync.js               # digitalPM_sync
│   │   ├── query.js              # digitalPM_query
│   │   ├── research.js           # digitalPM_research
│   │   ├── feedback.js           # digitalPM_feedback
│   │   ├── plan.js               # digitalPM_plan
│   │   ├── insights.js           # digitalPM_insights  ← new in v0.5.0
│   │   └── schedule.js           # digitalPM_schedule  ← new in v0.5.0
│   └── services/
│       ├── browser-source.js     # Patchright automation — adds real NotebookLM sources
│       ├── notebooklm.js         # Public API: addTextSource(), addUrlSources(), callNotebookLM()
│       ├── codebase.js           # Project analysis + summary generation
│       ├── research.js           # Tavily search (requires TAVILY_API_KEY)
│       └── config.js             # .digitalpM.json read/write
└── package.json

Contributing

PRs welcome. Core dependencies: @modelcontextprotocol/sdk, patchright, and zod.

License

MIT