Integraciones
SPDF en las herramientas que la gente ya usa: un servidor MCP para agentes, cargadores para LlamaIndex y LangChain en Python y JavaScript, un complemento de Zotero y un filtro de Pandoc que convierte las anclas de SPDF en citas con el folio impreso.
Revisado Markdown
El formato vale lo que valgan los sitios a los que llega. Estas integraciones viven en la carpeta integrations/ del repositorio, cada una con sus pruebas y su README, y todas se apoyan en las bibliotecas oficiales: ninguna vuelve a implementar el formato.
- Servidor MCP: spdf-mcpCualquier agente busca en una carpeta de SPDF y cita con el folio exacto.integrations/spdf-mcp
- Cargador de LangChain.jsPasajes como documentos de LangChain con su cita y su URI de ancla.integrations/langchain-js
- Lector de LlamaIndex.TSPasajes como documentos de LlamaIndex, con los vectores guardados si los quieres.integrations/llamaindex-js
- Cargador de LangChain (Python)El mismo cargador para LangChain en Python.integrations/langchain-python
- Lector de LlamaIndex (Python)El mismo lector para LlamaIndex en Python.integrations/llamaindex-python
- Complemento para Zotero 7 y 8Importa un SPDF como ítem, adjúntalo y copia una cita con el folio.integrations/zotero
- Filtro de PandocLas anclas de SPDF en Markdown se convierten en citas con el folio impreso, en cualquier estilo CSL.integrations/pandoc
Servidor MCP
spdf-mcp es un servidor del Model Context Protocol en TypeScript sobre spdf-format. Apúntalo a una carpeta de ficheros .spdf y cualquier agente podrá listar los documentos, buscar en ellos, leer un pasaje, ver las figuras y citar con el folio exacto, sin poder inventárselo.
npx spdf-mcp ~/Biblioteca/SPDF # stdio
npx spdf-mcp ~/Biblioteca/SPDF --http 8765 # Streamable HTTPEn Claude Code: claude mcp add spdf -- npx spdf-mcp ~/Biblioteca/SPDF. En cualquier cliente que lea una configuración en JSON:
{ "mcpServers": { "spdf": { "command": "npx", "args": ["spdf-mcp", "/ruta/a/la/biblioteca"] } } }Herramientas: list_documents, search, read_passage, cite, list_figures, get_metadata. Las reglas que siguen están en SPDF para agentes.
LlamaIndex y LangChain
Cargadores que convierten cada fragmento de un SPDF en un documento del framework, con su ancla y su cita en los metadatos, para que las respuestas con recuperación citen la página impresa y no un número de trozo.
from spdf_llamaindex import SpdfReader # pip install spdf-llamaindex
docs = SpdfReader(locale="es").load_data("darwin-origin.spdf")
docs[0].metadata["citation"] # '(Darwin, 1859, p. 21)'
docs[0].metadata["anchor_uri"] # 'spdf:sha256-…#p=29&f=21'from spdf_langchain import SpdfLoader # pip install spdf-langchain
for doc in SpdfLoader("biblioteca/", locale="es").lazy_load():
print(doc.metadata["citation"], doc.page_content[:60])import { SpdfLoader } from 'spdf-langchain'; // npm install spdf-langchain
const docs = await new SpdfLoader('darwin-origin.spdf').load();import { SpdfReader } from 'spdf-llamaindex'; // npm install spdf-llamaindex
const docs = await new SpdfReader().loadData('darwin-origin.spdf');Zotero
Un complemento para Zotero 7 y 8 que lleva SPDF a una biblioteca de referencias:
- Importar un SPDF como ítem: la ficha CSL-JSON que va dentro del fichero se convierte en un ítem de Zotero, con el fichero adjunto.
- Adjuntar un SPDF a un ítem que ya existe.
- Copiar una cita con el folio: elige una página o pega una URI de ancla y tendrás
(Darwin, 1859, p. 21)en el portapapeles, con la URI de ancla al lado.
Se instala desde el fichero .xpi (Herramientas → Complementos → Instalar complemento desde un archivo); después Zotero lo actualiza desde esta web. Está probado fuera de Zotero (92 pruebas sobre imitaciones de Zotero y los ficheros de prueba reales); las comprobaciones que faltan en un Zotero 7 y 8 de verdad están en su hoja.
Pandoc
Un filtro Lua para Pandoc que convierte las anclas de SPDF de tu Markdown en citas de verdad, en cualquier estilo CSL:
Darwin lo llama una lucha por la existencia [@spdf:sha256-3f2a9c…#p=29].pandoc ensayo.md --lua-filter spdf.lua -M spdf-library=biblioteca/ --citeproc -o ensayo.docxEl filtro lee los ficheros SPDF de la carpeta de la biblioteca, añade sus fichas CSL a la bibliografía, sustituye la página física por el folio impreso (p=29 pasa a ser la página 21) y avisa si la página que citas no existe. Después citeproc le da forma en Chicago, APA, MLA o el estilo que elijas.
Por qué Pandoc y no Calibre: la escritura académica en Markdown ya pasa por Pandoc y citeproc, y el paso que más importa para la honestidad de una cita (convertir una posición en un fichero en el folio que una persona encontrará en el papel) está justo ahí. Calibre es una biblioteca para leer, y eso ya lo cubre el lector.