A side-by-side look at the CvLAC (MinCiencias) and Notebooklm MCP Secure MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose CvLAC (MinCiencias) for research work as a local process; choose Notebooklm MCP Secure for research as a local process. You can also run both side by side in one mcpServers block.
login, read_cvlac, read_cvlac_detail.ask_question, add_notebook, list_notebooks.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Research | Research |
| Quality signal | 63/100 · Good | 67/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | other |
| Pricing | Not declared | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 86 |
| Directory activity | 1 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 13 | 25 |
| Full listing | View CvLAC (MinCiencias) | View Notebooklm MCP Secure |
loginAuthenticate in CvLAC and persist the browser session.read_cvlacRead current CvLAC sections, including articles, books, chapters, theses, juries and five kinds of technical production. Returns existing items for comparison; list results include every JMesa page.read_cvlac_detailRead the full record page of one CvLAC item. The list views only show a couple of columns, so this is the only way to see the fields a write actually stored (role, dates, institution, financing). Finds the row by label, case- and accent-insensitive.read_portfolioRead and parse the configured portfolio site (PORTFOLIO_URL), merged with the curated proyectos/software/eventos from data/portfolio-extra.json.diffCompare CvLAC vs portfolio. Returns four buckets: missing, toUpdate, similar (close to an existing entry — a human decides) and upToDate.update_sectionApply a single change to a CvLAC section. Takes a screenshot for confirmation. An "add" whose item resembles an existing entry returns status "needs_confirmation" and writes nothing; resolve it with action:"update" or repeat with confirm_duplicate:true. A "delete" also writes nothing until it is repeated with confirm_delete:true. A picker whose search matched several rows — a common university name can match close to 200 institutions in CvLAC — also returns needs_confirmation, with the candidates in "choices"; repeat with the chosen id in data.institucionId. For articles provide title, year and issn/revista; for books provide title, isbn, year, editorial and area; for chapters provide title, bookTitle, year and area; for theses provide title, tipo, year, institution and programme; for juries provide title, nivel, year, orientado, institution and programme; technical sections require title and year, with section-specific fields. Catalogue choices are answered by repeating the call with revistaId, libroId, editorialId, programaId, areaId or institucionId in data. Coauthors, keywords, recognitions and linked thesis students are completed from the CvLAC website. For books, certificateCLCDO and certificateCLRI accept local PDF paths (maximum 2 MiB each).lookup_doiRead-only: look up a DOI in Crossref and return an article draft. Review it, then pass it to update_section with section:"articulos"; this tool does not write to CvLAC.complete_productComplete the post-save CvLAC phase for an existing product. It manages ordered keywords, knowledge areas, coauthors and recognitions; for theses it also links students with their participation. It reads current values, resolves catalogue names, and never removes an existing value without confirm_delete:true. Use dry_run:true to preview catalogue resolution and removals without writing.read_profileRead the two CvLAC pages that hold one record instead of a list: the researcher profile text (txt_desc_perfil), the table of academic social networks (Google Scholar, ORCID, LinkedIn, Scopus...) and the áreas de actuación. None of them appears in read_cvlac.update_profileWrite the researcher profile text and/or the academic social networks. Networks are MERGED over what CvLAC already stores — its form rewrites the whole table, so this reads it first and posts everything back. Pass url:null to remove one. A network CvLAC does not list goes in "otro" with its name in "label". Removing one needs confirm_delete:true. The profile text cannot be blanked: CvLAC marks it required. The areas list is replaced whole, so dropping one also needs confirm_delete:true.syncRun a full diff and apply the unambiguous items (missing + toUpdate). Items that resemble existing CvLAC entries are never written; they are listed for a human to resolve. It previews by default; pass dry_run:false to apply changes explicitly.screenshotCapture a CvLAC page for debugging: the given url, or else the last list, record or form page a tool visited, reloaded as it is now. Action links (delete, save) are refused, because in CvLAC opening one performs it.ask_questionNotebookLM notebook Q&A via browser automation.
No active notebook is selected.
Use list_notebooks and select_notebook to choose one, or pass notebook_url.
No Gemini API key is required, but browser authentication must be valid.
If login is required, use the setup_auth tool and verify with get_health (or ask the user to run the notebooklm.auth-setup prompt for a guided walkthrough).add_notebookAdd a NotebookLM notebook to the local library after explicit user confirmation. Provide the NotebookLM URL plus concise metadata: name, description, topics, and optional use cases/tags. Do not infer missing metadata; ask the user first.list_notebooksList all library notebooks with metadata (name, topics, use cases, URL). Use this to present options, then ask which notebook to use for the task.get_notebookGet detailed information about a specific notebook by IDselect_notebookSet a notebook as the active default (used when ask_question has no notebook_id).
## When To Use
- User switches context: "Let's work on React now"
- User asks explicitly to activate a notebook
- Obvious task change requires another notebook
## Auto-Switching
- Safe to auto-switch if the context is clear and you announce it:
"Switching to React notebook for this task..."
- If ambiguous, ask: "Switch to [notebook] for this task?"
## Example
User: "Now let's build the React frontend"
You: "Switching to React notebook..." (call select_notebook)update_notebookUpdate notebook metadata based on user intent.
## Pattern
1) Identify target notebook and fields (topics, description, use_cases, tags, url)
2) Propose the exact change back to the user
3) After explicit confirmation, call this tool
## Examples
- User: "React notebook also covers Next.js 14"
You: "Add 'Next.js 14' to topics for React?"
User: "Yes" → call update_notebook
- User: "Include error handling in n8n description"
You: "Update the n8n description to mention error handling?"
User: "Yes" → call update_notebook
Tip: You may update multiple fields at once if requested.remove_notebookDangerous — requires explicit user confirmation.
## Confirmation Workflow
1) User requests removal ("Remove the React notebook")
2) Look up full name to confirm
3) Ask: "Remove '[notebook_name]' from your library? (Does not delete the actual NotebookLM notebook)"
4) Only on explicit "Yes" → call remove_notebook
Never remove without permission or based on assumptions.
Example:
User: "Delete the old React notebook"
You: "Remove 'React Best Practices' from your library?"
User: "Yes" → call remove_notebooksearch_notebooksSearch library by query (name, description, topics, tags). Use to propose relevant notebooks for the task and then ask which to use.create_notebookCreate a new NotebookLM notebook with sources programmatically.
## What This Tool Does
- Creates a NEW notebook in your NotebookLM account
- Uploads sources (URLs, text, files) to the notebook
- Returns the notebook URL for immediate use
- Optionally adds to your local library
## Supported Source Types
- **url**: Web page URL (documentation, articles, etc.)
- **text**: Raw text content (code, notes, etc.)
- **file**: Local file path (PDF, DOCX, TXT)
## Example Usage
Create a notebook from API documentation:
```json
{
"name": "React Docs",
"sources": [
{ "type": "url", "value": "https://react.dev/reference/react" }
]
}
```
Create a notebook with multiple sources:
```json
{
"name": "Security Research",
"sources": [
{ "type": "url", "value": "https://owasp.org/Top10" },
{ "type": "file", "value": "/path/to/security-report.pdf" },
{ "type": "text", "value": "Custom notes...", "title": "My Notes" }
],
"description": "Security best practices and research",
"topics": ["security", "owasp", "best-practices"]
}
```
## NotebookLM Limits (Free Tier)
- 100 notebooks maximum
- 50 sources per notebook
- 500k words per source
- 50 queries per day
## Notes
- Requires authentication (run setup_auth first)
- Creates notebook with sharing set to private by default
- Large files may take longer to processsync_librarySync your local library with actual NotebookLM notebooks.
## What This Tool Does
- Navigates to NotebookLM and extracts all your notebooks
- Compares with local library entries
- Detects stale entries (notebooks deleted or URLs changed)
- Identifies notebooks not in your library
- Optionally auto-removes stale entries
## When To Use
- Library seems out of sync with NotebookLM
- After deleting notebooks in NotebookLM
- To discover new notebooks to add
- Before setting up automation workflows
## Output
Returns a sync report with:
- **matched**: Library entries that match actual notebooks
- **staleEntries**: Library entries with no matching notebook (candidates for removal)
- **missingNotebooks**: NotebookLM notebooks not in library (candidates for adding)
- **suggestions**: Recommended actions
## Example Usage
```json
{ "auto_fix": false }
```
With auto-fix to remove stale entries:
```json
{ "auto_fix": true }
```list_sourcesList sources in a notebook. Provide notebook_id or notebook_url; if neither is provided, the active notebook from the local library is used. Returns source id, title, type, and status.add_sourceAdd a source to an existing NotebookLM notebook.
If neither `notebook_id` nor `notebook_url` is provided, this tool uses the currently active notebook from the local library.
## Source Types
- **url**: Web page URL
- **text**: Text content (paste)
- **file**: Local file path (PDF, DOCX, TXT)
## Example
```json
{
"notebook_id": "my-notebook",
"source": {
"type": "url",
"value": "https://docs.example.com/api"
}
}
```Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"cvlac-minciencias": {
"command": "npx",
"args": [
"-y",
"cvlac-mcp@1"
]
}
}
}
{
"mcpServers": {
"pantheon-security-notebooklm-mcp-secure": {
"command": "npx",
"args": [
"-y",
"@pan-sec/notebooklm-mcp@latest"
]
}
}
}