Skip to content

Integrations — references, MCP servers, and APIs

Everything external is opt-in and declared in research-config.yml. Secrets always live in .env and are referenced as ${VARS} — never written into committed files.


Reference manager

Set references.provider. All citation-aware skills read through one interface, so the provider is swappable.

bibtex (default — works with any manager)

Export your library as BibTeX (or CSL-JSON / RIS) from any tool — Zotero, Mendeley, EndNote, Paperpile — and save it as the file named in references.bibtex_path (default references/library.bib, git-ignored). That's it: zero external service, works offline. The scripts/references/bibtex.py helper reads and looks up entries.

zotero (opt-in — richest, live library)

Uses the community zotero-mcp server for live search, full text, and PDFs.

  1. Install it: pip install zotero-mcp (or uvx zotero-mcp).
  2. Get an API key + your user id from https://www.zotero.org/settings/keys.
  3. Put ZOTERO_API_KEY=… (and ZOTERO_LIBRARY_ID=…) in .env; set references.zotero.user_id in the config.
  4. Set references.provider: zotero, re-run ./setup.sh — the Zotero MCP block is written into .mcp.json.

mendeley (via .bib export)

There is no turnkey Mendeley MCP today. Mendeley offers a REST API (OAuth 2.0, app registration, 1-hour tokens), but wiring it is a project in itself. The supported path now:

  1. In Mendeley Reference Manager, export your library as BibTeX.
  2. Save it as references/library.bib and set references.provider: bibtex.

You get everything the drafting and literature skills need. A future mendeley module (a thin MCP wrapper over the REST API) is the place to add live sync — contributions welcome.


MCP servers — connect anything

.mcp.json is generated by ./setup.sh from your config, enabling only the connectors you turn on, with secrets as ${ENV} references. To add your own server:

  1. Copy a block from .mcp.json.template (or write a new one) into a local edit of .mcp.json, or — better — add it to settings.local.json so it survives re-renders.
  2. Give it a name, point it at its command/url, and add any secrets to .env as ${VARS}.
  3. Keep literal keys out of committed files. The scrub_check gate will flag them.

Common additions: a SQLite/DuckDB MCP (to let the assistant query your Tier-1 database), a filesystem MCP, or any domain-specific server your field provides.


Email digests (optional)

If you connect a Gmail MCP in your Claude account and set integrations.gmail.enabled: true, the (optional) scheduled digest job can draft a weekly literature summary to yourself. See the scheduled-jobs module for setup. Note: scheduled headless runs need the exact MCP tool name in their allowlist, or the step is silently skipped.