Skip to main content
Glama

search-medical-journals

Find high-quality medical research on specific topics by searching top journals including NEJM, JAMA, Lancet, BMJ, and Nature Medicine.

Instructions

Search specific medical journals (NEJM, JAMA, Lancet, BMJ, Nature Medicine) for high-quality research

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesMedical topic or condition to search for in top medical journals

Implementation Reference

  • Core handler function that implements the tool logic by performing parallel Google Scholar searches for the query prefixed with top medical journal names (NEJM, JAMA, Lancet, BMJ, Nature Medicine).
    export async function searchMedicalJournals(
      query: string,
    ): Promise<GoogleScholarArticle[]> {
      console.log(`šŸ” Searching medical journals for: ${query}`);
    
      const journalSearches = await Promise.allSettled([
        searchJournal("NEJM", query),
        searchJournal("JAMA", query),
        searchJournal("Lancet", query),
        searchJournal("BMJ", query),
        searchJournal("Nature Medicine", query),
      ]);
    
      const results: GoogleScholarArticle[] = [];
    
      journalSearches.forEach((search) => {
        if (search.status === "fulfilled" && search.value) {
          results.push(...search.value);
        }
      });
    
      return results.slice(0, 15);
    }
  • Zod input schema defining the 'query' parameter for the tool.
    {
      query: z
        .string()
        .describe(
          "Medical topic or condition to search for in top medical journals",
        ),
    },
  • src/index.ts:254-272 (registration)
    MCP server registration of the 'search-medical-journals' tool, including description, schema, and thin wrapper handler that calls the core implementation.
    server.tool(
      "search-medical-journals",
      "Search specific medical journals (NEJM, JAMA, Lancet, BMJ, Nature Medicine) for high-quality research",
      {
        query: z
          .string()
          .describe(
            "Medical topic or condition to search for in top medical journals",
          ),
      },
      async ({ query }) => {
        try {
          const articles = await searchMedicalJournals(query);
          return formatMedicalJournalsSearch(articles, query);
        } catch (error: any) {
          return createErrorResponse("searching medical journals", error);
        }
      },
    );
  • Helper function to format the search results from medical journals into a structured MCP response with safety warnings.
    export function formatMedicalJournalsSearch(articles: any[], query: string) {
      if (articles.length === 0) {
        return createMCPResponse(
          `No articles found for "${query}" in top medical journals. This could be due to no results matching your query, journal-specific search limitations, or network connectivity issues.`,
        );
      }
    
      let result = `**Top Medical Journals Search: "${query}"**\n\n`;
      result += `Found ${articles.length} article(s) from top medical journals\n\n`;
    
      articles.forEach((article, index) => {
        result += formatArticleItem(article, index);
      });
    
      result += `\n🚨 **CRITICAL SAFETY WARNING:**\n`;
      result += `This search retrieves information from top medical journals dynamically.\n\n`;
      result += `**DYNAMIC DATA SOURCES:**\n`;
      result += `• New England Journal of Medicine (NEJM)\n`;
      result += `• Journal of the American Medical Association (JAMA)\n`;
      result += `• The Lancet\n`;
      result += `• British Medical Journal (BMJ)\n`;
      result += `• Nature Medicine\n`;
      result = addDataNote(result);
    
      return createMCPResponse(result);
    }
  • Helper function that constructs journal-specific Google Scholar queries used by the main handler.
    async function searchJournal(
      journalName: string,
      query: string,
    ): Promise<GoogleScholarArticle[]> {
      try {
        // Use Google Scholar with journal-specific search
        const journalQuery = `"${journalName}" ${query}`;
        return await searchGoogleScholar(journalQuery);
      } catch (error) {
        console.error(`Error searching ${journalName}:`, error);
        return [];
      }
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions searching 'specific medical journals' and 'high-quality research', but does not describe how results are returned (e.g., format, pagination), what constitutes 'high-quality', or any limitations (e.g., access restrictions, rate limits). This leaves significant gaps for a search tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is appropriately sized and front-loaded, making it easy to understand quickly with zero wasted information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a search tool. It does not explain what the tool returns (e.g., article titles, summaries, links), how results are filtered or ranked, or any behavioral traits like error handling. This leaves the agent with insufficient context to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'query' documented as 'Medical topic or condition to search for in top medical journals'. The description adds minimal value beyond this, only implying the query should target the listed journals. With high schema coverage, the baseline score of 3 is appropriate as the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching specific medical journals (NEJM, JAMA, Lancet, BMJ, Nature Medicine) for high-quality research. It specifies both the action ('search') and the target resources (named journals), but does not explicitly distinguish it from similar siblings like 'search-medical-literature' or 'search-google-scholar', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance on when to use this tool, mentioning only that it searches 'specific medical journals' for 'high-quality research'. It does not explain when to choose this over alternatives like 'search-medical-literature' or 'search-google-scholar', nor does it specify any prerequisites or exclusions for its use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/JamesANZ/medical-mcp'

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