export_citation
Export a PubMed citation in APA, MLA, Chicago, BibTeX, or RIS format by providing the PubMed ID.
Instructions
Export citation in various formats (APA, MLA, Chicago, BibTeX, RIS)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | Yes | PubMed ID | |
| format | No | Citation format (default: apa) |
Implementation Reference
- src/index.ts:374-391 (registration)Tool registration for 'export_citation' with input schema (pmid required, optional format with enum of apa/mla/chicago/bibtex/ris)
{ name: 'export_citation', description: 'Export citation in various formats (APA, MLA, Chicago, BibTeX, RIS)', inputSchema: { type: 'object', properties: { pmid: { type: 'string', description: 'PubMed ID' }, format: { type: 'string', enum: ['apa', 'mla', 'chicago', 'bibtex', 'ris'], description: 'Citation format (default: apa)' } }, required: ['pmid'] } - src/index.ts:919-941 (handler)Handler function for export_citation: validates PMID, fetches article details, and formats citation
async function handleExportCitation(args: any) { const { pmid, format = 'apa' } = args; if (!isValidPMID(pmid)) { throw new Error(`Invalid PMID format: ${pmid}`); } const article = await eutilsClient.getArticleDetails(pmid); const citation = formatCitation(article, format as any); return { content: [ { type: 'text', text: JSON.stringify({ pmid, format, citation }, null, 2) } ] }; } - src/index.ts:479-480 (handler)Switch case dispatching to handleExportCitation
case 'export_citation': return await handleExportCitation(args); - src/api/utils.ts:285-315 (helper)formatCitation helper function that dispatches to individual formatters (APA, MLA, Chicago, BibTeX, RIS) based on style
export function formatCitation( article: { authors: Array<{ lastName: string; foreName?: string; initials?: string }>; title: string; journal: string; publicationDate: string; volume?: string; issue?: string; pages?: string; doi?: string; }, style: 'apa' | 'mla' | 'chicago' | 'bibtex' | 'ris' ): string { const year = article.publicationDate.split('-')[0]; const authorList = article.authors.slice(0, 20); // Limit to first 20 authors switch (style) { case 'apa': return formatAPACitation(article, authorList, year); case 'mla': return formatMLACitation(article, authorList, year); case 'chicago': return formatChicagoCitation(article, authorList, year); case 'bibtex': return formatBibTeXCitation(article, authorList, year); case 'ris': return formatRISCitation(article, authorList, year); default: return formatAPACitation(article, authorList, year); } } - src/api/utils.ts:417-439 (helper)RIS citation formatter helper (one of the five format styles supported)
function formatRISCitation(article: any, authors: any[], year: string): string { let ris = 'TY - JOUR\n'; authors.forEach(a => { ris += `AU - ${a.lastName}, ${a.foreName || a.initials}\n`; }); ris += `TI - ${article.title}\n`; ris += `JO - ${article.journal}\n`; ris += `PY - ${year}\n`; if (article.volume) ris += `VL - ${article.volume}\n`; if (article.issue) ris += `IS - ${article.issue}\n`; if (article.pages) ris += `SP - ${article.pages.split('-')[0]}\n`; if (article.pages && article.pages.includes('-')) { ris += `EP - ${article.pages.split('-')[1]}\n`; } if (article.doi) ris += `DO - ${article.doi}\n`; ris += 'ER - \n'; return ris; }