Skip to main content
Glama

get_fulltext

Retrieve full-text articles from multiple open-access sources using PMID, PMCID, or DOI. Automatically searches Europe PMC, Unpaywall, CORE, and more to find available fulltext.

Instructions

šŸ”„ Enhanced multi-source fulltext retrieval.

Automatically tries multiple sources to find the best fulltext:

  1. Europe PMC (if PMC ID available)

  2. Unpaywall (finds OA versions via DOI)

  3. Institutional direct/EZproxy fetch (when DOI-backed and enabled)

  4. CORE (open-access repository metadata and available text)

With extended_sources=True, also searches: 5. CrossRef (publisher links) 6. DOAJ (Gold OA journals) 7. Zenodo (research repository) 8. PubMed LinkOut (external providers) 9. Semantic Scholar, OpenAlex, arXiv, bioRxiv, medRxiv

source is a discriminated identifier object, so the schema itself requires exactly one explicit PMID, PMCID, or DOI kind.

Args: source: One object such as {"kind":"pmid","value":"12345678"}, {"kind":"pmcid","value":"PMC7096777"}, or {"kind":"doi","value":"10.1001/jama.2024.1234"}. sections: Filter sections (e.g., "introduction,methods,results") include_pdf_links: Include PDF download links (default: True) include_figures: Include figure metadata with image URLs (default: False) extended_sources: Search the extended downloader chain after the standard policy (default: False) output_format: Response format - "markdown" (default), "json", or "toon" allow_browser_session: Control browser-session fallback. - True: force broker fallback when configured - False: disable broker fallback - None: use auto mode from broker configuration

Returns: Fulltext content with PDF links from all available sources.

Example: get_fulltext(source={"kind":"pmcid","value":"PMC7096777"}) get_fulltext(source={"kind":"doi","value":"10.1038/s41586-021-03819-2"})

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceYes
sectionsNo
output_formatNomarkdown
include_figuresNo
extended_sourcesNo
include_pdf_linksNo
allow_browser_sessionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv0.7.2
    • addedInput schema / $defs
      Added value: +{
      +  "DOISource": {
      +    "additionalProperties": false,
      +    "description": "An explicit DOI.",
      +    "properties": {
      +      "kind": {
      +        "const": "doi",
      +        "title": "Kind",
      +        "type": "string"
      +      },
      +      "value": {
      +        "maxLength": 512,
      +        "minLength": 7,
      +        "pattern": "^10\\.[0-9]{4,9}/",
      +        "title": "Value",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "value"
      +    ],
      +    "title": "DOISource",
      +    "type": "object"
      +  },
      +  "PMCIDSource": {
      +    "additionalProperties": false,
      +    "description": "An explicit PubMed Central identifier.",
      +    "properties": {
      +      "kind": {
      +        "const": "pmcid",
      +        "title": "Kind",
      +        "type": "string"
      +      },
      +      "value": {
      +        "maxLength": 23,
      +        "pattern": "^PMC[1-9][0-9]{0,19}$",
      +        "title": "Value",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "value"
      +    ],
      +    "title": "PMCIDSource",
      +    "type": "object"
      +  },
      +  "PMIDSource": {
      +    "additionalProperties": false,
      +    "description": "An explicit PubMed identifier.",
      +    "properties": {
      +      "kind": {
      +        "const": "pmid",
      +        "title": "Kind",
      +        "type": "string"
      +      },
      +      "value": {
      +        "maxLength": 20,
      +        "pattern": "^[1-9][0-9]{0,19}$",
      +        "title": "Value",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "value"
      +    ],
      +    "title": "PMIDSource",
      +    "type": "object"
      +  }
      +}
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / doi
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Doi"
      -}
    • removedInput schema / properties / identifier
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Identifier"
      -}
    • removedInput schema / properties / pmcid
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Pmcid"
      -}
    • removedInput schema / properties / pmid
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Pmid"
      -}
    • changedInput schema / properties / sections / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 500,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / source
      Added value: +{
      +  "discriminator": {
      +    "mapping": {
      +      "doi": "#/$defs/DOISource",
      +      "pmcid": "#/$defs/PMCIDSource",
      +      "pmid": "#/$defs/PMIDSource"
      +    },
      +    "propertyName": "kind"
      +  },
      +  "oneOf": [
      +    {
      +      "$ref": "#/$defs/PMIDSource"
      +    },
      +    {
      +      "$ref": "#/$defs/PMCIDSource"
      +    },
      +    {
      +      "$ref": "#/$defs/DOISource"
      +    }
      +  ],
      +  "title": "Source"
      +}
    • addedInput schema / required
      Added value: +[
      +  "source"
      +]
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "result": {
      -      "title": "Result",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "title": "get_fulltextOutput",
      -  "type": "object"
      -}New value: +null
  2. First observedv0.5.16

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the source-selection order, extended source behavior, browser-session fallback semantics, and the return shape. This is valuable beyond the annotations, which only provide openWorldHint and non-destructive flags. It does not mention potential side effects like external network calls or rate limits, but it covers the core behavioral traits well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every section earns its place: source priority list, extended sources, per-parameter semantics, return value, and examples. It is well-structured with clear headings and no filler, making it easy for an agent to parse and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, 0% schema description coverage, and no output schema, the description is thorough enough to allow correct invocation. It covers all parameter meanings, defaults, source input formatting, behavior, and return content. No critical operational detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 parameters. It explains every parameter, gives concrete source object examples, clarifies output_format choices, and details allow_browser_session's three modes. This substantially exceeds what the raw schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves fulltext from multiple sources, with a specific priority chain and a source discriminated-union requirement. It distinguishes itself from sibling tools by emphasizing multi-source fulltext retrieval rather than metadata-only or figure-specific operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when fulltext is needed and source identifiers (PMID, PMCID, DOI) are available. It also explains how to broaden retrieval with extended_sources. It does not explicitly name alternative sibling tools or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.