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)
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"pmid": "<pmid>"
},
"name": "export_citation"
}
}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; }