Use this skill when the user needs to search NBER working papers, inspect NBER paper metadata, download NBER paper PDFs, run NBER-CLI commands, or configure NBER-CLI as an MCP server.
Use this skill when the user needs to search NBER working papers, inspect NBER paper metadata, download NBER paper PDFs, run NBER-CLI commands, or configure NBER-CLI as an MCP server.
NBER-CLI
When to Use
Use this skill when the user wants to use NBER-CLI for NBER working papers, including:
Searching NBER working papers by keyword, paper ID, author, abstract, or date range.
Inspecting metadata or abstracts for a known NBER paper ID.
Downloading one or more NBER PDF files to a chosen filesystem path.
Getting machine-readable JSON output for agent workflows.
Configuring NBER-CLI as an MCP server.
Understanding common access errors such as 403, 404, timeout, access denied, or download limits.
Assumptions
The user may not have this repository checked out.
Do not assume nber-cli is already installed.
Prefer uvx nber-cli ... for one-off usage because it can run the published package without requiring a checked-out project or preinstalled command.
If the user already installed the command, nber-cli ... is also fine.
NBER-CLI does not grant access rights beyond what NBER allows for the user's current IP, institution, account, or session.
The first command uses the published package's default stdio server and includes the download tool. The second uses the current source tree's Unreleased transport spelling and exposes only search and paper-info tools; --host defaults to 127.0.0.1, and the Docker image explicitly uses --host 0.0.0.0 so Compose can forward its port. --port already exists in published 0.4.0, while the source tree newly requires --yes for a custom value. The HTTP transport has no built-in authentication; do not expose it to an untrusted network.
Examples Index
The examples/ directory contains focused guides for advanced workflows:
The feed subsystem tracks NBER's new working papers RSS feed (https://www.nber.org/rss/new.xml) in the local database. It is designed for incremental monitoring, not exhaustive search. Use it to answer questions like "what papers appeared this week?" or "has any new paper on topic X shown up?"
For more complete examples, including JSON filtering, cron automation, systemd timers, and batch-download scripts, see examples/use-of-feed.md.
Initial setup
The database and tables are created automatically on the first feed fetch, but you can also initialize explicitly:
uvx nber-cli db init
This writes the default path ~/.nber-cli/nber.db to ~/.nber-cli/config.json. To keep feed data in a custom location:
uvx nber-cli db init --db-path ~/research/nber.db
uvx nber-cli db init --db-path sqlite:////Users/name/research/nber.db
uvx nber-cli db migrate ~/Dropbox/research/nber.db
db migrate moves the database file and its SQLite sidecar files to the new path and updates config. The database stays on the user's machine and is accessed through SQLModel/SQLAlchemy.
First fetch vs incremental fetch
feed fetch always downloads the current RSS feed and updates last_seen_at for every item. By default it only prints items that were not already in the cache:
uvx nber-cli feed fetch
After the first run, the same command becomes an incremental "what's new" check. To see everything that NBER is currently advertising, regardless of cache state:
uvx nber-cli feed fetch --display-all
To preview a fixed number of the most recent items (and automatically enable --display-all):
feed clean removes rows from feed_items. It always previews the match count and asks for confirmation unless you pipe y to it. The audit table feed_fetches is never touched, so you keep a complete history of every fetch.
Remove items not seen in the last 30 days (the default):
This is safe because the next feed fetch will repopulate whatever NBER is currently advertising. It is useful when you want to reset the "new" state, for example after changing how you filter papers.
Automated monitoring
Because feed fetch is idempotent and fast, you can run it on a schedule. A minimal cron entry that fetches every weekday morning and appends new items to a JSON Lines log:
403 means NBER denied access for the current IP, institution, account, session, download limit, or paper access policy.
404 means the paper or PDF endpoint was not found.
Timeout or network errors usually mean the user should retry later or check connectivity.
A paper's publication date alone does not prove the current user can download the PDF.
Access Policy
NBER-CLI must not bypass NBER controls. Do not suggest proxy rotation, credential sharing, CAPTCHA bypass, account automation, request-signature tampering, or other access-circumvention behavior. If NBER returns denial, limits, redirects, or access pages, surface the response clearly and stop.
Report Issues
If the user finds a bug or unexpected behavior in NBER-CLI, direct them to report it at https://github.com/sepinetam/nber-cli/issues.