search_pubmed
Search biomedical literature from PubMed/MEDLINE database to find relevant research articles, reviews, and publications using NCBI E-utilities API.
Instructions
Search biomedical literature from PubMed/MEDLINE database using NCBI E-utilities API
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string | |
| maxResults | No | Maximum number of results to return | |
| year | No | Publication year filter (e.g., "2023", "2020-2023") | |
| author | No | Author name filter | |
| journal | No | Journal name filter | |
| publicationType | No | Publication type filter (e.g., ["Journal Article", "Review"]) | |
| sortBy | No | Sort results by relevance or date |
Implementation Reference
- src/mcp/handleToolCall.ts:128-151 (handler)Handler logic for executing the 'search_pubmed' MCP tool: destructures args, performs search via searchers.pubmed.search(), retrieves rate limit status, and returns formatted JSON response with paper details.case 'search_pubmed': { const { query, maxResults, year, author, journal, publicationType, sortBy } = args; const results = await searchers.pubmed.search(query, { maxResults, year, author, journal, publicationType, sortBy }); const rateStatus = searchers.pubmed.getRateLimiterStatus(); const apiKeyStatus = searchers.pubmed.hasApiKey() ? 'configured' : 'not configured'; const rateLimit = searchers.pubmed.hasApiKey() ? '10 requests/second' : '3 requests/second'; return jsonTextResponse( `Found ${results.length} PubMed papers.\n\nAPI Status: ${apiKeyStatus} (${rateLimit})\nRate Limiter: ${rateStatus.availableTokens}/${rateStatus.maxTokens} tokens available\n\n${JSON.stringify( results.map((paper: Paper) => PaperFactory.toDict(paper)), null, 2 )}` ); }
- src/mcp/schemas.ts:69-79 (schema)Zod schema definition (SearchPubMedSchema) for input validation of the 'search_pubmed' tool parameters.export const SearchPubMedSchema = z .object({ query: z.string().min(1), maxResults: z.number().int().min(1).max(100).optional().default(10), year: z.string().optional(), author: z.string().optional(), journal: z.string().optional(), publicationType: z.array(z.string()).optional(), sortBy: z.enum(['relevance', 'date']).optional() }) .strip();
- src/mcp/tools.ts:131-160 (registration)MCP tool registration in TOOLS array, including name, description, and JSON inputSchema matching the Zod schema.{ name: 'search_pubmed', description: 'Search biomedical literature from PubMed/MEDLINE database using NCBI E-utilities API', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query string' }, maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' }, year: { type: 'string', description: 'Publication year filter (e.g., "2023", "2020-2023")' }, author: { type: 'string', description: 'Author name filter' }, journal: { type: 'string', description: 'Journal name filter' }, publicationType: { type: 'array', items: { type: 'string' }, description: 'Publication type filter (e.g., ["Journal Article", "Review"])' }, sortBy: { type: 'string', enum: ['relevance', 'date'], description: 'Sort results by relevance or date' } }, required: ['query'] } },
- src/mcp/schemas.ts:238-239 (schema)Schema parsing logic in parseToolArgs function for 'search_pubmed' tool.case 'search_pubmed': return SearchPubMedSchema.parse(args);