Skip to main content
Glama
Dianel555

Paper Search MCP

by Dianel555

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
NameRequiredDescriptionDefault
queryYesSearch query string
maxResultsNoMaximum number of results to return
yearNoPublication year filter (e.g., "2023", "2020-2023")
authorNoAuthor name filter
journalNoJournal name filter
publicationTypeNoPublication type filter (e.g., ["Journal Article", "Review"])
sortByNoSort results by relevance or date

Implementation Reference

  • 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
        )}`
      );
    }
  • 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();
  • 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']
      }
    },
  • Schema parsing logic in parseToolArgs function for 'search_pubmed' tool.
    case 'search_pubmed':
      return SearchPubMedSchema.parse(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dianel555/paper-search-mcp-nodejs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server