data.bnf.fr

Pesquise no catálogo aberto da BnF: autores, obras, edições e links para o que está digitalizado.

Documentação

mcp-databnf

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

data.bnf.fr é o serviço de dados abertos da Bibliothèque nationale de France. Ele publica os registros de autoridade que a biblioteca nacional mantém: as pessoas que ela cataloga, com suas datas, seus locais, suas línguas e seus campos de atividade; as obras que escreveram, com as edições em que cada obra foi publicada; e os links para as cópias digitalizadas na Gallica. Um registro indica se a biblioteca o considera estabelecido ou ainda provisório.

Este servidor conecta um cliente de chat a esse serviço. Você pode pesquisar um autor ou uma obra pelo nome, ler um registro completo, listar o que um autor escreveu, listar as edições de uma obra e encontrar as cópias digitalizadas anexadas a qualquer um deles. Não requer chave de API nem conta.

Versão francesa


Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

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

Claude Desktop, Cursor e qualquer cliente que use o formato de configuração padrão

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

Node 24 ou posterior é necessário, e nenhuma variável de ambiente precisa ser definida.

Com Docker

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

-i mantém o stdin aberto, que é por onde o protocolo trafega, e -t é omitido porque um TTY reescreve o fluxo. O contêiner precisa de HTTPS de saída para data.bnf.fr, e nada mais: sem volume, sem porta, sem credencial.

Pacote, sem npm

Baixe mcp-databnf-2.1.2.mcpb de a versão mais recente e abra-o. Um cliente que suporta pacotes MCP o instala por conta própria, sem npm e sem arquivo de configuração para editar. O pacote carrega suas dependências, então nada é baixado no momento da instalação.

O que você pode perguntar

  • « 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?"

O caminho comum vai de uma pesquisa a um registro: uma linha carrega um id, e get_author ou get_work o lê.

Ferramentas

FerramentaO que faz
search_authorsEncontra pessoas pelo nome nos registros de autoridade.
get_authorLê o registro completo de uma pessoa.
search_worksEncontra obras pelo título.
get_workLê o registro completo de uma obra.
list_worksLista as obras atribuídas a uma pessoa.
list_editionsLista as edições de uma obra.
find_digitisedEncontra as cópias digitalizadas na Gallica para uma pessoa ou uma obra.

search_authors

Encontra pessoas pelo nome nos registros de autoridade.

ArgumentoTipoObrigatórioO que faz
namestring, 1 a 200 caracteressimO nome a procurar.
limitinteiro, 1 a 50, padrão 10nãoLinhas a fornecer.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: authors, cada uma carregando id, que get_author, list_works e find_digitised aceitam; name como o serviço o escreve; label, o cabeçalho de autoridade, geralmente com as datas; birth_year e death_year, null onde o registro não declara nenhum; role; e source_url. words_searched diz o que foi realmente enviado, has_more se existem mais páginas, e index_window_full que o índice forneceu tudo o que fornecerá para esta pesquisa.

get_author

Lê o registro completo de uma pessoa.

ArgumentoTipoObrigatórioO que faz
author_idstring, 1 a 200 caracteressimO identificador que uma linha carrega.
include_depictionsbooleano, padrão falsenãoAdiciona os retratos aos quais o registro aponta.

Em retorno: a pessoa com name, label, given_name, family_name, other_names, birth_date e death_date como publicados, birth_year e death_year como números, birth_place, death_place, biographical_information, occupation, languages como códigos ISO 639-2, countries e fields nas palavras do registro. Um campo que o registro deixa vazio é null.

search_works

Encontra obras pelo título.

ArgumentoTipoObrigatórioO que faz
titlestring, 1 a 200 caracteressimAs palavras do título a procurar.
limitinteiro, 1 a 50, padrão 10nãoLinhas a fornecer.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: works, cada uma carregando id, que get_work, list_editions e find_digitised aceitam; title; date, o ano que o registro dá para a obra, como publicado; creators; status, lendo established ou provisional; e source_url. O envelope carrega os mesmos words_searched, has_more e index_window_full que uma pesquisa de pessoas retorna.

get_work

Lê o registro completo de uma obra.

ArgumentoTipoObrigatórioO que faz
work_idstring, 1 a 200 caracteressimO identificador que uma linha carrega.
include_depictionsbooleano, padrão falsenãoAdiciona as ilustrações às quais o registro aponta.

Em retorno: a obra com title, label, date como publicados, first_year, creators como { id, name }, languages, forms, subjects e dewey_classes nas palavras do registro, expression_count, same_as para os registros com os quais a BnF a alinha, e catalogue_url. statusestablished ou provisional, e status_statement diz o que a biblioteca quer dizer com isso: um registro provisório é um que a biblioteca ainda não terminou de verificar.

list_works

Lista as obras atribuídas a uma pessoa.

ArgumentoTipoObrigatórioO que faz
author_idstring, 1 a 200 caracteressimO identificador da pessoa.
limitinteiro, 1 a 50, padrão 10nãoLinhas a fornecer.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: works, cada uma carregando id, title, date como publicados, year como um número onde o registro tem um, forms, status e source_url, com has_more para continuar.

list_editions

Lista as edições de uma obra.

ArgumentoTipoObrigatórioO que faz
work_idstring, 1 a 200 caracteressimO identificador da obra.
limitinteiro, 1 a 50, padrão 10nãoLinhas a fornecer.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: editions, cada uma carregando seu próprio id no catálogo da BnF, o title que esta edição carrega, date e year, publisher, place, edition_statement, extent, isbn, note como o catalogador o escreveu, catalogue_url, digitised e source_url. Um campo que o registro deixa vazio é null.

find_digitised

Encontra as cópias digitalizadas na Gallica anexadas a uma pessoa ou a uma obra.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 200 caracteressimO identificador de uma pessoa ou de uma obra.
kindauto, person ou work, padrão autonãoO que o identificador representa.
limitinteiro, 1 a 200, padrão 40nãoLinks a fornecer.

Em retorno: kind, dizendo como o catálogo classifica o registro, e links, cada uma carregando o ark da Gallica, seu url, seu rendering e o role que a pessoa detém sobre ele. links_returned_by_role os conta por função. Este servidor descreve um documento digitalizado e nunca abre um.

Registros estabelecidos e provisórios

Um registro carrega um status. established significa que a biblioteca o verificou; provisional significa que ela não terminou, e status_statement diz isso nas próprias palavras da biblioteca. Informe o status junto com qualquer coisa retirada de um registro provisório.

A licença e o que ela pede

A BnF estabelece uma condição sobre estes metadados:

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.

O uso é gratuito, desde que a fonte seja nomeada e a data de recuperação seja declarada. Cada resposta carrega retrieved_at em seu payload e termina seu texto com a fonte e essa data. Uma resposta em cache informa o momento em que foi originalmente lida, pois é quando foi recuperada. Repita ambos sempre que o que você obteve for exibido.

Configuração

Toda variável é opcional. Defina-as no bloco env da configuração do seu cliente.

VariávelPadrãoO que faz
BNF_USER_AGENTa identidade do projetoNomeia seu aplicativo para a BnF, com um endereço onde uma pessoa pode ser contatada.
BNF_MIN_INTERVAL_MS3000Intervalo entre duas solicitações, de 3000 a 120000.
BNF_TIMEOUT_MS60000Prazo para uma solicitação, de 1000 a 300000.
BNF_MAX_RETRIES3Tentativas após uma falha transitória, de 0 a 8.
BNF_CACHE_TTL_MS900000Por quanto tempo uma resposta permanece na memória, de 0 a 86400000.
BNF_CACHE_MAX_ENTRIES200Respostas mantidas na memória de uma vez, de 1 a 5000.
BNF_LOG_LEVELerrorsilent, error, info ou debug, escritos em stderr.

Um valor fora do intervalo cai para o padrão, e o motivo é escrito em stderr.

Erros

Cada falha carrega um de seis códigos, uma mensagem e, quando ajuda, uma dica indicando o próximo passo.

CódigoO que aconteceuO que fazer
not_foundO serviço respondeu e não possui tal registro.Verifique o identificador com search_authors ou search_works.
invalid_inputOs argumentos foram recusados antes de qualquer solicitação ser enviada.Leia a mensagem, que nomeia o argumento.
rate_limitedO serviço pediu que este cliente diminuísse o ritmo.Aguarde o número de segundos que a dica indica e chame novamente com os mesmos argumentos. O registro ainda está lá.
parse_failureA resposta chegou em um formato que este cliente não consegue ler.Reporte em o rastreador de problemas.
network_errorA solicitação não foi concluída.Tente novamente em breve.
timeoutA solicitação passou do prazo.Aumente BNF_TIMEOUT_MS, ou peça menos linhas.

Como biblioteca

A camada que lê o serviço é publicada separadamente, com seu ritmo, seu cache e seus erros, e sem protocolo anexado.

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

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

getAuthor e getWork cada um responde a { data, cached }, e lançam um erro carregando um dos seis códigos. O piso de três segundos entre duas solicitações também vale aqui.

Ritmo e atribuição

As solicitações saem uma de cada vez com pelo menos três segundos entre elas, e esse piso vale independentemente de como o servidor está configurado. Cada pergunta é respondida por uma consulta SPARQL contra um endpoint público que a BnF opera às suas próprias custas, por isso o intervalo é amplo e o prazo longo. O User-Agent sempre termina com a identidade do projeto e um endereço onde uma pessoa pode ser contatada.

Cada resposta carrega a fonte e retrieved_at, que a licença pede que sejam declarados onde quer que os metadados sejam exibidos.

Este servidor MCP é um projeto não oficial, sem afiliação com a Bibliothèque nationale de France.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao autor. Ele roda na sua máquina, contata data.bnf.fr e nada mais, mantém suas respostas na memória enquanto roda e não grava nada em disco. PRIVACY.md declara o que uma solicitação carrega e quais configurações alteram qualquer parte disso.

Desenvolvimento

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

Os testes rodam contra fixtures gerados e não fazem nenhuma solicitação de rede. A suíte ao vivo, npm run test:live, faz uma solicitação por rota e roda todas as noites contra o próprio serviço.

Contribuindo

Bugs, perguntas e ideias pertencem a o rastreador de problemas. Pull requests são bem-vindos; abrir uma issue primeiro ajuda a concordar sobre a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. Os metadados pertencem à Bibliothèque nationale de France, livres para uso desde que a fonte e a data de recuperação sejam declaradas.


mcp-databnf (francês)

Versão em inglês

data.bnf.fr é o serviço de dados abertos da Bibliothèque nationale de France. Ele publica os registros de autoridade que a biblioteca nacional mantém: as pessoas que ela cataloga, com suas datas, seus lugares, suas línguas e seus domínios de atividade; as obras que elas escreveram, com as edições em que cada obra apareceu; e os links para os exemplares digitalizados na Gallica. Um registro indica se a biblioteca o considera estabelecido ou ainda provisório.

Este servidor conecta um cliente de conversa a esse serviço. Pode-se buscar um autor ou uma obra pelo nome, ler um registro inteiro, listar o que um autor escreveu, listar as edições de uma obra e encontrar os exemplares digitalizados ligados a um ou outro. Nenhuma chave de API, nenhuma conta.

Instalação

Instalação em um clique

Install in Cursor Install in VS Code

Claude Code

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

Claude Desktop, Cursor e qualquer cliente no formato de configuração padrão

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

Node 24 ou mais recente é necessário, e nenhuma variável de ambiente precisa ser preenchida.

Com Docker

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

-i mantém a entrada padrão aberta, que é o canal do protocolo, e -t é omitido porque um TTY reescreve o fluxo. O contêiner precisa de acesso HTTPS de saída para data.bnf.fr, e nada mais: nenhum volume, nenhuma porta, nenhum identificador.

Bundle, sem npm

Baixe mcp-databnf-2.1.2.mcpb de a última publicação e abra-o. Um cliente que gerencia bundles MCP o instala sozinho, sem npm e sem arquivo de configuração para modificar. O bundle carrega suas dependências, então nada é baixado na instalação.

O que se pode pedir

  • « O que a BnF diz sobre Colette? »
  • « Liste tudo o que Marguerite Duras escreveu. »
  • « Quais edições desta obra a biblioteca conserva? »
  • « Há alguma digitalizada na Gallica? »
  • « Este registro é estabelecido ou provisório? »

O caminho comum vai de uma busca a um registro: uma linha carrega um id, e get_author ou get_work a lê.

As ferramentas

FerramentaO que faz
search_authorsEncontra pessoas pelo nome nos registros de autoridade.
get_authorLê o registro de uma pessoa inteiro.
search_worksEncontra obras pelo título.
get_workLê o registro de uma obra inteiro.
list_worksLista as obras atribuídas a uma pessoa.
list_editionsLista as edições de uma obra.
find_digitisedEncontra os exemplares digitalizados na Gallica de uma pessoa ou de uma obra.

search_authors

Encontra pessoas pelo nome nos registros de autoridade.

ArgumentoTipoObrigatórioO que faz
namestring, 1 a 200 caracteressimO nome procurado.
limitinteiro, 1 a 50, padrão 10nãoLinhas a servir.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: authors, cada um carregando id, que get_author, list_works e find_digitised retomam; name tal como o serviço o escreve; label, o cabeçalho de autoridade, geralmente com as datas; birth_year e death_year, null onde o registro não indica; role; e source_url. words_searched diz o que foi realmente enviado, has_more se existem outras páginas, e index_window_full que o índice serviu tudo o que servirá para esta busca.

get_author

Lê o registro de uma pessoa inteiro.

ArgumentoTipoObrigatórioO que faz
author_idstring, 1 a 200 caracteressimO identificador que uma linha carrega.
include_depictionsbooleano, padrão falsenãoAdiciona os retratos para os quais o registro aponta.

Em retorno: a pessoa com name, label, given_name, family_name, other_names, birth_date e death_date tais como publicados, birth_year e death_year em números, birth_place, death_place, biographical_information, occupation, languages em códigos ISO 639-2, countries e fields nas palavras do registro. Um campo que o registro deixa vazio vale null.

search_works

Encontra obras pelo título.

ArgumentoTipoObrigatórioO que faz
titlestring, 1 a 200 caracteressimAs palavras do título procurado.
limitinteiro, 1 a 50, padrão 10nãoLinhas a servir.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: works, cada uma carregando id, que get_work, list_editions e find_digitised retomam; title; date, o ano que o registro dá à obra, tal como publicado; creators; status, valendo established ou provisional; e source_url. O envelope carrega os mesmos words_searched, has_more e index_window_full que uma busca de pessoas.

get_work

Lê o registro de uma obra inteiro.

ArgumentoTipoObrigatórioO que faz
work_idstring, 1 a 200 caracteressimO identificador que uma linha carrega.
include_depictionsbooleano, padrão falsenãoAdiciona as ilustrações para as quais o registro aponta.
Em retorno: a obra com title, label, date tal como publicada,
first_year, creators em { id, name }, languages, forms, subjects e
dewey_classes nas palavras do registro, expression_count, same_as para
os registros aos quais a BnF a alinha, e catalogue_url. status vale
established ou provisional, e status_statement diz o que a biblioteca
entende por isso: um registro provisório é um registro que ela não terminou de
verificar.

list_works

Lista as obras atribuídas a uma pessoa.

ArgumentoTipoObrigatórioO que faz
author_idstring, 1 a 200 caracteressimO identificador da pessoa.
limitinteiro, 1 a 50, padrão 10nãoLinhas a servir.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: works, cada uma com id, title, date tal como publicada, year em número quando o registro tem um, forms, status e source_url, com has_more para continuar.

list_editions

Lista as edições de uma obra.

ArgumentoTipoObrigatórioO que faz
work_idstring, 1 a 200 caracteressimO identificador da obra.
limitinteiro, 1 a 50, padrão 10nãoLinhas a servir.
pageinteiro, 1 a 100, padrão 1nãoQual página de linhas.

Em retorno: editions, cada uma com seu próprio id no catálogo da BnF, o title que essa edição carrega, date e year, publisher, place, edition_statement, extent, isbn, note tal como o catalogador a escreveu, catalogue_url, digitised e source_url. Um campo que o registro deixa vazio vale null.

find_digitised

Encontra os exemplares digitalizados na Gallica ligados a uma pessoa ou a uma obra.

ArgumentoTipoObrigatórioO que faz
idstring, 1 a 200 caracteressimO identificador de uma pessoa ou de uma obra.
kindauto, person ou work, padrão autonãoO que o identificador designa.
limitinteiro, 1 a 200, padrão 40nãoLinks a servir.

Em retorno: kind, que diz de que tipo o catálogo considera o registro, e links, cada um com o ark Gallica, seu url, seu rendering e o role que a pessoa tem nele. links_returned_by_role os conta por papel. Este servidor descreve um documento digitalizado e nunca abre nenhum.

Registros estabelecidos e provisórios

Um registro carrega um status. established significa que a biblioteca o verificou; provisional que ela não o terminou, e status_statement o diz em suas próprias palavras. Relate esse status ao lado de tudo o que vier de um registro provisório.

A licença, e o que ela pede

A BnF impõe uma condição sobre estes metadados:

O uso destes metadados é livre e gratuito, desde que seja mantida a menção de sua fonte e a indicação de sua data de recuperação.

Cada resposta carrega retrieved_at em sua carga útil e termina seu texto com a fonte e essa data. Uma resposta servida do cache reporta o momento em que foi lida originalmente, já que essa é sua data de recuperação. Reproduza os dois em todos os lugares onde o que você obteve for exibido.

Configuração

Cada variável é opcional. Elas são definidas no bloco env da configuração do cliente.

VariávelPadrãoO que faz
BNF_USER_AGENTa identidade do projetoNomeia sua aplicação junto à BnF, com um endereço para contato.
BNF_MIN_INTERVAL_MS3000Intervalo entre duas requisições, de 3000 a 120000.
BNF_TIMEOUT_MS60000Tempo limite de uma requisição, de 1000 a 300000.
BNF_MAX_RETRIES3Tentativas após uma falha temporária, de 0 a 8.
BNF_CACHE_TTL_MS900000Duração durante a qual uma resposta permanece em memória, de 0 a 86400000.
BNF_CACHE_MAX_ENTRIES200Respostas mantidas em memória por vez, de 1 a 5000.
BNF_LOG_LEVELerrorsilent, error, info ou debug, escrito na saída de erro.

Um valor fora de sua faixa recai no padrão, e o motivo é escrito na saída de erro.

Erros

Cada falha carrega um dos seis códigos, uma mensagem e, quando ajuda, uma indicação do próximo passo.

CódigoO que aconteceuO que fazer
not_foundO serviço respondeu e não tem esse registro.Verifique o identificador com search_authors ou search_works.
invalid_inputOs argumentos foram recusados antes de qualquer requisição.Leia a mensagem, que nomeia o argumento.
rate_limitedO serviço pede que este cliente desacelere.Aguarde os segundos indicados e chame novamente com os mesmos argumentos. O registro continua lá.
parse_failureA resposta chegou em um formato ilegível aqui.Reporte em o rastreador de incidentes.
network_errorA requisição não foi concluída.Tente novamente em breve.
timeoutA requisição excedeu seu tempo limite.Aumente BNF_TIMEOUT_MS, ou peça menos linhas.

Como biblioteca

A camada que lê o serviço é publicada sozinha, com seu ritmo, seu cache e seus erros, sem protocolo anexado.

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

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

getAuthor e getWork respondem cada um { data, cached }, e levantam um erro com um dos seis códigos. O piso de três segundos entre duas requisições também vale aqui.

Ritmo e atribuição

As requisições saem uma a uma com pelo menos três segundos entre elas, e esse piso vale independentemente da configuração. Cada pergunta se resolve com uma requisição SPARQL contra um ponto de acesso público que a BnF mantém às suas custas, daí um intervalo amplo e um tempo limite longo. O User-Agent termina sempre com a identidade do projeto e um endereço para contato.

Cada resposta carrega a fonte e retrieved_at, que a licença pede para indicar em todos os lugares onde os metadados são exibidos.

Este MCP é um projeto não oficial, sem afiliação à Bibliothèque nationale de France.

Privacidade

Este servidor não coleta nada sobre você e não envia nada ao autor. Ele roda na sua máquina, junta apenas data.bnf.fr, mantém suas respostas em memória enquanto roda, e não grava nada no disco. PRIVACY.md diz o que uma requisição carrega e quais ajustes mudam isso.

Desenvolvimento

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

Os testes rodam sobre fixtures geradas e não emitem nenhuma requisição. A suíte ao vivo, npm run test:live, emite uma requisição por rota e roda todas as noites contra o próprio serviço.

Contribuir

Anomalias, perguntas e ideias têm seu lugar em o rastreador de incidentes. Propostas de modificação são bem-vindas; abrir um ticket primeiro ajuda a alinhar a forma da mudança. Veja CONTRIBUTING.md.

Licença

MIT, veja LICENSE. Os metadados pertencem à Bibliothèque nationale de France, de uso livre desde que a fonte e a data de recuperação sejam indicadas.