Lacuna Research MCP
Lacuna Research MCP lets an agent search and navigate a large ML/AI research map, from papers and novel proposals to authors, venues, institutions, and linked resources.
Search papers, directions, authors, venues, institutions, hypotheses, and resources (code, datasets, models, demos) with filters, ranking profiles, sorting, dates, and pagination.
Inspect generated novel research proposals and research directions, including linked papers.
Fetch paper context, full metadata, figures, concepts, related papers, versions, and linked resources.
Explore GitHub repositories, Hugging Face datasets/models, Zenodo records, and their linked papers.
Investigate authors via context, papers, directions, and similar authors.
Map venues and institutions, including yearly activity and institution author lists.
Use compact agent-oriented views or full raw records, accepting raw IDs or Lacuna URLs.
Provides access to machine learning research papers and related metadata from arXiv, enabling search and retrieval of papers within the Lacuna research map.
Provides access to scholarly publication records from dblp, enabling search and retrieval of papers, authors, and venues within the Lacuna research map.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lacuna Research MCPSearch for recent papers on large language model alignment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Lacuna Research MCP
π¬ Ground your coding agent in novel ideas, papers, and the ML landscape
Lacuna Research MCP gives AI researchers' coding agents:
Novel research proposals. Explore novel research ideas generated with The Alien Space of Science.
Research directions. Navigate concept clusters with linked papers, authors, and proposals.
Agent-ready literature. Search recent papers in markdown with source links.
Researcher intelligence. Trace authors, publications, directions, impact, and related researchers.
Landscape mapping. Compare venues, institutions, leading researchers, and publication activity.
Lacuna, built by Tiptree Systems, is a research map of machine learning: a heterogeneous knowledge graph linking papers, research directions, authors, venues, institutions, and generated research proposals, with a source trail from every derived object back to the exact paper and page that produced it. Its pipeline reconciles scholarly records from OpenAlex, OpenReview, DBLP, and arXiv; extracts concept elements from paper text and clusters them into research directions (Lacuna paper); and samples novel research proposals from those directions with The Alien Space of Science. The map spans more than 2.29 million papers, 215,000+ author profiles, 28,000+ research directions, 25,000+ research proposals, and 5,300+ venues β and it grows continuously as new arXiv and other AI papers are ingested.
Install Β· First use Β· Tools Β· API reference Β· Configuration
Install
Hosted MCP server (Claude connector)
Use Lacuna's hosted MCP server with any client that supports Streamable HTTP. No local installation is required.
https://lacuna.tiptreesystems.com/api/mcpIn Claude, open Customize β Connectors β + Add β Add custom connector. Name it Lacuna Research, paste the URL above, and select No sign in if prompted for authentication. Finish adding it, then enable it from + β Connectors in your conversation.
For Team and Enterprise workspaces, the connector must first be added under Organization settings β Connectors. See Claude's custom connector setup for details.
Local installation
The easiest way to install Lacuna Research MCP is to ask your coding agent, such as Codex or Claude Code:
Install and configure the
lacuna-research-mcppackage from PyPI for this client.
For manual setup, the instructions below use uvx to run the latest tagged release from PyPI. Install uv first; Lacuna Research MCP requires Python 3.11 or newer.
Codex
Add the server with the Codex CLI:
codex mcp add lacuna-research -- uvx lacuna-research-mcpAlternatively, add the following to ~/.codex/config.toml (or to .codex/config.toml in a trusted project for project-only setup):
[mcp_servers.lacuna-research]
command = "uvx"
args = ["lacuna-research-mcp"]Run codex mcp list to verify the server is configured. The Codex app, CLI, and IDE extension share this configuration on the same machine.
Claude Code
Add the server for all of your projects with the Claude Code CLI:
claude mcp add --scope user lacuna-research -- uvx lacuna-research-mcpOmit --scope user to add it only to the current project. Alternatively, add the following under the top-level mcpServers object in ~/.claude.json:
{
"mcpServers": {
"lacuna-research": {
"type": "stdio",
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}Run claude mcp get lacuna-research to verify the server is configured.
Claude Desktop
Open Settings β Developer β Edit Config, then add the server under mcpServers in claude_desktop_config.json:
{
"mcpServers": {
"lacuna-research": {
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}Restart Claude Desktop after saving the file.
Other MCP clients
For any client that supports local stdio MCP servers, use this standard configuration:
{
"mcpServers": {
"lacuna-research": {
"command": "uvx",
"args": ["lacuna-research-mcp"]
}
}
}Standalone command
Install the MCP server as a persistent command:
uv tool install lacuna-research-mcp
lacuna-research-mcpRun it without installing a persistent command:
uvx lacuna-research-mcpIf this exits with a prerelease error (for example, "Python 3.14.0rc2 is a prerelease..."),
your uv is using an early Python 3.14 prerelease that the MCP SDK does not support.
Update uv (uv self update), install a released Python (uv python install 3.14),
or run uvx --python 3.13 lacuna-research-mcp.
Self-hosted HTTP server
To serve remote MCP clients over Streamable HTTP instead of stdio:
uvx lacuna-research-mcp --transport streamable-http --host 0.0.0.0 --port 8000The endpoint is /mcp. The server is stateless and answers with JSON, so it can run behind a load balancer without session affinity. With the default --host 127.0.0.1, the server accepts only localhost Host headers, so bind a non-loopback address when a reverse proxy forwards a public hostname.
Latest development version
PyPI contains tagged releases. To try the latest code from the main branch instead:
uvx --from git+https://github.com/tiptreesystems/lacuna-research-mcp.git lacuna-research-mcpLocal development
With uv:
git clone https://github.com/tiptreesystems/lacuna-research-mcp.git
cd lacuna-research-mcp
uv sync --extra dev
uv run lacuna-research-mcpWith 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 .Related MCP server: scholar-memory
First use
After connecting the server, call:
search_lacuna(query="LLM jailbreak defense", search_type="hypothesis", limit=10)search_lacuna(query="methods for detecting prompt injection attacks", search_type="paper", limit=10)(production lexical+semantic paper ranking by default)get_hypothesis(hypothesis_id_or_url="bd35de182c2325ae")get_paper(artifact_id_or_url="art_79c57fbfec094f26b79c422cf08fed34")(defaults toview="context")get_direction(cluster_id_or_url=25108)(defaults toview="context")search_lacuna(query="ImageNet", search_type="resource", resource_kind="dataset")(datasets linked to papers; follow up withget_resource)
Scope
The corpus covers machine learning and AI research: papers, research directions, authors' research output, venues, institutions, generated research hypotheses, and research resources (GitHub repositories, Hugging Face datasets and models, Zenodo records) linked to papers. It does not contain biographies, news, or non-research web content. Agents should answer questions outside that scope from other sources.
What it exposes
search_lacunaUses Lacuna's public/api/v1/searchendpoint for directions, papers, authors, venues, institutions, hypotheses, and resources. Explicit paper searches (search_type="paper") use the server's production lexical+semantic ranker when the other ranking arguments remain at their defaults. Passsearch_type="hypothesis"for hypothesis search. Passsearch_type="resource"for code repositories, datasets, models, and demos linked to papers, optionally filtered withresource_kind(codebase,dataset,model,demo) andprovider(github,huggingface,zenodo); for example,resource_kind="dataset"finds benchmark datasets. Resource search rejectsdate_from/date_to,venue, year sorts, and semantic ranking (resources carry no dates, venues, or embeddings).get_hypothesis(hypothesis_id_or_url, view="context")Hypothesis/proposal.view="context"(default) is a compact single-fetch proposal context (summary, abstract, linked directions);view="full"returns the server's version record with version history and signal counts. Proposal bodies are inversions[].markdown.get_direction(cluster_id_or_url, view="context")Research direction/cluster.view="context"(default) requests the compact agent-oriented summary;view="full"returns the raw cluster record.get_direction_papers(cluster_id_or_url, page, limit, view="compact")Paginated papers attached to a direction.view="compact"(default) returns citation-ready rows (id, url, title, year, venue, a few authors, abstract snippet);view="full"returns the raw upstream paper records.get_paper(artifact_id_or_url, view="context", figure_limit=None, include_resources=True)Paper lookup with available versions; use a versionβs artifact ID to read it. Linked resources (code repositories, datasets, models, and demos) are included by default in context and full views; passinclude_resources=Falseto omit them. Other views ignore this option.view="context"(default) requests the compact agent-oriented context; other views are"full","preview","blog","figures","concepts", or"neighbors". In context view,figure_limitcaps the figure preview (server default 3; pass 0 to suppress previews while keeping afigures_truncatedsignal).get_resource(resource_id_or_url)Resource lookup by id (from resource search orget_paper'sresourceslist) or Lacuna/resource/...URL: external URL, summary, facets (tasks, modalities, size, license), provider metrics, README/card excerpt, linked papers underpublications(withpaper_idand relationship such asdataset_for), related directions, and mentioned resources.Author tools:
get_author_context(β¦, view="context"),get_author_papers,get_author_directions, andget_author_neighbors. Start withget_author_context, which defaults to the compact agent-oriented view (capped papers plus a readableimpact_directionslist instead of rawimpact_clusterstelemetry). Use the dedicated papers, directions, and neighbors tools to page through those collections without repeating the author context.view="full"returns the server-bounded full-shape context (collections remain capped at 100). Passinclude_neighbors=trueto explicitly include similar authors; this may add significant server latency.Venue and institution tools:
get_venue_context(β¦, view="context"),get_institution_context(β¦, view="context"),get_institution_authors. Context tools default to compact (capped lists, duplicated blocks dropped; venue keeps a recent-activity slice that always includes the requestedyear). Useget_institution_authorsto page through an institution's complete author list.
Wrapped APIs
MCP tool | Lacuna API endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For id-or-URL arguments, pass either the raw id returned by search_lacuna or the corresponding Lacuna page URL. The MCP normalizes Lacuna-relative url and *_url fields to absolute URLs, and it also absolutifies Lacuna links (including /resource/... pages) inside fields named summary_markdown, article_markdown, markdown, content, or description.
get_author_context is bounded server-side in both views. The default compact view returns a curated briefing; view="full" returns the larger complete shape with embedded collections capped at 100. Use get_author_papers and get_author_directions rather than trying to page embedded context collections.
Search requests are capped at 50 results per call, and direction-paper page
requests are capped at 100 results per call.
In search_lacuna, date_from and date_to are inclusive publication-date
bounds. Accepted formats are YYYY, YYYY-MM, and YYYY-MM-DD; for example,
date_from="2020", date_to="2022-03" includes papers from January 1, 2020
through March 31, 2022.
search_lacuna exposes these ranking profiles:
default/lexicalThe default profile for all searches. Withsearch_type="paper",sort="relevance", andfieldsunset, it uses the server's production lexical+semantic ranker with graceful fallback. The MCP's defaultsearch_type="all"uses the server's default lexical ranking instead.semanticUse for embedding-based paper retrieval. The semantic query omits the normal lexical ranking leg, but the server can still overlay exact-title lexical matches. Only supported forpaperandallsearches (only papers have semantic embeddings), and not withresource_kind/providerfilters.bm25_title_abstract/bm25Use for lexical matching constrained to title and abstract. Rejected forauthorandinstitutionsearches (those records have no title or abstract fields).
All searches use the server default unless ranking_profile is provided. The MCP rejects unsupported profile/type combinations because the server would otherwise fall back to substring search and silently ignore the requested ranking profile.
sort accepts relevance (default), year_desc, and year_asc. Year sorts cannot be combined with ranking_profile="semantic" β the server would silently ignore the sort β so the MCP rejects that combination; for recent-and-relevant queries, keep semantic ranking and constrain recency with date_from/date_to instead.
Environment variables
LACUNA_SITE_URLDefaults tohttps://lacuna.tiptreesystems.comLACUNA_MCP_TIMEOUTDefaults to30LACUNA_MCP_MAX_RETRIESDefaults to2; applies to timeouts, transport errors, and HTTP429,502,503, and504responses.LACUNA_MCP_USER_AGENTDefaults tolacuna-research-mcp/{package_version}LACUNA_MCP_BEARER_TOKENOptional bearer token sent asAuthorization: Bearer ...for private Lacuna deployments.LACUNA_MCP_CLIENT_TOKENOptional token sent asX-Lacuna-Client-Tokento identify a hosted MCP server to Lacuna for its own search rate limit.LACUNA_MCP_LOG_LEVELDefaults toWARNING(one ofDEBUG,INFO,WARNING,ERROR,CRITICAL). The default keeps normal operation quiet; lower it only for debugging, sinceINFO/DEBUGlet the HTTP client log full request URLs β including the search query string β to stderr, which some MCP hosts retain.
Environment variables are read once when the MCP server is created, or on the first direct tool/API call if the module is imported without calling create_mcp().
Implementation layout
The server is a thin MCP adapter over Lacuna's HTTP API. The implementation is split by responsibility:
lacuna_research_mcp/server.pyMCPServer app creation, tool registration, lifespan cleanup, and thelacuna-research-mcpCLI entrypoint.lacuna_research_mcp/tools.pyMCP tool functions. Each tool normalizes its inputs, calls the matching Lacuna API endpoint through the shared client helpers, and returns JSON-compatible data.lacuna_research_mcp/client.pyRuntime HTTP access to Lacuna: the event-loop-boundhttpx.AsyncClient, retry handling, error wrapping, JSON parsing, URL normalization on responses, andapi_get/api_object/api_payload.lacuna_research_mcp/config.pyRuntime constants,RuntimeConfig, package user-agent construction, and environment parsing.lacuna_research_mcp/ids.pyHelpers that accept either raw ids or Lacuna page URLs and extract safe API path segments.lacuna_research_mcp/normalize.pyResponse post-processing for relative Lacuna URLs and markdown links.lacuna_research_mcp/errors.pyUser-facing exception type for Lacuna API access failures.
Notes
get_paperandget_directiondefault toview="context". These context views request Lacuna's compact agent-oriented payloads by default to keep MCP responses small. Paper context includessummary_markdownwhen available (otherwiseabstract), authors, and figures; direction context includessummary_markdown, capped papers/authors/related directions, and truncation markers. Useview="full"when you need the raw metadata, and the other paper views (preview,blog,figures,concepts,neighbors) when you want one isolated sub-resource.An explicit relevance-sorted paper search with no custom
fieldsdefaults to the server's production lexical+semantic ranker. Setranking_profile="semantic"for embedding-based retrieval (with a possible exact-title overlay) or"bm25_title_abstract"for title-and-abstract lexical matching.Most detail tools accept either the id returned by search or the corresponding Lacuna URL.
Relative Lacuna URLs in
url/*_urlresponse fields and fields namedsummary_markdown,article_markdown,markdown,content, ordescriptionare normalized to absolute URLs.Venue and institution keys are opaque hashes (for example
d7bf22905bd6), never human-readable names likeicml. Find the key withsearch_lacuna(search_type="venue")first, or pass a/venue/...page URL.
Citation
If you find our work helpful, feel free to cite the papers behind Lacuna's research-proposal generation and research map.
Research-proposal generation β 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}
}Research map β 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}
}License
MIT. See LICENSE.
Available Tools
13 toolsget_author_contextGet AuthorARead-onlyIdempotentInspect
Fetch agent-oriented context for a Lacuna author.
Author profiles describe research output (papers, directions, impact). A
free-text affiliation field may be present but can be incomplete or
outdated and may not represent current employment; the corpus has no
biography or employment history, so do not infer those from this data.
view selects the response shape:
"context" (default, recommended): Lacuna's compact author context β capped readable papers and an
impact_directionslist (named research directions) in place of the raw numericimpact_clusterstelemetry, with the duplicated nested author record dropped server-side."full": the bounded full-shape author context (raw
impact_clusters, nested author record; server collections are capped at 100).
Set include_neighbors=True to include similar authors as named, linkable records. Neighbor computation may add significant server latency.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| author_id_or_url | Yes | ||
| include_neighbors | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/idempotent/openWorld annotations already covering safety, the description adds real beyond-schema context: the affiliation field can be stale so employment must not be inferred, view='context' drops the nested author record and swaps numeric impact_clusters for impact_directions, server collections cap at 100, and neighbor computation adds significant latency. This is exactly the operational nuance an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the data-quality caveat, then a clearly enumerated view section, then the neighbor flag. Every block is structured and earns its place; it is slightly long but the length is justified by the two response shapes it must disambiguate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be re-explained, and the description still covers the response-shape differences, caps, and latency. It is complete for correct invocation, missing only explicit sibling routing, which is minor given the output schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameters and it largely does: it enumerates both view enum values with distinct semantics and explains what include_neighbors adds along with its latency cost. Only author_id_or_url goes undocumented, but its meaning is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch agent-oriented context for a Lacuna author') and clarifies via the view section that it returns an aggregate context (papers plus impact_directions). However, it never explicitly distinguishes itself from siblings like get_author_papers, get_author_directions, or get_author_neighbors, leaving the agent to infer that this is the composite entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides implied guidance by marking view='context' as 'recommended' and explaining what each mode does. But there is no explicit when-to-use-this-vs-alternatives statement, e.g. when to call get_author_context rather than get_author_papers or get_author_neighbors, which is exactly the ambiguity an agent faces with these siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_directionsList Author DirectionsBRead-onlyIdempotentInspect
Fetch one page of an author's named research directions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| author_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description's only added behavioral detail is that results are paged ('one page'), which is useful but thin; it says nothing about ordering, total counts, or how paging interacts with offset/limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is appropriate for a simple list tool. It is efficient, though almost too terse for a tool with an undocumented identifier parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, with zero schema description coverage, no sibling differentiation, and no explanation of the required author identifier, the description is only minimally sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description must compensate and largely does not. The phrase 'one page' hints at limit/offset semantics, but the critical author_id_or_url parameter is never explained β no indication of accepted ID format versus URL form.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetching an author's named research directions, scoped to a single page. It is clear what the tool returns, though it never distinguishes itself from close siblings like get_direction or get_direction_papers, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. Given siblings such as get_direction (single direction) and get_direction_papers (papers within a direction), the description should say when to list an author's directions versus drilling into one, but it leaves that entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_neighborsList Similar AuthorsCRead-onlyIdempotentInspect
Fetch one ranked page of neighboring/similar Lacuna authors.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| author_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that results are ranked and paged, but does not explain how neighbors are computed, whether a missing author errors, or rate limits. Some added context, but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its extreme brevity leaves the definition under-specified rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but with three undocumented parameters and no usage guidance, an agent cannot confidently supply limit/offset or know what a 'neighbor' is. The definition is incomplete for a paginated, ranked query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for all three parameters, so the description must compensate and does not. It never mentions author_id_or_url, limit, or offset, leaving the pagination contract entirely undocumented. Only vague hints ('one ranked page') gesture at limit/offset.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (fetch) plus resource (neighboring/similar authors) and scope (one ranked page). It distinguishes itself from siblings like get_author_papers and get_author_directions by focusing on similar authors, though it never defines what 'neighboring' authors actually are.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus other author-related siblings, nor what prerequisite (a valid author id/URL) is needed. The word 'page' implies pagination but no conditions or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_papersList Author PapersBRead-onlyIdempotentInspect
Fetch one page of an author's papers, ordered from newest to oldest.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| author_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is fully covered elsewhere. The description contributes the ordering behavior (newest to oldest) and that results are paged, which is genuine but modest added context; it says nothing about pagination mechanics or the open-world nature of author resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that conveys resource, paging scope, and ordering with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a tool with three undocumented parameters, the description only covers ordering and the fact of paging; it omits the accepted author identifier format and how to move to subsequent pages, leaving real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it largely does not. "One page" gestures at limit/offset but gives no page-size or pagination semantics, and author_id_or_url is never explained even though the name implies it accepts either a raw ID or a URL of differing formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (an author's papers) plus the ordering, which is enough to distinguish it from single-item siblings like get_paper and get_direction_papers. It never names an alternative or explicitly contrasts with them, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer you call this to list an author's works, but there is no guidance on when to prefer this over search_lacuna, get_paper, or get_direction_papers, and no stated prerequisites (e.g. an author must already be resolved). No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directionGet Research DirectionARead-onlyIdempotentInspect
Fetch a Lacuna research direction/cluster.
Use a numeric cluster ID (for example 25005) or a direction URL ending in that number.
view selects the response shape (context typically contains the fields
full provides plus the agent-oriented summary content):
"context" (default, recommended): compact agent-oriented summary with summary_markdown, capped papers/authors/related_directions, and truncation markers.
"full": raw upstream cluster record only. Cheaper than context when you only need basic cluster metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| cluster_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, idempotent, and non-destructive. The description adds valuable context beyond them: the two response shapes, that 'context' is default/recommended, and that 'full' is cheaper for basic metadata. This is useful behavioral detail about output size and cost trade-offs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and input forms, then a bulleted breakdown of view options. Structurally clear, though the parenthetical about context containing full-provided fields is slightly convoluted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param read-only tool with an output schema, the description covers both parameters, the default view, and the response-shape trade-offs. It omits what the output schema already covers, which is appropriate. Minor gap: no mention of error behavior for invalid IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it explains the accepted formats for cluster_id_or_url (numeric ID or URL ending in the number) and the view enum semantics with defaults and cost trade-offs. The only gap is that the URL format is not exactly specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (Lacuna research direction/cluster). It does not explicitly differentiate from siblings like get_hypothesis or get_direction_papers, but the resource noun 'direction/cluster' is distinct enough for an agent to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the input forms (numeric ID or URL) and the view semantics, implying usage, but never states when to prefer this tool over get_direction_papers or search_lacuna. No exclusions or alternative-routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_direction_papersList Direction PapersARead-onlyIdempotentInspect
Fetch paginated papers associated with a Lacuna research direction/cluster.
view selects the per-paper shape:
"compact" (default, recommended): citation-ready rows (id, url, title, year, venue, a few authors, abstract snippet). Drops the raw upstream info blob and levels.cluster internals that otherwise dominate the payload.
"full": the complete upstream paper records. Much larger; use only when you need the raw metadata (openalex/dblp/arxiv ids, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| view | No | compact | |
| limit | No | ||
| cluster_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description goes beyond that by disclosing a real behavioral trait: 'full' returns 'much larger' raw upstream records whose info blobs 'dominate the payload', which helps the agent reason about cost. It stops short of mentioning pagination limits or rate behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and the two-view breakdown is well structured as a scannable list. The parenthetical enumerations ('openalex/dblp/arxiv ids, etc.') are slightly padded but each clause carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the view description compensates by characterizing the payload shape. What remains thin is pagination mechanics and the alternate URL form of the cluster argument, which are gaps but not blockers for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it fully documents the `view` enum with per-value payload tradeoffs. It leaves `page`, `limit`, and `cluster_id_or_url` unexplained beyond the word 'paginated', and notably never says the cluster argument also accepts a URL despite the parameter name. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Fetch paginated papers associated with a Lacuna research direction/cluster'), which is unambiguous about what comes back. It does not explicitly distinguish itself from siblings like get_direction or get_paper, so the agent must infer the boundary, but the 'papers associated with a direction' framing is clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives solid when-to-use guidance for the `view` option ('compact' default/recommended, 'full' only when raw metadata is needed), which is genuinely useful. However it says nothing about when to call this tool versus get_direction, get_paper, or search_lacuna, so the tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hypothesisGet Research ProposalARead-onlyIdempotentInspect
Fetch a generated novel ML/AI research proposal from Lacuna.
Use after search_lacuna(search_type="hypothesis") to inspect a proposal.
view selects the response shape:
"context" (default, recommended): compact single-fetch proposal context β summary_markdown, abstract, and linked directions, with the raw upstream record (whose markdown duplicates summary_markdown) dropped server-side.
"full": the server's version record, including version history and signal counts. Proposal bodies are in versions[].markdown. Use only when you need versions or signals.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| hypothesis_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the "context" view drops the raw upstream record server-side (whose markdown would duplicate summary_markdown), and "full" exposes version history and signal counts with bodies in versions[].markdown. It stops short of describing error behavior for an invalid or unresolvable id/URL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a usage line and a tight bulleted breakdown of the enum. Every sentence earns its place; no restatement of the schema's enum list or boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be documented, yet the description usefully clarifies the two response shapes and where proposal bodies live. Combined with the annotations and the idempotent read-only profile, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It fully explains the view enum β both values, the default, which is recommended, and the cost/benefit of each β but only implies the format of hypothesis_id_or_url through its name, without stating accepted ID vs URL forms.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (a generated ML/AI research proposal) plus the source system, Lacuna. It also positions itself relative to sibling tools by naming search_lacuna with search_type="hypothesis" as the prerequisite step, so an agent can place it in the workflow without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('Use after search_lacuna(search_type="hypothesis")') and gives per-value guidance for the view parameter, including a when-not ('Use only when you need versions or signals' for "full"). This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_institution_authorsList Institution AuthorsBRead-onlyIdempotentInspect
Fetch one page of authors affiliated with a Lacuna institution.
Results are ordered by paper count. Use authors_total, authors_returned, authors_offset, and authors_truncated to page through the complete list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| institution_key_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely new behavioral context beyond that: results are ordered by paper count, and it names the specific response fields used for paging.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, opening with the core action and following with ordering and pagination notes. Each sentence carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, return values need not be restated. However, for a tool with three inputs, it omits the meaning/format of institution_key_or_url and does not tie the limit/offset inputs to the described paging behavior, leaving a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It references output fields (authors_offset, authors_truncated) but never documents the input parameters limit or offset, nor the expected format of institution_key_or_url. It fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch one page of authors affiliated with a Lacuna institution.' It clearly communicates the resource scope (institution-affiliated authors), though it does not explicitly contrast with siblings like get_author_papers or get_institution_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives implied usage via pagination guidance ('page through the complete list'), which signals this is a paged listing tool. However, there is no explicit when-to-use/when-not statement or routing to alternatives such as get_institution_context or get_author_papers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_institution_contextGet InstitutionARead-onlyIdempotentInspect
Fetch agent-oriented context for a Lacuna institution.
view selects the response shape:
"context" (default, recommended): compact institution context β capped top authors with the duplicated institution block dropped server-side.
"full": the complete institution context shape (duplicated institution record and a bounded author list with explicit truncation metadata).
Use get_institution_authors to page through the complete author list.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| institution_key_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds genuine behavioral detail beyond that: the compact view drops the duplicated institution block server-side, and the full view exposes explicit truncation metadata β useful for reasoning about response size and completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a clean bulleted breakdown of the view values, closing with the sibling pointer. The prose is a bit exposition-heavy in the two bullets but every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still characterizes each response shape well. The only real gap is the undocumented institution identifier parameter, which the agent must interpret from the name alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It fully documents 'view' (both enum values, default, recommended choice), but says nothing about institution_key_or_url β whether it accepts a slug, key, or URL. One of two parameters is well covered; the other is left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (agent-oriented context for a Lacuna institution), and distinguishes itself from get_institution_authors by naming that sibling's role for paging. The phrase 'agent-oriented context' is slightly abstract, but the view parameter explanation resolves most ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance for choosing between the two view modes, flags 'context' as the recommended default, and routes the agent to get_institution_authors for complete author pagination. It lacks guidance on when not to use this tool (e.g., vs get_author_context or search_lacuna), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperGet PaperARead-onlyIdempotentInspect
Fetch a Lacuna paper by artifact id or paper URL.
include_resources adds linked resources (code repositories, datasets, models, and demos) in context and full views by default. Pass False to omit them; other views ignore this option. Pass a resource entry's id to get_resource for further details.
view selects the response shape. context requests Lacuna's compact
agent-oriented context by default, while the four single-field views
(blog/figures/concepts/neighbors) return isolated sub-resources:
"context" (default, recommended): agent-oriented summary with summary_markdown, authors, and a small figure preview. Start here for almost everything. Available versions are included when present; to read another version, use its artifact ID from the returned version list.
"full": raw upstream paper record. Cheaper than context when you only need basic metadata.
"preview": compact card with unique fields
excerpt,excerpt_kind,bookmarked. Use for citation-style display."blog": just the summary_markdown content, without the rest of the context envelope.
"figures": just the figures list.
"concepts": just the concepts list.
"neighbors": just the related-papers list.
figure_limit (context view only) caps the figure preview (server default 3).
Pass 0 to suppress figure previews while keeping a figures_truncated signal.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| figure_limit | No | ||
| include_resources | No | ||
| artifact_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world, so the safety profile is covered. The description goes well beyond them: it explains the include_resources default and that non-context views ignore it, that figure_limit only affects context view and that 0 suppresses previews while keeping a truncation signal, and that versions are surfaced for follow-up fetches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then uses tight bullets per view where each line earns its place. It is somewhat long, but the length is justified by seven enum values and three documented parameters; a few clauses (e.g., repeated mention of context-view-only options) could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the four parameters, the default view, resource inclusion, and figure limiting, and even outlines the response shape of each view despite an output schema existing. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description carries the full burden and does so thoroughly: all seven `view` enum values are defined with what each returns, `include_resources` default and view-specific behavior are stated, and `figure_limit`'s default, scope, and 0-value semantics are explained. This is exactly the compensation a 0%-coverage schema requires.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Fetch") and resource ("a Lacuna paper") plus the two accepted identifier forms (artifact id or paper URL). It is immediately distinguishable from siblings like get_hypothesis, get_direction, and get_resource, which fetch different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance per view: "context (default, recommended)... Start here for almost everything," "preview... Use for citation-style display," and "full... Cheaper than context when you only need basic metadata." It also routes the agent to the sibling get_resource for deeper resource details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resourceGet ResourceARead-onlyIdempotentInspect
Fetch a Lacuna research resource (code repository, dataset, model, or demo).
Accepts a resource artifact ID (art_...) or a Lacuna resource URL containing that ID (/resource//art_...).
The response includes the external url, a summary, facets (tasks, modalities,
size, license, access), provider metrics, a README/card excerpt,
publications (linked papers with paper_id, title,
venue, year, and relationship such as dataset_for or code_for), related
research directions, and other resources mentioned by this one. Pass a
publication's paper_id to get_paper to read the paper and its reported
results.
| Name | Required | Description | Default |
|---|---|---|---|
| resource_id_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond that: it discloses the shape of the payload (facets, provider metrics, README/card excerpt, publications with relationship types) and the cross-tool handoff to get_paper.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and input contract, then the return contents. The mid-section becomes a long comma-separated enumeration of response fields, some of which the output schema already carries, so a few tokens are not fully earning their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the essentials are covered: what the resource types are, the accepted identifier formats, what comes back, and how to chain into get_paper. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for the single parameter β and it does, specifying both an art_... artifact ID and a URL form embedding that ID. It could be stronger by noting failure behavior for malformed IDs or non-Lacuna URLs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (Lacuna research resource), then immediately disambiguates what a 'resource' is by enumerating its four types (repository, dataset, model, demo). No sibling tool targets the same object, so the agent can route here without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two acceptable input forms (art_... ID or a /resource/<slug>/art_... URL) and gives a concrete follow-on path: pass a returned publications paper_id to get_paper. It lacks an explicit 'when not to use this' or a pointer back to search_lacuna for discovering IDs, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_venue_contextGet VenueARead-onlyIdempotentInspect
Fetch agent-oriented context for a Lacuna venue, optionally scoped to a year.
Venue keys are opaque hashes (e.g. "d7bf22905bd6"), never human-readable names like "icml". Find the key first via search_lacuna(search_type="venue") or pass a /venue/... page URL.
view selects the response shape:
"context" (default, recommended): compact venue context β capped top authors, non-placeholder top clusters, and a recent-activity slice (the requested
yearis always included), with the duplicated venue block and full year histogram dropped server-side."full": the complete venue context (full year histogram, all top authors/ clusters, duplicated venue record).
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | context | |
| year | No | ||
| venue_key_or_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds real behavioral detail: the 'context' view drops the duplicated venue block and full year histogram server-side, caps top authors, and always includes the requested year. It stops short of noting result-size limits or pagination, but the response-shaping behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a key-format warning, then a structured bullet list for the view enum. No filler sentences; each block maps to a decision the caller must make.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers everything else needed to call correctly: input format, key discovery path, view trade-off, and year semantics. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: it explains the opaque-hash format and URL alternative for venue_key_or_url, defines both enum values of view with concrete content differences, and clarifies that year is always included in the recent-activity slice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch agent-oriented context for a Lacuna venue') plus the optional scoping dimension (year). It is immediately distinguishable from siblings like get_author_context, get_institution_context, and search_lacuna.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent how to obtain the required input ('find the key first via search_lacuna(search_type="venue") or pass a /venue/... page URL') and gives a clear when-to-use rule for each view, marking 'context' as default and recommended over 'full'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_lacunaSearch LacunaARead-onlyIdempotentInspect
Search Lacuna's ML/AI corpus for papers, research directions, authors, venues, institutions, novel research hypotheses, and research resources (code repositories, datasets, models, and demos linked to papers).
For novel ML/AI research ideas, use search_type="hypothesis", then get_hypothesis on promising results.
search_type accepts all, cluster, paper, author, institution, venue, hypothesis, or resource. Use paper for literature and get_paper to read a result. Use other sources for biographies, news, and non-research web content.
Resources: search_type="resource" searches GitHub repositories, Hugging
Face datasets/models, and Zenodo records that Lacuna has linked to at least
one paper. To find benchmark or evaluation datasets, use
search_type="resource" with resource_kind="dataset" (for example query
"image classification benchmark" or a dataset name like "ImageNet").
resource_kind accepts codebase, dataset, model, or demo (one value or a
list); provider accepts github, huggingface, or zenodo. Both filters require
search_type "resource" or "all" (with either filter set, only resources are
returned). Each result has an external url, a Lacuna context_url, and
linked_paper_count; call get_resource on its id to list the linked papers
(with their relationship to the resource), then get_paper on those papers
for reported results and numbers. Resource search does not support
date_from/date_to, venue, year sorting, or semantic ranking.
ranking_profile accepts:
default / lexical (default): production ranking; relevance-sorted paper searches combine lexical and semantic retrieval when fields is unset.
semantic: conceptual paper retrieval; supported for paper and all.
bm25_title_abstract / bm25: lexical paper matching over those fields.
sort accepts relevance (default), year_desc, or year_asc. Semantic ranking cannot use year sorting; constrain recency with date_from/date_to instead. date_from and date_to are inclusive YYYY, YYYY-MM, or YYYY-MM-DD bounds. author_id_or_url constrains a paper search to one author. Pass an author ID or Lacuna author page URL; it requires search_type="paper".
fields optionally restricts and weights lexical fields, for example "title^4,abstract". Supported names are title, abstract, summary, concepts, name, top_names, and venue, plus description, topics, provider_key, and paper_titles for resources (a resource's title already includes its description, topics, README text, and linked paper titles). Fields must exist on the selected search_type, weights must be within 0 < weight <= 100, and fields cannot be combined with semantic ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance | |
| limit | No | ||
| query | Yes | ||
| venue | No | ||
| fields | No | ||
| offset | No | ||
| date_to | No | ||
| provider | No | ||
| date_from | No | ||
| search_type | No | all | |
| resource_kind | No | ||
| ranking_profile | No | ||
| author_id_or_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the bar is lower, yet the description adds substantial operational context: resource search constraints (no date_from/date_to, venue, year sorting, or semantic ranking), that resource_kind/provider filters require search_type 'resource' or 'all', that author_id_or_url requires 'paper', and that semantic ranking cannot use year sorting. These combination rules are the main reason this scores well; it stops short of describing pagination or result-count behavior for the general case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the tool has 13 parameters with zero schema documentation, so most sentences are load-bearing and each paragraph maps to a coherent theme (purpose, routing, resources, ranking, filters). It is front-loaded with purpose and alternatives; density is high but waste is low.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description instead covers what the schema cannot: filter compatibility rules, ranking-mode restrictions, and the get_paper/get_resource follow-up path including linked_paper_count and context_url. Combined with the annotations covering safety semantics, an agent has enough to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 13 params, so the description carries the full burden and largely meets it: search_type values, resource_kind values, provider values, ranking_profile options, sort options, date bound formats (YYYY / YYYY-MM / YYYY-MM-DD, inclusive), author_id_or_url input format, and fields names/weight syntax (0 < weight <= 100) are all spelled out. limit, offset, and the purpose of venue outside the resource caveat are left undocumented, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Search Lacuna's ML/AI corpus for papers, research directions, authors, venues, institutions, novel research hypotheses, and research resources.' It enumerates exactly what entity types are covered, letting an agent separate this broad search tool from the narrow get_paper/get_resource/get_hypothesis siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is provided: 'For novel ML/AI research ideas, use search_type="hypothesis", then get_hypothesis on promising results', and 'Use paper for literature and get_paper to read a result' with a stated exclusion ('Use other sources for biographies, news, and non-research web content'). It also names follow-on tools (get_resource, get_paper) and the conditions that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.5.1- Added
get_resource - Removed
get_work - Changed
search_lacuna2 fields changed- added
Input schema / properties / providerAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" +} - added
Input schema / properties / resource_kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resource Kind" +}
3 tool updates
v0.3.0- Changed
get_paper1 field changed- added
Input schema / properties / include_resourcesAdded value: +{ + "default": true, + "title": "Include Resources", + "type": "boolean" +}
- Added
get_work - Changed
search_lacuna1 field changed- added
Input schema / properties / author_id_or_urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Author Id Or Url" +}
12 tool updates
v0.2.0- First observed
get_author_context - First observed
get_author_directions - First observed
get_author_neighbors - First observed
get_author_papers - First observed
get_direction - First observed
get_direction_papers - First observed
get_hypothesis - First observed
get_institution_authors - First observed
get_institution_context - First observed
get_paper - First observed
get_venue_context - First observed
search_lacuna
TDQS
Scored across 13 tools
Tools target distinct entity types (paper, resource, author, venue, institution, direction, hypothesis) with a clear search vs fetch split. Minor overlap exists between context tools (e.g., get_author_context) and dedicated list tools (get_author_papers, get_author_directions), but descriptions clarify usage through capping and pagination notes.
All tool names use snake_case with a consistent verb_noun pattern: search_lacuna for search, get_* for retrieval, and compound names like get_author_papers follow a predictable entity_subresource structure.
13 tools is well within the recommended 3-15 range for a complex research corpus. Each tool covers a distinct resource or sub-resource, and no tool appears redundant given the breadth of the domain.
The surface covers search and detailed retrieval for papers, resources, authors, directions, hypotheses, venues, and institutions. Minor gaps exist for paginated venue or institution paper listings (workarounds via search exist), but the core read-only workflows are well-supported.
Maintenance
Related MCP Connectors
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP β built for coding agents.
Knowledge Network for AI Agents and creators: Search, rate, and review programming guides via MCP
Shared, peer-validated knowledge archive for AI agents β search, contribute, and validate via MCP
- WauldoOAuthcom.wauldo
Stateless agentic tools over MCP: concept extraction, long-context, knowledge graph, planning.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search code by meaning, explore codebase structure, store and query knowledge with temporal facts, and read source code through a set of MCP tools.203 npm7MIT
- AlicenseNot gradedqualityDmaintenanceEnables scientific literature research through multi-agent search, analysis, and semantic memory, exposing 9 MCP tools for querying, storing, and retrieving research findings.1MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search and retrieve academic papers, author profiles, and citation data from the Scopus database via MCP tools.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to explore a repository map via MCP, with tools for briefs, scoping, symbol lookup, module details, and freshness checks.4 npmMIT