Lacuna Research
officielCarte en lecture seule de la recherche en ML pour les agents de programmation : articles, axes de recherche, auteurs, conférences, institutions et hypothèses, chacun lié à ses sources. Hébergée, sans authentification ; également disponible sous forme de package PyPI.
Que pouvez-vous faire avec Lacuna Research MCP ?
- Relier le code aux articles — Demandez quel article un dépôt GitHub met en œuvre et suivez la relation enregistrée
official_code_forjusqu’à l’article et à ses sources. - Rechercher dans la littérature — Lancez une recherche d’articles avec
search_lacuna, puis ouvrez un résultat avecget_paperpour obtenir un aperçu contextuel concis comprenant le résumé, les auteurs et les figures. - Trouver des ressources associées — Recherchez des bases de code, des jeux de données, des modèles ou des démos avec
search_lacuna, puis examinez-en une avecget_resourcepour consulter les articles associés et les facettes. - Explorer des pistes de recherche — Consultez le résumé d’une piste et parcourez les articles qui lui sont associés avec
get_direction_papers. - Examiner les propositions générées — Recherchez des propositions avec
search_type="hypothesis"et lisez-en une avecget_hypothesiscomme une idée à étudier, et non comme un résultat établi. - Dresser le profil des chercheurs et des lieux de publication — Consultez le contexte, les articles, les pistes ou les chercheurs associés d’un auteur, puis comparez les lieux de publication et les institutions.
Serveur MCP hébergé
npx add-mcp 'https://lacuna.tiptreesystems.com/api/mcp'S’installe dans Claude Code, Codex, Cursor et plus
Documentation
Lacuna Research MCP
Lacuna, créé par Tiptree Systems, est une carte de la recherche en apprentissage automatique : un graphe de connaissances hétérogène reliant des articles, des axes de recherche, des auteurs, des lieux de publication, des institutions et des propositions de recherche générées, avec une piste de sources reliant chaque objet dérivé à l’article et à la page exacts qui l’ont produit.
Lacuna Research MCP fournit aux agents de programmation des chercheurs en IA :
- Propositions de recherche générées. Explorez des idées de recherche générées avec The Alien Space of Science.
- Axes de recherche. Parcourez des groupes de concepts associés à des articles, des auteurs et des propositions.
- Littérature prête pour les agents. Recherchez des articles récents au format Markdown avec des liens vers les sources.
- Informations sur les chercheurs. Retracez les auteurs, les publications, les axes de recherche, l’impact et les chercheurs associés.
- Cartographie du paysage. Comparez les lieux de publication, les institutions, les chercheurs de premier plan et l’activité de publication.
Par exemple, retracez une implémentation jusqu’aux relations enregistrées avec les articles :
Trouve l’article à l’origine de Dao-AILab/flash-attention. Affiche la relation enregistrée avec le dépôt et crée un lien vers l’article original.
Cet exemple suit le parcours dépôt → relation enregistrée avec l’article → article et sources.
Lacuna renvoie la relation official_code_for vers
FlashAttention,
avec des liens vers le dépôt et l’article original. Consultez ces sources pour vérifier
la relation. Exécutez l’exemple ou
parcourez le notebook.
Installation · Compétences de recherche · Première utilisation · Outils · Référence de l’API · Configuration
Installation
Extension d’agent pour Cursor
Ce dépôt fournit également la connexion MCP hébergée et les deux compétences de recherche sous la forme d’une extension d’agent. Cursor prend en charge ce format.
Pour la tester localement, copiez ce dépôt dans
~/.cursor/plugins/local/lacuna-research-mcp, rechargez Cursor et ouvrez
Personnaliser pour vérifier les deux compétences et la connexion MCP. L’extension se connecte
à https://lacuna.tiptreesystems.com/api/mcp ; aucune installation locale de Python ni
aucun compte Lacuna ne sont nécessaires. Activez cette connexion ou un serveur Lacuna configuré manuellement
pour éviter les outils en double.
Cursor et VS Code
Utilisez le serveur hébergé sans installation locale de Python ni compte Lacuna :
Les boutons ouvrent le processus d’installation MCP de votre éditeur. Vérifiez l’URL du serveur et
confirmez l’installation. Une fois connecté, posez la question sur FlashAttention ci-dessus ;
votre agent devrait utiliser search_lacuna, get_resource et get_paper.
Configuration manuelle si le lien d’installation ne s’ouvre pas
Dans Cursor, fusionnez cette entrée dans mcpServers dans .cursor/mcp.json :
{
"mcpServers": {
"lacuna-research": {"url": "https://lacuna.tiptreesystems.com/api/mcp"}
}
}
Dans VS Code, fusionnez cette entrée dans servers dans .vscode/mcp.json :
{
"servers": {
"lacuna-research": {"type": "http", "url": "https://lacuna.tiptreesystems.com/api/mcp"}
}
}
Conservez toutes les entrées de serveur existantes. Ouvrez les paramètres MCP de votre éditeur pour vérifier la connexion et activer les outils de Lacuna pour la conversation.
Serveur MCP hébergé (connecteur Claude)
Utilisez le serveur MCP hébergé de Lacuna avec tout client prenant en charge Streamable HTTP. Aucune installation locale n’est nécessaire.
https://lacuna.tiptreesystems.com/api/mcp
Dans Claude, ouvrez Personnaliser → Connecteurs → + Ajouter → Ajouter un connecteur personnalisé. Nommez-le Lacuna Research, collez l’URL ci-dessus et sélectionnez Aucune connexion si une authentification vous est demandée. Terminez l’ajout, puis activez-le dans votre conversation via + → Connecteurs.
Pour les espaces de travail Team et Enterprise, le connecteur doit d’abord être ajouté dans Paramètres de l’organisation → Connecteurs. Consultez la configuration des connecteurs personnalisés de Claude pour plus de détails.
Installation locale
Le moyen le plus simple d’installer Lacuna Research MCP consiste à le demander à votre agent de programmation, par exemple Codex ou Claude Code :
Installe et configure le package
lacuna-research-mcpdepuis PyPI pour ce client.
Pour une configuration manuelle, les instructions ci-dessous utilisent uvx pour exécuter la dernière version balisée depuis PyPI. Installez d’abord uv ; Lacuna Research MCP nécessite Python 3.11 ou une version ultérieure.
Codex
Ajoutez le serveur avec l’interface en ligne de commande Codex :
codex mcp add lacuna-research -- uvx lacuna-research-mcp
Vous pouvez également ajouter l’entrée suivante à ~/.codex/config.toml (ou à .codex/config.toml dans un projet de confiance pour une configuration limitée au projet) :
[mcp_servers.lacuna-research]
command = "uvx"
args = ["lacuna-research-mcp"]
Exécutez codex mcp list pour vérifier que le serveur est configuré. L’application Codex, l’interface en ligne de commande et l’extension IDE partagent cette configuration sur la même machine.
Claude Code
Ajoutez le serveur à tous vos projets avec l’interface en ligne de commande Claude Code :
claude mcp add --scope user lacuna-research -- uvx lacuna-research-mcp
Omettez --scope user pour l’ajouter uniquement au projet actuel. Vous pouvez également ajouter l’entrée suivante sous l’objet de premier niveau mcpServers dans ~/.claude.json :
{
"mcpServers": {
"lacuna-research": {
"type": "stdio",
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}
Exécutez claude mcp get lacuna-research pour vérifier que le serveur est configuré.
Claude Desktop
Ouvrez Paramètres → Développeur → Modifier la configuration, puis ajoutez le serveur sous mcpServers dans claude_desktop_config.json :
{
"mcpServers": {
"lacuna-research": {
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}
Redémarrez Claude Desktop après avoir enregistré le fichier.
Autres clients MCP
Pour tout client prenant en charge les serveurs MCP locaux via stdio, utilisez cette configuration standard :
{
"mcpServers": {
"lacuna-research": {
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}
Commande autonome
Installez le serveur MCP en tant que commande persistante :
uv tool install lacuna-research-mcp
lacuna-research-mcp
Exécutez-le sans installer de commande persistante :
uvx lacuna-research-mcp
Si cette commande se termine avec une erreur de préversion (par exemple, « Python 3.14.0rc2 est une préversion… »),
votre uv utilise une préversion anticipée de Python 3.14 que le SDK MCP ne prend pas en charge.
Mettez uv à jour (uv self update), installez une version publiée de Python (uv python install 3.14),
ou exécutez uvx --python 3.13 lacuna-research-mcp.
Serveur HTTP auto-hébergé
Pour servir des clients MCP distants via Streamable HTTP plutôt que stdio :
uvx lacuna-research-mcp --transport streamable-http --host 0.0.0.0 --port 8000
Le point de terminaison est /mcp. Le serveur est sans état et répond en JSON ; il peut donc fonctionner derrière un répartiteur de charge sans affinité de session. Avec la valeur par défaut --host 127.0.0.1, le serveur n’accepte que les en-têtes Host provenant de localhost ; liez-le donc à une adresse autre que l’adresse de bouclage lorsqu’un proxy inverse transmet un nom d’hôte public.
Dernière version de développement
PyPI contient des versions balisées. Pour essayer plutôt le code le plus récent de la branche main :
uvx --from git+https://github.com/tiptreesystems/lacuna-research-mcp.git lacuna-research-mcp
Développement local
Avec uv :
git clone https://github.com/tiptreesystems/lacuna-research-mcp.git
cd lacuna-research-mcp
uv sync --extra dev
uv run lacuna-research-mcp
Avec pip :
cd <path-to-lacuna-research-mcp>
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -U pip
python -m pip install -e .
Compétences de recherche
Le serveur MCP fournit des outils. Ces compétences facultatives apprennent à votre agent à les utiliser pour deux tâches de recherche :
| Compétence | Exemple de demande |
|---|---|
| Vérifier les travaux antérieurs | Avant d’implémenter la fusion de jetons pour un transformeur de vision, trouve les travaux les plus proches et une référence à inclure. |
| Relier le code aux articles | Quel article l’implémentation Dao-AILab/flash-attention met-elle en œuvre ? Affiche la relation enregistrée et les sources. |
Connectez d’abord le serveur MCP. Ensuite, avec Node.js 22.20+ installé, exécutez la CLI des compétences depuis votre projet :
npx skills add tiptreesystems/lacuna-research-mcp
Choisissez les compétences et l’agent que vous utilisez. Pour installer uniquement le flux de travail reliant le code aux articles :
npx skills add tiptreesystems/lacuna-research-mcp --skill lacuna-code-to-paper
Par défaut, les compétences s’installent dans le projet actuel. Elles n’installent ni ne configurent le serveur MCP. Démarrez une nouvelle session d’agent après l’installation si votre client en a besoin pour détecter les nouvelles compétences.
Première utilisation
Posez l’une des questions ci-dessus à votre agent connecté, ou essayez une question sur une liste de lecture :
Ma liste contient FlashAttention et FlashAttention-2. Quels travaux de référence ou quelles limites devrais-je lire au sujet de l’attention à long contexte ?
Pour un exemple reproductible ne nécessitant aucune clé d’API de modèle, clonez ce dépôt et exécutez :
uv run examples/code_to_paper.py
Le notebook explique chaque étape et compare la piste de sources à une recherche portant sur un seul article. Pour utiliser directement les outils, suivez le même processus :
search_lacuna(query="FlashAttention", search_type="resource", resource_kind="codebase", limit=5)- Vérifiez l’identité du dépôt, puis transmettez l’identifiant renvoyé à
get_resource(resource_id_or_url=...). - Suivez un
publications[].paper_idrenvoyé avecget_paper(artifact_id_or_url=..., view="context", figure_limit=0).
Pour rechercher de la littérature, utilisez search_lacuna(query="methods for detecting prompt injection attacks", search_type="paper", limit=5).
Pour obtenir des propositions générées, utilisez search_lacuna(query="LLM jailbreak defense", search_type="hypothesis", limit=5)
et suivez un identifiant renvoyé avec get_hypothesis. Les propositions générées sont des idées à
étudier, et non des preuves de résultats publiés.
À propos de Lacuna
Le pipeline de Lacuna rapproche les notices bibliographiques d’OpenAlex, OpenReview, DBLP et arXiv ; extrait les éléments conceptuels du texte des articles et les regroupe en axes de recherche (article de Lacuna) ; et échantillonne de nouvelles propositions de recherche à partir de ces axes avec The Alien Space of Science. La carte couvre plus de 2,29 millions d’articles, 215 000+ profils d’auteurs, 28 000+ axes de recherche, 25 000+ propositions de recherche et 5 300+ lieux de publication — et s’enrichit continuellement à mesure que de nouveaux articles d’arXiv et d’autres travaux sur l’IA sont intégrés.
Périmètre
Le corpus couvre la recherche en apprentissage automatique et en IA : articles, axes de recherche, travaux des auteurs, lieux de publication, institutions, hypothèses de recherche générées et ressources de recherche (dépôts GitHub, jeux de données et modèles Hugging Face, notices Zenodo) liées aux articles. Il ne contient ni biographies, ni actualités, ni contenu Web non lié à la recherche. Les agents doivent répondre aux questions hors de ce périmètre à partir d’autres sources.
Contenu disponible
search_lacunaUtilise le point de terminaison public/api/v1/searchde Lacuna pour les directions de recherche, les articles, les auteurs, les revues, les établissements, les hypothèses et les ressources. Les recherches explicites d’articles (search_type="paper") utilisent le moteur de classement lexical et sémantique de production du serveur lorsque les autres arguments de classement conservent leurs valeurs par défaut. Passezsearch_type="hypothesis"pour rechercher des hypothèses. Passezsearch_type="resource"pour rechercher des dépôts de code, des jeux de données, des modèles et des démonstrations liés aux articles, avec un filtrage facultatif à l’aide deresource_kind(codebase,dataset,model,demo) et deprovider(github,huggingface,zenodo) ; par exemple,resource_kind="dataset"trouve des jeux de données de référence. La recherche de ressources rejettedate_from/date_to,venue, les tris par année et le classement sémantique (les ressources n’ont ni dates, ni revues, ni embeddings).get_hypothesis(hypothesis_id_or_url, view="context")Hypothèse/proposition.view="context"(par défaut) fournit un contexte de proposition compact en un seul appel (résumé, abstract, directions liées) ;view="full"renvoie l’enregistrement de version du serveur avec l’historique des versions et le nombre de signaux. Les corps des propositions se trouvent dansversions[].markdown.get_direction(cluster_id_or_url, view="context")Direction de recherche/cluster.view="context"(par défaut) demande le résumé compact destiné aux agents ;view="full"renvoie l’enregistrement brut du cluster.get_direction_papers(cluster_id_or_url, page, limit, view="compact")Articles paginés associés à une direction.view="compact"(par défaut) renvoie des lignes prêtes à citer (id, url, titre, année, revue, quelques auteurs, extrait de l’abstract) ;view="full"renvoie les enregistrements bruts des articles en amont.get_paper(artifact_id_or_url, view="context", figure_limit=None, include_resources=True)Recherche d’article avec les versions disponibles ; utilisez l’ID d’artefact d’une version pour la lire. Les ressources liées (dépôts de code, jeux de données, modèles et démonstrations) sont incluses par défaut dans les vues context et full ; passezinclude_resources=Falsepour les omettre. Les autres vues ignorent cette option.view="context"(par défaut) demande le contexte compact destiné aux agents ; les autres vues sont"full","preview","blog","figures","concepts"ou"neighbors". Dans la vue context,figure_limitlimite l’aperçu des figures (valeur par défaut du serveur : 3 ; passez 0 pour supprimer les aperçus tout en conservant un signalfigures_truncated).get_resource(resource_id_or_url)Recherche de ressource par id (issu de la recherche de ressources ou de la listeresourcesdeget_paper) ou par URL/resource/...de Lacuna : URL externe, résumé, facettes (tâches, modalités, taille, licence), métriques du fournisseur, extrait du README/de la fiche, articles liés souspublications(avecpaper_idet une relation telle quedataset_for), directions associées et ressources mentionnées.- Outils pour les auteurs :
get_author_context(…, view="context"),get_author_papers,get_author_directionsetget_author_neighbors. Commencez parget_author_context, qui utilise par défaut la vue compacte destinée aux agents (nombre limité d’articles et listeimpact_directionslisible plutôt que la télémétrie bruteimpact_clusters). Utilisez les outils dédiés aux articles, aux directions et aux voisins pour parcourir ces collections sans répéter le contexte de l’auteur.view="full"renvoie le contexte complet, dans les limites imposées par le serveur (les collections restent limitées à 100). Passezinclude_neighbors=truepour inclure explicitement les auteurs similaires ; cela peut augmenter considérablement la latence du serveur. - Outils pour les revues et les établissements :
get_venue_context(…, view="context"),get_institution_context(…, view="context"),get_institution_authors. Les outils de contexte utilisent par défaut le format compact (listes limitées, blocs dupliqués supprimés ; pour les revues, une tranche d’activité récente qui inclut toujours leyeardemandé). Utilisezget_institution_authorspour parcourir la liste complète des auteurs d’un établissement.
API encapsulées
| Outil MCP | Point de terminaison de l’API Lacuna |
|---|---|
search_lacuna(query, search_type, limit, offset, author_id_or_url, date_from, date_to, venue, sort, ranking_profile, fields, resource_kind, provider) | GET /api/v1/search (resource_kind et provider sont envoyés sous forme de paramètres de requête kind et provider répétés et nécessitent search_type="resource" ou "all". author_id_or_url limite search_type="paper" à un seul auteur et accepte un ID d’auteur brut ou l’URL de sa page Lacuna. fields restreint/pondère les champs textuels utilisés pour le classement lexical, par ex. title^4,abstract, et sélectionne le moteur de classement lexical expérimental ; pour une recherche d’articles triée par pertinence par défaut, cela contourne le moteur de classement lexical et sémantique de production. Les champs autorisés sont title, abstract, summary, concepts, name, top_names, venue, description, topics, provider_key, paper_titles, chacun n’étant valide que pour les types qui le prennent en charge — title : article/cluster/revue/hypothèse/ressource ; description/topics/provider_key/paper_titles : ressource ; abstract/summary/concepts : article ; name : auteur/établissement/revue ; top_names : cluster/hypothèse ; venue : article/revue (search_type="all" couvre tous les types). Les pondérations doivent respecter 0 < weight <= 100. Les champs inconnus, les pondérations hors limites, les champs incompatibles avec le type et la combinaison de fields avec ranking_profile="semantic" sont rejetés, car le serveur les supprimerait, les plafonnerait ou les ignorerait silencieusement.) |
get_hypothesis(hypothesis_id_or_url, view="context") | view="context" → GET /api/v1/context/hypothesis/{hypothesis_id}?view=compact ; view="full" → GET /api/v1/hypotheses/{hypothesis_id} |
get_direction(cluster_id_or_url, view="context") | view="context" → GET /api/v1/context/direction/{cluster_id}?view=compact ; view="full" → GET /api/v1/clusters/{cluster_id} |
get_direction_papers(cluster_id_or_url, page, limit, view="compact") | GET /api/v1/clusters/{cluster_id}/papers?view=compact (par défaut) ou ?view=complete |
get_paper(artifact_id_or_url, view="context", figure_limit=None, include_resources=True) | view="context" → GET /api/v1/context/paper/{artifact_id}?view=compact (&figure_limit=N lorsqu’il est défini) ; view="full" → GET /api/v1/papers/{artifact_id} ; view="preview" → …/preview ; view="blog" → …/blog ; view="figures" → …/figures ; view="concepts" → …/concepts ; view="neighbors" → …/neighbors ; context et full envoient include_resources. Une URL de page Work (/work/<name>, /work/<slug>/wrk_…) ou un id wrk_… brut est d’abord lu via GET /api/v1/context/work/{work_id_or_name} |
get_resource(resource_id_or_url) | GET /api/v1/resources/{resource_id} |
get_author_papers(author_id_or_url, limit=50, offset=0) | GET /api/v1/authors/{author_id}/papers |
get_author_directions(author_id_or_url, limit=50, offset=0) | GET /api/v1/authors/{author_id}/directions |
get_author_context(author_id_or_url, view="context", include_neighbors=false) | view="context" → GET /api/v1/context/author/{author_id}?view=compact ; view="full" → GET /api/v1/context/author/{author_id} (include_neighbors=true demande explicitement les auteurs similaires) |
get_author_neighbors(author_id_or_url, limit=8, offset=0) | GET /api/v1/authors/{author_id}/neighbors |
get_venue_context(venue_key_or_url, year, view="context") | view="context" → GET /api/v1/context/venue/{vkey}[/{year}]?view=compact ; view="full" → même route sans view |
get_institution_context(institution_key_or_url, view="context") | view="context" → GET /api/v1/context/institution/{ikey}?view=compact ; view="full" → même route sans view |
get_institution_authors(institution_key_or_url, limit=50, offset=0) | GET /api/v1/institutions/{ikey}/authors |
Pour les arguments id-or-URL, passez soit l’id brut renvoyé par search_lacuna, soit l’URL de la page Lacuna correspondante. Le MCP normalise les champs url et *_url relatifs à Lacuna en URL absolues, et convertit également en URL absolues les liens Lacuna (y compris les pages /resource/...) présents dans les champs nommés summary_markdown, article_markdown, markdown, content ou description.
get_author_context est limité côté serveur dans les deux vues. La vue compacte par défaut renvoie un briefing sélectionné ; view="full" renvoie la structure complète plus détaillée, avec les collections intégrées limitées à 100. Utilisez get_author_papers et get_author_directions plutôt que d’essayer de parcourir les collections intégrées au contexte.
Les recherches sont limitées à 50 résultats par appel, et les requêtes de pages d’articles par direction sont limitées à 100 résultats par appel.
Dans search_lacuna, date_from et date_to sont des bornes inclusives de dates de publication. Les formats acceptés sont YYYY, YYYY-MM et YYYY-MM-DD ; par exemple,
date_from="2020", date_to="2022-03" inclut les articles du 1er janvier 2020
au 31 mars 2022.
search_lacuna expose les profils de classement suivants :
default/lexicalProfil par défaut pour toutes les recherches. Lorsquesearch_type="paper",sort="relevance"etfieldsne sont pas définis, il utilise le moteur de classement lexical et sémantique de production du serveur, avec repli progressif. Lesearch_type="all"par défaut du MCP utilise plutôt le classement lexical par défaut du serveur.semanticÀ utiliser pour la recherche d’articles fondée sur les embeddings. La requête sémantique omet la composante de classement lexical habituelle, mais le serveur peut toujours ajouter les correspondances lexicales exactes de titres. Pris en charge uniquement pour les recherchespaperetall(seuls les articles ont des embeddings sémantiques), et incompatible avec les filtresresource_kind/provider.bm25_title_abstract/bm25À utiliser pour la correspondance lexicale limitée au titre et à l’abstract. Rejeté pour les recherchesauthoretinstitution(ces enregistrements n’ont pas de champs de titre ou d’abstract).
Toutes les recherches utilisent la valeur par défaut du serveur, sauf si ranking_profile est fourni. Le MCP rejette les combinaisons profil/type non prises en charge, car le serveur se rabattrait autrement sur une recherche par sous-chaîne et ignorerait silencieusement le profil de classement demandé.
sort accepte relevance (par défaut), year_desc et year_asc. Les tris par année ne peuvent pas être combinés avec ranking_profile="semantic" — le serveur ignorerait silencieusement le tri — ; le MCP rejette donc cette combinaison. Pour les requêtes visant des résultats récents et pertinents, conservez le classement sémantique et limitez la récence avec date_from/date_to.
Variables d’environnement
LACUNA_SITE_URLValeur par défaut :https://lacuna.tiptreesystems.comLACUNA_MCP_TIMEOUTValeur par défaut :30LACUNA_MCP_MAX_RETRIESValeur par défaut :2; s’applique aux délais d’attente, aux erreurs de transport et aux réponses HTTP429,502,503et504.LACUNA_MCP_USER_AGENTValeur par défaut :lacuna-research-mcp/{package_version}LACUNA_MCP_BEARER_TOKENJeton bearer facultatif envoyé sous la formeAuthorization: Bearer ...pour les déploiements privés de Lacuna.LACUNA_MCP_CLIENT_TOKENJeton facultatif envoyé sous la formeX-Lacuna-Client-Tokenpour identifier auprès de Lacuna un serveur MCP hébergé, afin de bénéficier de sa propre limite de débit de recherche.LACUNA_MCP_LOG_LEVELValeur par défaut :WARNING(l’une des valeurs suivantes :DEBUG,INFO,WARNING,ERROR,CRITICAL). La valeur par défaut garde le fonctionnement normal silencieux ; ne la réduisez que pour le débogage, carINFO/DEBUGpermettent au client HTTP de journaliser sur stderr les URL complètes des requêtes — y compris la chaîne de requête de recherche — que certains hôtes MCP conservent.
Les variables d’environnement sont lues une seule fois lors de la création du serveur MCP, ou lors du premier appel direct à un outil/à l’API si le module est importé sans appeler create_mcp().
Organisation de l’implémentation
Le serveur est un adaptateur MCP léger au-dessus de l’API HTTP de Lacuna. L’implémentation est répartie selon les responsabilités :
lacuna_research_mcp/server.pyCréation de l’application MCPServer, enregistrement des outils, nettoyage du cycle de vie et point d’entrée CLIlacuna-research-mcp.lacuna_research_mcp/tools.pyFonctions des outils MCP. Chaque outil normalise ses entrées, appelle le point de terminaison Lacuna correspondant via les fonctions d’aide du client partagé et renvoie des données compatibles avec JSON.lacuna_research_mcp/client.pyAccès HTTP à Lacuna à l’exécution : lehttpx.AsyncClientlié à la boucle d’événements, la gestion des nouvelles tentatives, l’encapsulation des erreurs, l’analyse JSON, la normalisation des URL dans les réponses etapi_get/api_object/api_payload.lacuna_research_mcp/config.pyConstantes d’exécution,RuntimeConfig, construction de l’agent utilisateur du package et analyse de l’environnement.lacuna_research_mcp/ids.pyFonctions d’aide acceptant des id bruts ou des URL de pages Lacuna et extrayant des segments de chemin d’API sûrs.lacuna_research_mcp/normalize.pyPost-traitement des réponses pour les URL Lacuna relatives et les liens Markdown.lacuna_research_mcp/errors.pyType d’exception destiné à l’utilisateur pour les échecs d’accès à l’API Lacuna.
Remarques
get_paperetget_directionutilisentview="context"par défaut. Ces vues contextuelles demandent par défaut les charges utiles compactes de Lacuna, conçues pour les agents, afin de limiter la taille des réponses MCP. Le contexte d’un article inclutsummary_markdownlorsqu’il est disponible (sinonabstract), les auteurs et les figures ; le contexte d’une direction inclutsummary_markdown, un nombre limité d’articles, d’auteurs et de directions connexes, ainsi que des marqueurs de troncature. Utilisezview="full"lorsque vous avez besoin des métadonnées brutes, et les autres vues d’article (preview,blog,figures,concepts,neighbors) lorsque vous souhaitez consulter une seule sous-ressource isolée.- Une recherche d’articles explicite, triée par pertinence et sans
fieldspersonnalisé, utilise par défaut le moteur de classement lexical et sémantique de production du serveur. Définissezranking_profile="semantic"pour une recherche basée sur des embeddings (avec éventuellement une surcouche de correspondance exacte des titres) ou"bm25_title_abstract"pour une correspondance lexicale sur les titres et les résumés. - La plupart des outils de détail acceptent soit l’identifiant renvoyé par la recherche, soit l’URL Lacuna correspondante.
- Les URL Lacuna relatives dans les champs de réponse
url/*_urlet dans les champs nomméssummary_markdown,article_markdown,markdown,contentoudescriptionsont converties en URL absolues. - Les clés des lieux de publication et des établissements sont des hachages opaques (par exemple
d7bf22905bd6), et non des noms lisibles par un humain commeicml. Trouvez d’abord la clé avecsearch_lacuna(search_type="venue"), ou transmettez une URL de page/venue/....
Citation
Si nos travaux vous sont utiles, n’hésitez pas à citer les articles à l’origine de la génération de propositions de recherche et de la carte de recherche de Lacuna.
Génération de propositions de recherche — The Alien Space of Science
@inproceedings{artiles2026alien,
title = {The Alien Space of Science: Sampling Coherent but Cognitively Unavailable Research Directions},
author = {Artiles, Alejandro H. and Weiss, Martin and Brinkmann, Levin and Rahwan, Iyad and Sch{\"o}lkopf, Bernhard and Pal, Christopher and Larochelle, Hugo and Goyal, Anirudh and Rahaman, Nasim},
booktitle = {Advances in Neural Information Processing Systems},
year = {2026},
eprint = {2603.01092},
archivePrefix = {arXiv},
url = {https://arxiv.org/abs/2603.01092}
}
Carte de recherche — Lacuna
@misc{weiss2026lacunaresearchmapmachine,
title = {Lacuna: A Research Map for Machine Learning},
author = {Martin Weiss and Miles Q. Li and Alejandro H. Artiles and Yacine Mkhinini and Chris Pal and Hugo Larochelle and Nasim Rahaman},
year = {2026},
eprint = {2606.26246},
archivePrefix = {arXiv},
primaryClass = {cs.DL},
url = {https://arxiv.org/abs/2606.26246}
}
Licence
MIT. Consultez LICENSE.