get_full_text_links
Retrieve free full-text article links from PubMed Central and publisher sources using a PubMed ID to access biomedical research.
Instructions
Get links to free full text versions of an article (e.g., PubMed Central). Returns PMC links and publisher free-access URLs.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | Yes | PubMed ID to find full text links for |
Implementation Reference
- src/tools.ts:173-221 (handler)The getFullTextLinks handler function that retrieves full text links for a PubMed article by calling NCBI's elink API. It fetches both PMC (PubMed Central) links and provider links, returning a JSON response with the PMID, full_text_links array, and a boolean indicating if free full text is available.
export async function getFullTextLinks(args: z.infer<typeof getFullTextLinksSchema>): Promise<string> { // Use elink to find PMC links and provider links const result = await client.elinkCmd([args.pmid], "llinks", "pubmed") as { linksets?: Array<{ idurllist?: Array<{ objurls?: Array<{ url?: { value?: string }; linkname?: string; provider?: { name?: string[] }; categories?: Array<{ category?: string }>; }>; }>; }>; }; // Also check for PMC link const pmcResult = await client.elink([args.pmid], "pubmed_pmc", "pubmed", "pmc") as { linksets?: Array<{ linksetdbs?: Array<{ links?: string[] }> }>; }; const pmcIds = pmcResult.linksets?.[0]?.linksetdbs?.[0]?.links || []; const links: Array<Record<string, string>> = []; if (pmcIds.length > 0) { links.push({ source: "PubMed Central", url: `https://www.ncbi.nlm.nih.gov/pmc/articles/PMC${pmcIds[0]}/`, pmcid: `PMC${pmcIds[0]}`, }); } // Extract provider links const urlList = result.linksets?.[0]?.idurllist?.[0]?.objurls || []; for (const obj of urlList) { const url = obj.url?.value; if (url) { links.push({ source: obj.provider?.name?.[0] || obj.linkname || "Unknown", url, }); } } return JSON.stringify({ pmid: args.pmid, full_text_links: links, has_free_full_text: links.length > 0, }, null, 2); } - src/tools.ts:35-37 (schema)The Zod schema definition for getFullTextLinks that validates the input parameters. It requires a single parameter: pmid (PubMed ID as a string).
export const getFullTextLinksSchema = z.object({ pmid: z.string().describe("PubMed ID to find full text links for"), }); - src/index.ts:70-77 (registration)Tool registration that registers get_full_text_links with the MCP server. It includes the tool name, description, schema shape, and the handler that calls getFullTextLinks with parsed arguments.
server.tool( "get_full_text_links", "Get links to free full text versions of an article (e.g., PubMed Central). Returns PMC links and publisher free-access URLs.", getFullTextLinksSchema.shape, async (args) => ({ content: [{ type: "text", text: await getFullTextLinks(getFullTextLinksSchema.parse(args)) }], }) );