data.bnf.fr

Busca en el catálogo abierto de la BnF: autores, obras, ediciones y enlaces a lo digitalizado.

Documentación

mcp-databnf

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

data.bnf.fr es el servicio de datos abiertos de la Bibliothèque nationale de France. Publica los registros de autoridad que mantiene la biblioteca nacional: las personas que cataloga, con sus fechas, sus lugares, sus idiomas y sus campos de actividad; las obras que escribieron, con las ediciones en las que se publicó cada obra; y los enlaces a las copias digitalizadas en Gallica. Un registro indica si la biblioteca lo considera establecido o aún provisional.

Este servidor conecta un cliente de chat con ese servicio. Puedes buscar un autor o una obra por nombre, leer un registro completo, listar lo que escribió un autor, listar las ediciones de una obra y encontrar las copias digitalizadas asociadas a cualquiera de ellos. No necesita clave API ni cuenta.

Versión francesa


Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add databnf -- npx -y mcp-databnf

Claude Desktop, Cursor y cualquier cliente que use el formato de configuración estándar

{
  "mcpServers": {
    "databnf": {
      "command": "npx",
      "args": ["-y", "mcp-databnf"]
    }
  }
}

Se requiere Node 24 o posterior, y no es necesario establecer ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "databnf": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-databnf:2.1.2"]
    }
  }
}

-i mantiene abierta la entrada estándar, que es por donde viaja el protocolo, y -t se omite porque una TTY reescribe el flujo. El contenedor necesita HTTPS saliente hacia data.bnf.fr, y nada más: sin volumen, sin puerto, sin credenciales.

Paquete, sin npm

Descarga mcp-databnf-2.1.2.mcpb desde la última versión y ábrelo. Un cliente que admita paquetes MCP lo instala por sí solo, sin npm y sin archivo de configuración que editar. El paquete incluye sus dependencias, por lo que no se descarga nada en el momento de la instalación.

Lo que puedes preguntar

  • « Que dit la BnF de Colette ? »
  • "List everything Marguerite Duras wrote."
  • "Which editions of that work does the library hold?"
  • "Are any of them digitised in Gallica?"
  • "When was that record last established?"

El camino habitual va de una búsqueda a un registro: una fila lleva un id, y get_author o get_work lo lee.

Herramientas

HerramientaQué hace
search_authorsEncuentra personas por nombre en los registros de autoridad.
get_authorLee el registro completo de una persona.
search_worksEncuentra obras por título.
get_workLee el registro completo de una obra.
list_worksLista las obras atribuidas a una persona.
list_editionsLista las ediciones de una obra.
find_digitisedEncuentra las copias digitalizadas en Gallica de una persona u obra.

search_authors

Encuentra personas por nombre en los registros de autoridad.

ArgumentoTipoObligatorioQué hace
namecadena, de 1 a 200 caracteresEl nombre a buscar.
limitentero, de 1 a 50, por defecto 10noFilas a devolver.
pageentero, de 1 a 100, por defecto 1noQué página de filas.

A cambio: authors, cada una con id, que get_author, list_works y find_digitised toman; name tal como lo escribe el servicio; label, el encabezamiento de autoridad, normalmente con las fechas; birth_year y death_year, null cuando el registro no indica ninguno; role; y source_url. words_searched indica lo que se envió realmente, has_more si existen más páginas, y index_window_full que el índice ha servido todo lo que servirá para esta búsqueda.

get_author

Lee el registro completo de una persona.

ArgumentoTipoObligatorioQué hace
author_idcadena, de 1 a 200 caracteresEl identificador que lleva una fila.
include_depictionsbooleano, por defecto falsenoAñade los retratos a los que apunta el registro.

A cambio: la persona con name, label, given_name, family_name, other_names, birth_date y death_date tal como se publican, birth_year y death_year como números, birth_place, death_place, biographical_information, occupation, languages como códigos ISO 639-2, countries y fields con las palabras del registro. Un campo que el registro deja vacío es null.

search_works

Encuentra obras por título.

ArgumentoTipoObligatorioQué hacer
titlecadena, de 1 a 200 caracteresLas palabras del título a buscar.
limitentero, de 1 a 50, por defecto 10noFilas a devolver.
pageentero, de 1 a 100, por defecto 1noQué página de filas.

A cambio: works, cada una con id, que get_work, list_editions y find_digitised toman; title; date, el año que el registro da para la obra, tal como se publica; creators; status, que lee established o provisional; y source_url. El sobre lleva los mismos words_searched, has_more y index_window_full que una búsqueda de personas.

get_work

Lee el registro completo de una obra.

ArgumentoTipoObligatorioQué hacer
work_idcadena, de 1 a 200 caracteresEl identificador que lleva una fila.
include_depictionsbooleano, por defecto falsenoAñade las ilustraciones a las que apunta el registro.

A cambio: la obra con title, label, date tal como se publica, first_year, creators como { id, name }, languages, forms, subjects y dewey_classes con las palabras del registro, expression_count, same_as para los registros con los que la BnF la alinea, y catalogue_url. status lee established o provisional, y status_statement indica lo que la biblioteca quiere decir con ello: un registro provisional es uno que la biblioteca no ha terminado de comprobar.

list_works

Lista las obras atribuidas a una persona.

ArgumentoTipoObligatorioQué hace
author_idcadena, de 1 a 200 caracteresEl identificador de la persona.
limitentero, de 1 a 50, por defecto 10noFilas a devolver.
pageentero, de 1 a 100, por defecto 1noQué página de filas.

A cambio: works, cada una con id, title, date tal como se publica, year como número cuando el registro lo tiene, forms, status y source_url, con has_more para continuar.

list_editions

Lista las ediciones de una obra.

ArgumentoTipoObligatorioQué hace
work_idcadena, de 1 a 200 caracteresEl identificador de la obra.
limitentero, de 1 a 50, por defecto 10noFilas a devolver.
pageentero, de 1 a 100, por defecto 1noQué página de filas.

A cambio: editions, cada una con su propio id en el catálogo de la BnF, el title que lleva esta edición, date y year, publisher, place, edition_statement, extent, isbn, note tal como lo escribió el catalogador, catalogue_url, digitised y source_url. Un campo que el registro deja vacío es null.

find_digitised

Encuentra las copias digitalizadas en Gallica asociadas a una persona u obra.

ArgumentoTipoObligatorioQué hace
idcadena, de 1 a 200 caracteresEl identificador de una persona o de una obra.
kindauto, person o work, por defecto autonoQué representa el identificador.
limitentero, de 1 a 200, por defecto 40noEnlaces a devolver.

A cambio: kind, que indica cómo clasifica el catálogo el registro, y links, cada una con el ark de Gallica, su url, su rendering y el role que la persona tiene sobre él. links_returned_by_role los cuenta por función. Este servidor describe un documento digitalizado y nunca lo abre.

Registros establecidos y provisionales

Un registro lleva un status. established significa que la biblioteca lo ha comprobado; provisional significa que no ha terminado, y status_statement lo indica con las palabras de la propia biblioteca. Indica el estado junto con cualquier dato tomado de un registro provisional.

La licencia y lo que pide

La BnF establece una condición sobre estos metadatos:

L'utilisation de ces métadonnées est libre et gratuite sous réserve du maintien de la mention de leur source et de l'indication de leur date de récupération.

El uso es gratuito, siempre que se mencione la fuente y se indique la fecha de recuperación. Cada respuesta lleva retrieved_at en su contenido y termina su texto con la fuente y esa fecha. Una respuesta en caché indica el momento en que se leyó originalmente, ya que fue entonces cuando se recuperó. Repite ambos datos siempre que se muestre lo que has obtenido.

Configuración

Todas las variables son opcionales. Establécelas en el bloque env de la configuración de tu cliente.

VariableValor por defectoQué hace
BNF_USER_AGENTla identidad del proyectoNombra su aplicación ante la BnF, con una dirección donde se pueda contactar a una persona.
BNF_MIN_INTERVAL_MS3000Intervalo entre dos solicitudes, de 3000 a 120000.
BNF_TIMEOUT_MS60000Plazo para una solicitud, de 1000 a 300000.
BNF_MAX_RETRIES3Intentos tras un fallo transitorio, de 0 a 8.
BNF_CACHE_TTL_MS900000Cuánto tiempo permanece una respuesta en memoria, de 0 a 86400000.
BNF_CACHE_MAX_ENTRIES200Respuestas retenidas en memoria a la vez, de 1 a 5000.
BNF_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

Un valor fuera de su rango vuelve al valor por defecto, y la razón se escribe en stderr.

Errores

Cada fallo lleva uno de seis códigos, un mensaje y, cuando ayuda, una pista que indica el siguiente paso.

CódigoQué ocurrióQué hacer
not_foundEl servicio respondió y no tiene ese registro.Verifique el identificador con search_authors o search_works.
invalid_inputLos argumentos fueron rechazados antes de enviar cualquier solicitud.Lea el mensaje, que nombra el argumento.
rate_limitedEl servicio pidió a este cliente que reduzca la velocidad.Espere la cantidad de segundos que indica la pista y vuelva a llamar con los mismos argumentos. El registro sigue ahí.
parse_failureLa respuesta llegó en un formato que este cliente no puede leer.Repórtelo en el rastreador de incidencias.
network_errorLa solicitud no se completó.Inténtelo de nuevo en breve.
timeoutLa solicitud superó su plazo.Aumente BNF_TIMEOUT_MS, o solicite menos filas.

Como biblioteca

La capa que lee el servicio se publica por separado, con su ritmo, su caché y sus errores, y sin ningún protocolo adjunto.

import { BnfClient } from "mcp-databnf/client";

const client = new BnfClient();
const { data, cached } = await client.getAuthor("cb11907966z");
console.log(data.label, cached);

getAuthor y getWork responden cada una a { data, cached }, y lanzan un error que lleva uno de los seis códigos. El mínimo de tres segundos entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen de una en una con al menos tres segundos entre ellas, y ese mínimo se mantiene sin importar cómo esté configurado el servidor. Cada pregunta se responde con una consulta SPARQL contra un punto de acceso público que la BnF opera a su propio costo, por lo que el intervalo es amplio y el plazo largo. El User-Agent siempre termina con la identidad del proyecto y una dirección donde se pueda contactar a una persona.

Cada respuesta lleva la fuente y retrieved_at, que la licencia pide declarar dondequiera que se muestren los metadatos.

Este servidor MCP es un proyecto no oficial, sin afiliación con la Bibliothèque nationale de France.

Privacidad

Este servidor no recopila nada sobre usted y no envía nada a su autor. Se ejecuta en su máquina, contacta a data.bnf.fr y nada más, mantiene sus respuestas en memoria mientras se ejecuta y no escribe nada en el disco. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian cualquier parte de ello.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan contra datos de prueba generados y no hacen ninguna solicitud de red. La suite en vivo, npm run test:live, hace una solicitud por ruta y se ejecuta cada noche contra el propio servicio.

Contribuciones

Los errores, preguntas e ideas pertenecen a el rastreador de incidencias. Las solicitudes de extracción son bienvenidas; abrir una incidencia primero ayuda a acordar la forma del cambio. Consulte CONTRIBUTING.md.

Licencia

MIT, consulte LICENSE. Los metadatos pertenecen a la Bibliothèque nationale de France, de uso libre siempre que se indiquen la fuente y la fecha de recuperación.


mcp-databnf (francés)

Versión en inglés

data.bnf.fr es el servicio de datos abiertos de la Bibliothèque nationale de France. Publica los registros de autoridad que la biblioteca nacional mantiene: las personas que cataloga, con sus fechas, lugares, idiomas y áreas de actividad; las obras que han escrito, con las ediciones en las que cada obra ha aparecido; y los enlaces a los ejemplares digitalizados en Gallica. Un registro indica si la biblioteca lo considera establecido o aún provisional.

Este servidor conecta un cliente de conversación a este servicio. Se puede buscar un autor u obra por su nombre, leer un registro completo, listar lo que un autor ha escrito, listar las ediciones de una obra y encontrar los ejemplares digitalizados adjuntos a uno u otro. Sin clave de API, sin cuenta.

Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add databnf -- npx -y mcp-databnf

Claude Desktop, Cursor y cualquier cliente con formato de configuración estándar

{
  "mcpServers": {
    "databnf": {
      "command": "npx",
      "args": ["-y", "mcp-databnf"]
    }
  }
}

Se requiere Node 24 o más reciente, y no es necesario configurar ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "databnf": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-databnf:2.1.2"]
    }
  }
}

-i mantiene la entrada estándar abierta, que es el canal del protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita acceso HTTPS saliente a data.bnf.fr, y nada más: sin volúmenes, sin puertos, sin identificadores.

Bundle, sin npm

Descargue mcp-databnf-2.1.2.mcpb desde la última publicación y ábralo. Un cliente que gestiona bundles MCP lo instala solo, sin npm y sin archivo de configuración que modificar. El bundle incluye sus dependencias, por lo que nada se descarga en la instalación.

Qué se puede pedir

  • «¿Qué dice la BnF sobre Colette?»
  • «Lista todo lo que escribió Marguerite Duras.»
  • «¿Qué ediciones de esta obra conserva la biblioteca?»
  • «¿Hay alguna digitalizada en Gallica?»
  • «¿Este registro es establecido o provisional?»

El camino habitual va de una búsqueda a un registro: una línea lleva un id, y get_author o get_work lo lee.

Las herramientas

HerramientaQué hace
search_authorsEncuentra personas por su nombre en los registros de autoridad.
get_authorLee el registro completo de una persona.
search_worksEncuentra obras por su título.
get_workLee el registro completo de una obra.
list_worksLista las obras atribuidas a una persona.
list_editionsLista las ediciones de una obra.
find_digitisedEncuentra los ejemplares digitalizados en Gallica de una persona o una obra.

search_authors

Encuentra personas por su nombre en los registros de autoridad.

ArgumentoTipoRequeridoQué hace
namecadena, de 1 a 200 caracteresEl nombre buscado.
limitentero, de 1 a 50, por defecto 10noLíneas a servir.
pageentero, de 1 a 100, por defecto 1noQué página de líneas.

En respuesta: authors, cada una con id, que get_author, list_works y find_digitised retoman; name tal como lo escribe el servicio; label, el encabezado de autoridad, generalmente con las fechas; birth_year y death_year, null donde el registro no lo indica; role; y source_url. words_searched dice qué se envió realmente, has_more si existen otras páginas, y index_window_full que el índice ha servido todo lo que servirá para esta búsqueda.

get_author

Lee el registro completo de una persona.

ArgumentoTipoRequeridoQué hace
author_idcadena, de 1 a 200 caracteresEl identificador que lleva una línea.
include_depictionsbooleano, por defecto falsenoAñade los retratos a los que apunta el registro.

En respuesta: la persona con name, label, given_name, family_name, other_names, birth_date y death_date tal como se publican, birth_year y death_year en números, birth_place, death_place, biographical_information, occupation, languages en códigos ISO 639-2, countries y fields en las palabras del registro. Un campo que el registro deja vacío vale null.

search_works

Encuentra obras por su título.

ArgumentoTipoRequeridoQué hace
titlecadena, de 1 a 200 caracteresLas palabras del título buscado.
limitentero, de 1 a 50, por defecto 10noLíneas a servir.
pageentero, de 1 a 100, por defecto 1noQué página de líneas.

En respuesta: works, cada una con id, que get_work, list_editions y find_digitised retoman; title; date, el año que el registro da a la obra, tal como se publica; creators; status, que vale established o provisional; y source_url. El envoltorio lleva los mismos words_searched, has_more y index_window_full que una búsqueda de personas.

get_work

Lee el registro completo de una obra.

ArgumentoTipoRequeridoQué hace
work_idcadena, de 1 a 200 caracteresEl identificador que lleva una línea.
include_depictionsbooleano, por defecto falsenoAñade las ilustraciones a las que apunta el registro.
En retour : l'œuvre avec title, label, date telle que publiée,
first_year, creators en { id, name }, languages, forms, subjects et
dewey_classes dans les mots de la notice, expression_count, same_as pour
les registres auxquels la BnF l'aligne, et catalogue_url. status vaut
established ou provisional, et status_statement dit ce que la bibliothèque
entend par là : une notice provisoire est une notice qu'elle n'a pas fini de
vérifier.

list_works

Liste les œuvres attribuées à une personne.

ArgumentTypeRequisCe qu'il fait
author_idchaîne, 1 à 200 caractèresouiL'identifiant de la personne.
limitentier, 1 à 50, défaut 10nonLignes à servir.
pageentier, 1 à 100, défaut 1nonQuelle page de lignes.

En retour : works, chacune portant id, title, date telle que publiée, year en nombre quand la notice en a un, forms, status et source_url, avec has_more pour poursuivre.

list_editions

Liste les éditions d'une œuvre.

ArgumentTypeRequisCe qu'il fait
work_idchaîne, 1 à 200 caractèresouiL'identifiant de l'œuvre.
limitentier, 1 à 50, défaut 10nonLignes à servir.
pageentier, 1 à 100, défaut 1nonQuelle page de lignes.

En retour : editions, chacune portant son propre id au catalogue de la BnF, le title que cette édition porte, date et year, publisher, place, edition_statement, extent, isbn, note telle que le catalogueur l'a écrite, catalogue_url, digitised et source_url. Un champ que la notice laisse vide vaut null.

find_digitised

Trouve les exemplaires numérisés dans Gallica attachés à une personne ou à une œuvre.

ArgumentTypeRequisCe qu'il fait
idchaîne, 1 à 200 caractèresouiL'identifiant d'une personne ou d'une œuvre.
kindauto, person ou work, défaut autononCe que l'identifiant désigne.
limitentier, 1 à 200, défaut 40nonLiens à servir.

En retour : kind, qui dit de quel type le catalogue tient la notice, et links, chacun portant l'ark Gallica, son url, son rendering et le role que la personne y tient. links_returned_by_role les compte par rôle. Ce serveur décrit un document numérisé et n'en ouvre jamais aucun.

Notices établies et provisoires

Une notice porte un status. established signifie que la bibliothèque l'a vérifiée ; provisional qu'elle ne l'a pas terminée, et status_statement le dit dans ses propres mots. Rapportez ce statut à côté de tout ce qui vient d'une notice provisoire.

La licence, et ce qu'elle demande

La BnF pose une condition sur ces métadonnées :

L'utilisation de ces métadonnées est libre et gratuite sous réserve du maintien de la mention de leur source et de l'indication de leur date de récupération.

Chaque réponse porte retrieved_at dans sa charge utile et termine son texte par la source et cette date. Une réponse servie depuis le cache rapporte le moment où elle a été lue à l'origine, puisque c'est sa date de récupération. Redonnez les deux partout où ce que vous avez obtenu est montré.

Configuration

Chaque variable est facultative. Elles se posent dans le bloc env de la configuration du client.

VariableDéfautCe qu'elle fait
BNF_USER_AGENTl'identité du projetNomme votre application auprès de la BnF, avec une adresse où joindre une personne.
BNF_MIN_INTERVAL_MS3000Écart entre deux requêtes, de 3000 à 120000.
BNF_TIMEOUT_MS60000Délai d'une requête, de 1000 à 300000.
BNF_MAX_RETRIES3Tentatives après un échec passager, de 0 à 8.
BNF_CACHE_TTL_MS900000Durée pendant laquelle une réponse reste en mémoire, de 0 à 86400000.
BNF_CACHE_MAX_ENTRIES200Réponses gardées en mémoire à la fois, de 1 à 5000.
BNF_LOG_LEVELerrorsilent, error, info ou debug, écrit sur la sortie d'erreur.

Une valeur hors de sa plage retombe sur le défaut, et la raison est écrite sur la sortie d'erreur.

Erreurs

Chaque échec porte un des six codes, un message, et quand cela aide une indication du geste suivant.

CodeCe qui s'est passéQue faire
not_foundLe service a répondu, et n'a pas cette notice.Vérifiez l'identifiant avec search_authors ou search_works.
invalid_inputLes arguments ont été refusés avant toute requête.Lisez le message, qui nomme l'argument.
rate_limitedLe service demande à ce client de ralentir.Attendez les secondes indiquées et rappelez avec les mêmes arguments. La notice est toujours là.
parse_failureLa réponse est arrivée dans une forme illisible ici.Signalez-le sur le suivi d'incidents.
network_errorLa requête n'a pas abouti.Réessayez sous peu.
timeoutLa requête a dépassé son délai.Augmentez BNF_TIMEOUT_MS, ou demandez moins de lignes.

Comme bibliothèque

La couche qui lit le service est publiée seule, avec son rythme, son cache et ses erreurs, sans protocole attaché.

import { BnfClient } from "mcp-databnf/client";

const client = new BnfClient();
const { data, cached } = await client.getAuthor("cb11907966z");
console.log(data.label, cached);

getAuthor et getWork répondent chacun { data, cached }, et lèvent une erreur portant un des six codes. Le plancher de trois secondes entre deux requêtes tient également ici.

Rythme et attribution

Les requêtes partent une à une avec au moins trois secondes entre elles, et ce plancher tient quelle que soit la configuration. Chaque question se résout par une requête SPARQL contre un point d'accès public que la BnF fait tourner à ses frais, d'où un intervalle large et un délai long. Le User-Agent se termine toujours par l'identité du projet et une adresse où joindre une personne.

Chaque réponse porte la source et retrieved_at, que la licence demande d'indiquer partout où les métadonnées sont montrées.

Ce MCP est un projet non officiel, sans affiliation à la Bibliothèque nationale de France.

Confidentialité

Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur. Il tourne sur votre machine, ne joint que data.bnf.fr, garde ses réponses en mémoire le temps qu'il tourne, et n'écrit rien sur le disque. PRIVACY.md dit ce qu'une requête emporte et quels réglages changent cela.

Développement

npm install
npm run build:fixtures
npm test
npm run check

Les tests s'exécutent sur des fixtures engendrées et n'émettent aucune requête. La suite en direct, npm run test:live, émet une requête par route et tourne chaque nuit contre le service lui-même.

Contribuer

Les anomalies, les questions et les idées ont leur place dans le suivi d'incidents. Les propositions de modification sont bienvenues ; ouvrir un ticket d'abord aide à s'accorder sur la forme du changement. Voir CONTRIBUTING.md.

Licence

MIT, voir LICENSE. Les métadonnées appartiennent à la Bibliothèque nationale de France, d'usage libre sous réserve d'indiquer la source et la date de récupération.