get_similar_articles
Retrieve articles related to a given PubMed ID by analyzing content similarity to discover relevant biomedical literature.
Instructions
Find related articles based on content similarity
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | Yes | PubMed ID | |
| max_results | No | Maximum similar articles (default: 20) |
Implementation Reference
- src/index.ts:897-917 (handler)The handler function handleGetSimilarArticles that executes the 'get_similar_articles' tool logic. It extracts pmid and max_results from args, validates the PMID, calls eutilsClient.getSimilarArticles(), and returns the results as JSON text content.
async function handleGetSimilarArticles(args: any) { const { pmid, max_results = 20 } = args; if (!isValidPMID(pmid)) { throw new Error(`Invalid PMID format: ${pmid}`); } const similarPmids = await eutilsClient.getSimilarArticles(pmid, max_results); return { content: [ { type: 'text', text: JSON.stringify({ pmid, similarArticles: similarPmids }, null, 2) } ] }; } - src/index.ts:354-373 (schema)The input schema for the 'get_similar_articles' tool, defining 'pmid' (required string) and 'max_results' (optional number, default 20, min 1, max 100) as input properties.
{ name: 'get_similar_articles', description: 'Find related articles based on content similarity', inputSchema: { type: 'object', properties: { pmid: { type: 'string', description: 'PubMed ID' }, max_results: { type: 'number', description: 'Maximum similar articles (default: 20)', minimum: 1, maximum: 100 } }, required: ['pmid'] } }, - src/index.ts:476-477 (registration)The case statement in the tool dispatcher that routes 'get_similar_articles' requests to the handleGetSimilarArticles function.
case 'get_similar_articles': return await handleGetSimilarArticles(args); - src/index.ts:354-373 (registration)The tool definition/registration entry in the tools array, listing 'get_similar_articles' with its name, description, and inputSchema.
{ name: 'get_similar_articles', description: 'Find related articles based on content similarity', inputSchema: { type: 'object', properties: { pmid: { type: 'string', description: 'PubMed ID' }, max_results: { type: 'number', description: 'Maximum similar articles (default: 20)', minimum: 1, maximum: 100 } }, required: ['pmid'] } }, - src/api/eutils.ts:430-457 (helper)The getSimilarArticles method on the EutilsClient class that queries PubMed's elink API with neighbor_score command to find similar articles by PMID, returning an array of PMID strings up to maxResults.
async getSimilarArticles(pmid: string, maxResults: number = 20): Promise<string[]> { const result = await this.link({ dbfrom: 'pubmed', db: 'pubmed', id: pmid, cmd: 'neighbor_score' }); const linkSet = result.eLinkResult?.LinkSet; if (!linkSet) { return []; } const linkSetDb = linkSet.LinkSetDb; if (!linkSetDb) { return []; } const links = linkSetDb.Link; if (!links) { return []; } const linkArray = Array.isArray(links) ? links : [links]; return linkArray .slice(0, maxResults) .map((link: any) => extractText(link.Id)); }