# Lacuna Research MCP

> Search Lacuna's ML research graph for papers, directions, authors, venues, and hypotheses.

- name: io.github.tiptreesystems/lacuna-research-mcp
- version: 0.6.5
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 89/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.tiptreesystems%2Flacuna-research-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.tiptreesystems%2Flacuna-research-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "lacuna-research-mcp": {
      "type": "http",
      "url": "https://lacuna.tiptreesystems.com/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 99
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-97% +updated-3d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 13 of 13 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,940 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 13 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 32 resolved packages
- pass `deps.mcp_sdk_version`: mcp 2.3.0, no known advisory
- pass `deps.resolvable`: lacuna-research-mcp@0.6.5 resolved: 32 packages

- tools: 13, about 3,940 tokens to load them all
- tool set hash: 2c0c77403ca971c12c6155ebd3507096
- tools last changed: 2026-10-13T09:38:54.125Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.tiptreesystems/lacuna-research-mcp.svg)](https://protogrid.dev/servers/io.github.tiptreesystems/lacuna-research-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-13 `get_institution_authors` changed (annotations)
- 2026-10-13 `get_institution_context` changed (annotations)
- 2026-10-13 `get_venue_context` changed (annotations)
- 2026-10-13 `get_author_neighbors` changed (annotations)
- 2026-10-13 `get_author_context` changed (annotations)
- 2026-10-13 `get_author_directions` changed (annotations)
- 2026-10-13 `get_author_papers` changed (annotations)
- 2026-10-13 `get_resource` changed (annotations)
- 2026-10-13 `get_paper` changed (annotations)
- 2026-10-13 `get_direction_papers` changed (annotations)

Full history: https://api.protogrid.dev/v1/servers/io.github.tiptreesystems%2Flacuna-research-mcp/changes

## Dependencies

- pypi lacuna-research-mcp@0.6.5: resolved, 31 dependencies, MCP SDK mcp 2.3.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://lacuna.tiptreesystems.com/api/mcp (streamable-http, auth none, reachable true, uptime30d 0.96666664)

## Packages

- pypi lacuna-research-mcp@0.6.5

## Tools (13)

- `get_author_context`: 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_directions` list (named research directions)
      in place of the raw numeric `impact_clusters` telemetry, 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.
    
- `get_author_directions`: Fetch one page of an author's named research directions.
- `get_author_neighbors`: Fetch one ranked page of neighboring/similar Lacuna authors.
- `get_author_papers`: Fetch one page of an author's papers, ordered from newest to oldest.
- `get_direction`: 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.
    
- `get_direction_papers`: 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.).
    
- `get_hypothesis`: 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.
    
- `get_institution_authors`: 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.
    
- `get_institution_context`: 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.
    
- `get_paper`: 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.
    
- `get_resource`: 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/<slug>/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.
    
- `get_venue_context`: 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
      `year` is 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).
    
- `search_lacuna`: 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.
    
