Skip to main content
Glama

get_fulltext

Retrieve full text for an article using PMID, PMCID, or DOI from multiple sources. Returns body sections, figures, and PDF links.

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 body sections (e.g., "introduction,methods,results"). Missing titles are reported with available sections; abstracts are never substituted for missing body evidence. include_pdf_links: Include PDF download links (default: True). False skips link enrichment when structured fulltext is already available. 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. Changed42 schema fields changedv0.7.7
    • addedInput schema / $defs / DOISource / properties / kind / anyOf
      Added value: +[
      +  {
      +    "const": "doi",
      +    "title": "Kind",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[ \\t\\r\\n]*(?:[dD][oO][iI])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / DOISource / properties / kind / const
      Removed value: -"doi"
    • removedInput schema / $defs / DOISource / properties / kind / type
      Removed value: -"string"
    • addedInput schema / $defs / DOISource / properties / value / description
      Added value: +"Complete identifier string; optional identifier prefix, official article URL, or inline backticks. No numbers, foreign hosts, URL queries/fragments or partial identifiers."
    • addedInput schema / $defs / DOISource / properties / value / examples
      Added value: +[
      +  "10.1000/example",
      +  "doi:10.1000/example",
      +  "https://doi.org/10.1000/example"
      +]
    • addedInput schema / $defs / DOISource / properties / value / format
      Added value: +"pubmed-doi"
    • changedInput schema / $defs / DOISource / properties / value / minLength
      Previous value: -7New value: +1
    • removedInput schema / $defs / DOISource / properties / value / pattern
      Removed value: -"^10\\.[0-9]{4,9}/"
    • addedInput schema / $defs / DOISource / properties / value / x-pubmed-input
      Added value: +"doi"
    • addedInput schema / $defs / PMCIDSource / properties / kind / anyOf
      Added value: +[
      +  {
      +    "const": "pmcid",
      +    "title": "Kind",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[ \\t\\r\\n]*(?:[pP][mM][cC][iI][dD])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / PMCIDSource / properties / kind / const
      Removed value: -"pmcid"
    • removedInput schema / $defs / PMCIDSource / properties / kind / type
      Removed value: -"string"
    • addedInput schema / $defs / PMCIDSource / properties / value / description
      Added value: +"Complete identifier string; optional identifier prefix, official article URL, or inline backticks. No numbers, foreign hosts, URL queries/fragments or partial identifiers."
    • addedInput schema / $defs / PMCIDSource / properties / value / examples
      Added value: +[
      +  "PMC12345",
      +  "https://pmc.ncbi.nlm.nih.gov/articles/PMC12345/"
      +]
    • addedInput schema / $defs / PMCIDSource / properties / value / format
      Added value: +"pubmed-pmcid"
    • changedInput schema / $defs / PMCIDSource / properties / value / maxLength
      Previous value: -23New value: +512
    • addedInput schema / $defs / PMCIDSource / properties / value / minLength
      Added value: +1
    • removedInput schema / $defs / PMCIDSource / properties / value / pattern
      Removed value: -"^PMC[1-9][0-9]{0,19}$"
    • addedInput schema / $defs / PMCIDSource / properties / value / x-pubmed-input
      Added value: +"pmcid"
    • addedInput schema / $defs / PMIDSource / properties / kind / anyOf
      Added value: +[
      +  {
      +    "const": "pmid",
      +    "title": "Kind",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[ \\t\\r\\n]*(?:[pP][mM][iI][dD])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / $defs / PMIDSource / properties / kind / const
      Removed value: -"pmid"
    • removedInput schema / $defs / PMIDSource / properties / kind / type
      Removed value: -"string"
    • addedInput schema / $defs / PMIDSource / properties / value / description
      Added value: +"Complete identifier string; optional identifier prefix, official article URL, or inline backticks. No numbers, foreign hosts, URL queries/fragments or partial identifiers."
    • addedInput schema / $defs / PMIDSource / properties / value / examples
      Added value: +[
      +  "33053718",
      +  "PMID:33053718",
      +  "https://pubmed.ncbi.nlm.nih.gov/33053718/"
      +]
    • addedInput schema / $defs / PMIDSource / properties / value / format
      Added value: +"pubmed-pmid"
    • changedInput schema / $defs / PMIDSource / properties / value / maxLength
      Previous value: -20New value: +512
    • addedInput schema / $defs / PMIDSource / properties / value / minLength
      Added value: +1
    • removedInput schema / $defs / PMIDSource / properties / value / pattern
      Removed value: -"^[1-9][0-9]{0,19}$"
    • addedInput schema / $defs / PMIDSource / properties / value / x-pubmed-input
      Added value: +"pmid"
    • changedInput schema / properties / allow_browser_session / anyOf
      Previous value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "null"
      +  },
      +  {
      +    "description": "Explicit true/false text, ignoring ASCII case and surrounding whitespace.",
      +    "pattern": "^[ \\t\\r\\n]*(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / extended_sources / anyOf
      Added value: +[
      +  {
      +    "default": false,
      +    "title": "Extended Sources",
      +    "type": "boolean"
      +  },
      +  {
      +    "description": "Explicit true/false text, ignoring ASCII case and surrounding whitespace.",
      +    "pattern": "^[ \\t\\r\\n]*(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / extended_sources / type
      Removed value: -"boolean"
    • addedInput schema / properties / include_figures / anyOf
      Added value: +[
      +  {
      +    "default": false,
      +    "title": "Include Figures",
      +    "type": "boolean"
      +  },
      +  {
      +    "description": "Explicit true/false text, ignoring ASCII case and surrounding whitespace.",
      +    "pattern": "^[ \\t\\r\\n]*(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / include_figures / type
      Removed value: -"boolean"
    • addedInput schema / properties / include_pdf_links / anyOf
      Added value: +[
      +  {
      +    "default": true,
      +    "title": "Include Pdf Links",
      +    "type": "boolean"
      +  },
      +  {
      +    "description": "Explicit true/false text, ignoring ASCII case and surrounding whitespace.",
      +    "pattern": "^[ \\t\\r\\n]*(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / include_pdf_links / type
      Removed value: -"boolean"
    • addedInput schema / properties / output_format / anyOf
      Added value: +[
      +  {
      +    "default": "markdown",
      +    "enum": [
      +      "markdown",
      +      "json",
      +      "toon"
      +    ],
      +    "title": "Output Format",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[ \\t\\r\\n]*(?:[mM][aA][rR][kK][dD][oO][wW][nN]|[jJ][sS][oO][nN]|[tT][oO][oO][nN])[ \\t\\r\\n]*$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / output_format / enum
      Removed value: -[
      -  "markdown",
      -  "json",
      -  "toon"
      -]
    • removedInput schema / properties / output_format / type
      Removed value: -"string"
    • addedInput schema / properties / source / anyOf
      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"
      +  },
      +  {
      +    "contentMediaType": "application/json",
      +    "contentSchema": {
      +      "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"
      +    },
      +    "description": "One JSON-encoded container; the decoded value must satisfy contentSchema.",
      +    "maxLength": 1000000,
      +    "type": "string"
      +  },
      +  {
      +    "description": "One JSON code fence; after removing the fence, decode JSON and validate against x-pubmed-decodedSchema.",
      +    "maxLength": 1000000,
      +    "pattern": "^\\s*```(?:[jJ][sS][oO][nN])?[ \\t]*\\r?\\n[\\s\\S]*\\r?\\n```\\s*$",
      +    "type": "string",
      +    "x-pubmed-decodedSchema": {
      +      "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"
      +    },
      +    "x-pubmed-encoding": "fenced-json"
      +  }
      +]
    • removedInput schema / properties / source / discriminator
      Removed value: -{
      -  "mapping": {
      -    "doi": "#/$defs/DOISource",
      -    "pmcid": "#/$defs/PMCIDSource",
      -    "pmid": "#/$defs/PMIDSource"
      -  },
      -  "propertyName": "kind"
      -}
    • removedInput schema / properties / source / oneOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/PMIDSource"
      -  },
      -  {
      -    "$ref": "#/$defs/PMCIDSource"
      -  },
      -  {
      -    "$ref": "#/$defs/DOISource"
      -  }
      -]
  2. 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
  3. First observedv0.5.16

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare openWorldHint=true, readOnlyHint=false and non-idempotent, and the description adds real behavioral context beyond them: the source fallback chain, the tri-state semantics of allow_browser_session, and the guarantee that abstracts are never substituted for missing body evidence. It omits rate limits, permissions, or failure behavior, keeping it short of a 5.

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

Conciseness4/5

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

Front-loaded with a one-line purpose, then a numbered source chain, then Args and examples. Slightly long because the extended source list and two near-duplicate examples consume space, but every section is scannable and earns its place.

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

Completeness4/5

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

For a 7-parameter tool with no output schema and no annotation-specified return format, the description covers inputs thoroughly and briefly states the return (fulltext content with PDF links). A short note on failure modes when no source yields fulltext would complete it.

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 and does so: it defines the discriminated source object with three concrete examples, explains sections filtering and its missing-title reporting, and gives the default plus purpose of include_pdf_links, include_figures, extended_sources, output_format, and the allow_browser_session tri-state.

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?

States a specific verb+resource (multi-source fulltext retrieval) and distinguishes itself from siblings like fetch_article_details or get_article_figures by describing the retrieval/fallback chain rather than metadata lookup. An agent can tell what it returns without opening the schema.

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?

Explains the standard retrieval order and exactly when to enable extended_sources (searching the extended downloader chain after standard policy) and when to disable include_pdf_links. It does not explicitly name sibling alternatives such as fetch_article_details, so routing between tools is left partly to inference.

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