Skip to main content
Glama
darrenjrobinson

Entra News MCP Server

search_entra_news

Search Microsoft Entra announcements and community tools from the Entra.news archive using natural language queries. Retrieve sourced excerpts with issue details and URLs.

Instructions

Search the full Entra.news archive using natural language or keywords. Returns sourced excerpts from past issues with issue number, date, and URL. Supports hybrid semantic + keyword search (semantic requires OPENAI_API_KEY). Covers all Entra.news issues from mid-2023 to present.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language question or keywords to search for
limitNoMaximum number of results to return (default: 10, max: 50)
modeNoSearch mode: hybrid (default), semantic-only, or keyword-onlyhybrid

Implementation Reference

  • The handler function 'handleSearchEntraNews' that performs the search using keyword and semantic search logic.
    export async function handleSearchEntraNews(args: SearchArgs): Promise<string> {
      const { query, limit, mode } = args;
      const apiKey = process.env.OPENAI_API_KEY;
    
      let semanticResults: SearchResult[] = [];
      let keywordResults: SearchResult[] = [];
    
      if (mode !== 'keyword' && apiKey) {
        try {
          const embedding = await getEmbedding(query, apiKey);
          semanticResults = semanticSearch(embedding, limit);
        } catch (err) {
          process.stderr.write(`[entra-news-mcp] Semantic search failed, falling back to keyword: ${err}\n`);
        }
      }
    
      if (mode !== 'semantic') {
        keywordResults = keywordSearch(query, limit);
      }
    
      if (semanticResults.length === 0 && keywordResults.length === 0) {
        return `No results found for "${query}". Try different keywords or a broader query.`;
      }
    
      let results: SearchResult[];
      if (mode === 'semantic') {
        results = semanticResults.slice(0, limit);
      } else if (mode === 'keyword') {
        results = keywordResults.slice(0, limit);
      } else {
        results = deduplicateAndMerge(semanticResults, keywordResults, limit);
      }
    
      const modeNote =
        mode === 'hybrid' && !apiKey
          ? '\n> *(Keyword-only mode — set OPENAI_API_KEY for semantic search)*\n'
          : '';
      const header = `## Search results for: "${query}"\n${modeNote}\nFound ${results.length} result(s):\n\n---\n\n`;
    
      const body = results.map((r, i) => formatResult(r, i + 1)).join('\n\n---\n\n');
      return header + body;
    }
  • The zod schema definition used to validate inputs for 'search_entra_news'.
    export const searchSchema = z.object({
      query: z.string().min(1).describe('Natural language question or keywords to search for'),
      limit: z.number().int().min(1).max(50).default(10).describe('Maximum number of results to return'),
      mode: z
        .enum(['hybrid', 'semantic', 'keyword'])
        .default('hybrid')
        .describe('Search mode: hybrid (default), semantic-only, or keyword-only'),
    });
  • src/server.ts:147-152 (registration)
    The tool handler registration block in the main MCP server implementation.
    switch (name) {
      case 'search_entra_news': {
        const parsed = searchSchema.parse(args ?? {});
        text = await handleSearchEntraNews(parsed);
        break;
      }
Behavior4/5

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

With no annotations provided, the description carries full disclosure burden and succeeds well. It explicitly states the return format ('sourced excerpts from past issues with issue number, date, and URL'), explains the hybrid search capability, and warns about the OPENAI_API_KEY dependency for semantic mode. Missing only minor details like rate limits or empty-result behavior.

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?

Four sentences with zero waste: sentence 1 states purpose, sentence 2 describes output, sentence 3 explains search modes with constraint, sentence 4 defines scope. Front-loaded with the action verb and contains no redundant or filler text.

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

Completeness5/5

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

For a three-parameter search tool without output schema, the description is comprehensive. It covers purpose, return structure, search methodology, authentication requirements, and temporal boundaries. The agent has sufficient information to invoke the tool correctly and interpret results despite lacking formal output schema.

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

Parameters4/5

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

Schema coverage is 100%, establishing a baseline of 3. The description adds value by elaborating that 'semantic' mode specifically requires an OPENAI_API_KEY (critical context for the mode parameter) and clarifying that the query accepts 'natural language or keywords' (reinforcing the query parameter's dual purpose).

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

Purpose5/5

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

The description opens with a specific verb ('Search') and clear resource ('full Entra.news archive'), establishing exactly what the tool does. It distinguishes itself from siblings like get_issue and list_issues by emphasizing 'full archive' and 'natural language or keywords' rather than specific issue retrieval or enumeration.

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

Usage Guidelines4/5

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

Provides critical usage constraints including the temporal scope ('mid-2023 to present') and the API key requirement for semantic search mode. While it doesn't explicitly name sibling tools as alternatives, the 'full archive' scope clearly signals when to use this versus specific-issue retrieval tools.

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/darrenjrobinson/EntraNewsMCPServer'

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