Skip to main content
Glama

article_get

Read-only

Retrieve biomedical articles by PMID, PMCID, or DOI to access metadata, license info, full text, and citation data, including preprint versions.

Instructions

Get article by PMID/PMCID/DOI. Section response keys differ from request names: "oa" is stored as sections.open_access, "graph" as sections.citation_graph. Preprint DOIs (bioRxiv/medRxiv, e.g. "10.1101/2025.03.05.641768" or new prefix "10.64898/...") return the preprint record: all versions, license, category, funders, JATS full-text URL, published-version mapping, and (with sections=["citation"]) Europe PMC preprint citations. Journal articles, sections=["fulltext"]: returns the ACTUAL full text when freely readable in PMC/Europe PMC (open-access AND free-to-read). fulltext.status is "available" or "unavailable"; when unavailable, fulltext.reason is one of paywalled | no_pmcid | no_machine_readable_xml | not_implemented_for_preprints | fetch_failed (with alternatives in links, e.g. doi_url); a transiently failed OA-status lookup counts as no status info, so a paywalled in-PMC article surfaces as fetch_failed until a retry reclassifies it as paywalled. The five-value open-access vocabulary — open_access | free_to_read | paywalled | not_in_pmc | unknown — is sections.open_access.status (request sections:["oa"]); fulltext.oa_status echoes it so paywalled vs not-in-PMC is visible without the oa section. Default (fulltext_output="file"): the complete text is written to a server-side markdown file and the reply carries file_path plus an outline with per-section line numbers and char counts — Read/Grep the file selectively instead of loading it into context. fulltext_output="inline" (use only if you cannot read server-side files): fulltext.sections is an ordered array of {heading, text, truncated} objects plus char_count/total_char_count/truncated/omitted_sections, capped by fulltext_max_chars. sections=["oa"] returns license/access metadata and links ONLY (pdf_url presence does not by itself mean the text is fetchable — use fulltext for content). "all" = oa+annotations+graph+citation WITHOUT fulltext (request ["fulltext"] separately). oa/fulltext do not apply to preprints (see the jatsxml_url link). Journal-article citation: fast mode (~4s, 4 providers, auto-fallback to PubMed) or full mode (~15-30s, all 5 providers incl. PubMed). Forward citation lists come from Europe PMC, Semantic Scholar, and OpenCitations; Crossref provides counts and references only.

Input Schema

NameRequiredDescriptionDefault
idYesArticle identifier: PMID (numeric, e.g. "12345"), PMCID (e.g. "PMC1234567"), DOI (e.g. "10.1038/s41586-021-03819-2"), or preprint DOI (e.g. "10.1101/2021.10.25.465764", "10.64898/2026.08.11.744243")
limitNoMaximum items per section (e.g., 20 citations)
sectionsNoSections to include. ["fulltext"] = the complete article text (written to a file by default; see fulltext_output). ["oa"] = license/access metadata and links. ["citation"] = citation data. ["all"] = oa+annotations+graph+citation — fulltext is NOT included; request ["fulltext"] separately.
citation_modeNoFast: Europe PMC, Semantic Scholar, OpenCitations, Crossref counts/references (~4s). Full: All 5 providers incl. PubMed (~15-30s). Fast mode auto-falls back to PubMed when other providers return no items.fast
fulltext_outputNoOutput mode for sections=["fulltext"]. "file" (default): complete text written to a server-side markdown file; the reply carries file_path + outline (headings with line numbers and char counts) — Read/Grep the file selectively. "inline": text returned inline, capped by fulltext_max_chars; use only if you cannot read server-side files.
citation_directionNoCitation direction: "forward" (articles citing this one), "backward" (references), "both" (default); honored for preprint PPR citations too — the skipped direction returns an empty arrayboth
fulltext_max_charsNoInline-mode only (fulltext_output="inline"); default 40000. Ignored in file mode — files carry the complete text (2MB safety cap). Truncation is flagged honestly with omitted section names.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.6.0-alpha.10
    • removedInput schema / additionalProperties
      Removed value: -false
  2. Changed2 schema fields changedv1.6.0-alpha.7
    • addedInput schema / properties / id / minLength
      Added value: +1
    • addedInput schema / properties / id / pattern
      Added value: +"^(?:\\d+|PMC\\d+(?:\\.\\d+)?|(?:doi:)?10\\.\\d{4,}\\/\\S+)$"
  3. Changed5 schema fields changedv1.6.0-alpha.1
    • changedInput schema / properties / citation_direction / description
      Previous value: -"Citation direction: \"forward\" (articles citing this one), \"backward\" (references), \"both\" (default)"New value: +"Citation direction: \"forward\" (articles citing this one), \"backward\" (references), \"both\" (default); honored for preprint PPR citations too — the skipped direction returns an empty array"
    • addedInput schema / properties / fulltext_max_chars
      Added value: +{
      +  "description": "Inline-mode only (fulltext_output=\"inline\"); default 40000. Ignored in file mode — files carry the complete text (2MB safety cap). Truncation is flagged honestly with omitted section names.",
      +  "maximum": 200000,
      +  "minimum": 1000,
      +  "type": "integer"
      +}
    • addedInput schema / properties / fulltext_output
      Added value: +{
      +  "description": "Output mode for sections=[\"fulltext\"]. \"file\" (default): complete text written to a server-side markdown file; the reply carries file_path + outline (headings with line numbers and char counts) — Read/Grep the file selectively. \"inline\": text returned inline, capped by fulltext_max_chars; use only if you cannot read server-side files.",
      +  "enum": [
      +    "file",
      +    "inline"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / sections / description
      Previous value: -"Sections to include. Use [\"citation\"] for citation data, [\"all\"] for everything."New value: +"Sections to include. [\"fulltext\"] = the complete article text (written to a file by default; see fulltext_output). [\"oa\"] = license/access metadata and links. [\"citation\"] = citation data. [\"all\"] = oa+annotations+graph+citation — fulltext is NOT included; request [\"fulltext\"] separately."
    • changedInput schema / properties / sections / items / enum
      Previous value: -[
      -  "core",
      -  "oa",
      -  "annotations",
      -  "graph",
      -  "citation",
      -  "all"
      -]New value: +[
      +  "core",
      +  "oa",
      +  "fulltext",
      +  "annotations",
      +  "graph",
      +  "citation",
      +  "all"
      +]
  4. Changed1 schema field changedv1.5.0
    • changedInput schema / properties / id / description
      Previous value: -"Article identifier: PMID (numeric, e.g. \"12345\"), PMCID (e.g. \"PMC1234567\"), or DOI (e.g. \"10.1038/s41586-021-03819-2\")"New value: +"Article identifier: PMID (numeric, e.g. \"12345\"), PMCID (e.g. \"PMC1234567\"), DOI (e.g. \"10.1038/s41586-021-03819-2\"), or preprint DOI (e.g. \"10.1101/2021.10.25.465764\", \"10.64898/2026.08.11.744243\")"
  5. Changed1 schema field changedv0.7.1
    • changedInput schema / properties / citation_mode / description
      Previous value: -"Fast: Europe PMC, Semantic Scholar, Crossref (~4s). Full: All 5 providers (~15-30s). Fast mode auto-falls back to PubMed when other providers return no items."New value: +"Fast: Europe PMC, Semantic Scholar, OpenCitations, Crossref counts/references (~4s). Full: All 5 providers incl. PubMed (~15-30s). Fast mode auto-falls back to PubMed when other providers return no items."
  6. First observedv0.1.8

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare read-only and open-world; the description carries the rest: section key remapping (oa→sections.open_access), the fulltext.status/reason vocabulary with a named failure taxonomy, the transient-lookup caveat, per-mode latency for citation, and file-vs-inline output behavior. This is unusually rich disclosure of what happens on failure and why.

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

Conciseness3/5

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

Purpose is front-loaded, but the remainder is a single undifferentiated block mixing parameter interactions, response shapes, and rare failure modes. Most sentences carry information, yet the transient OA-status-lookup detail and repeated restatement of fulltext/oa behavior add density that slows an agent trying to extract the call decision.

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?

For a 7-parameter tool with no output schema, the description supplies the return structure (file_path plus outline, fulltext.sections array, status/reason fields, links) and the failure paths an agent must handle. Nothing material needed to call it correctly appears to be missing.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds semantics the schema lacks: the response key difference for oa/graph, that fulltext_max_chars is ignored in file mode, and that citation_direction is honored for preprint citations. It stops short of explaining limit's per-section scoping beyond what the schema already says.

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?

Opens with a specific verb and resource ('Get article by PMID/PMCID/DOI'), and the identifier set immediately separates it from query-based siblings like article_search and gene_articles. The subsequent text confirms this is the single-record fetch path, not a search.

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?

Gives explicit conditional guidance: use fulltext_output="inline" only if you cannot read server-side files, request ["fulltext"] separately because "all" excludes it, and oa/fulltext do not apply to preprints. It does not, however, route the agent between article_get and article_search/gene_articles, so the alternative-selection guidance is incomplete.

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