batch_article_lookup
Retrieve up to 200 biomedical article citations in a single batch using provided PubMed IDs.
Instructions
Retrieve multiple articles efficiently (up to 200 PMIDs)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pmids | Yes | Array of PubMed IDs |
Implementation Reference
- src/index.ts:808-847 (handler)Handler function for batch_article_lookup. Validates input (non-empty array, max 200 PMIDs, valid PMID format), processes in chunks of 50 via eutilsClient.getArticlesBatch, and returns articles with counts.
async function handleBatchArticleLookup(args: any) { const { pmids } = args; if (!Array.isArray(pmids) || pmids.length === 0) { throw new Error('pmids must be a non-empty array'); } if (pmids.length > 200) { throw new Error('Maximum 200 PMIDs allowed per batch'); } // Validate all PMIDs for (const pmid of pmids) { if (!isValidPMID(pmid)) { throw new Error(`Invalid PMID format: ${pmid}`); } } // Process in chunks of 50 const chunks = chunkArray(pmids, 50); const allArticles = []; for (const chunk of chunks) { const articles = await eutilsClient.getArticlesBatch(chunk); allArticles.push(...articles); } return { content: [ { type: 'text', text: JSON.stringify({ totalRequested: pmids.length, totalRetrieved: allArticles.length, articles: allArticles }, null, 2) } ] }; } - src/index.ts:296-310 (schema)Tool schema/definition registered in ListToolsRequestSchema handler. Defines the input schema requiring a 'pmids' array of strings (max 200 items).
{ name: 'batch_article_lookup', description: 'Retrieve multiple articles efficiently (up to 200 PMIDs)', inputSchema: { type: 'object', properties: { pmids: { type: 'array', items: { type: 'string' }, description: 'Array of PubMed IDs', maxItems: 200 } }, required: ['pmids'] } - src/index.ts:467-468 (registration)Tool execution registration in CallToolRequestSchema handler. Routes the tool name 'batch_article_lookup' to the handleBatchArticleLookup function.
case 'batch_article_lookup': return await handleBatchArticleLookup(args); - src/api/eutils.ts:346-365 (helper)Helper method on EUtilsClient that fetches multiple articles by PMIDs from NCBI E-utilities, parses XML response, and returns PubMedArticle objects.
async getArticlesBatch(pmids: string[]): Promise<PubMedArticle[]> { if (pmids.length === 0) { return []; } const result = await this.fetch({ db: 'pubmed', id: pmids, retmode: 'xml', rettype: 'abstract' }); const articleSet = result.PubmedArticleSet?.PubmedArticle || result.PubmedArticle; if (!articleSet) { return []; } const articles = Array.isArray(articleSet) ? articleSet : [articleSet]; return articles.map(article => this.parseArticle(article)); } - src/api/utils.ts:203-209 (helper)Generic utility function that splits an array into smaller chunks of a given size. Used by handleBatchArticleLookup to process PMIDs in chunks of 50.
export function chunkArray<T>(array: T[], size: number): T[][] { const chunks: T[][] = []; for (let i = 0; i < array.length; i += size) { chunks.push(array.slice(i, i + size)); } return chunks; }