Skip to main content
Glama
darrenjrobinson

Entra News MCP Server

entra-news-mcp

A searchable knowledge MCP over Entra.news — Merill Fernando's curated weekly digest of Microsoft Entra news, features, and community tools.

npm npm downloads License: MIT


What is this?

Entra.news is a high-signal, curated newsletter covering Microsoft Entra (Azure AD) features, announcements, and community tools — published weekly since mid-2023.

This MCP server exposes the full historical archive as a natural language search interface. Ask questions and get sourced answers directly from past issues — including issue number, date, and canonical URL.

Zero per-user infrastructure. Users install an NPX package. That's it.


Related MCP server: Azure Updates MCP Server

Quick Start

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "entra-news-mcp": {
      "command": "npx",
      "args": ["entra-news-mcp"]
    }
  }
}

Restart Claude Desktop. The database (~15–20 MB) will be downloaded on first launch and cached in ~/.entra-news-mcp/.

Cursor / Copilot Studio / Any MCP Host

{
  "mcpServers": {
    "entra-news-mcp": {
      "command": "npx",
      "args": ["-y", "entra-news-mcp"]
    }
  }
}

VS Code

Add to your MCP config (workspace .vscode/mcp.json, or run MCP: Add Server from the Command Palette):

{
  "servers": {
    "entra-news-mcp": {
      "command": "npx",
      "args": ["-y", "entra-news-mcp"]
    }
  }
}

Semantic Search (Optional)

By default the server uses keyword and phrase matching over the SQLite index — no API key needed. For significantly better result quality, set your OpenAI API key to enable semantic + hybrid search:

{
  "mcpServers": {
    "entra-news-mcp": {
      "command": "npx",
      "args": ["entra-news-mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Local Database Cache

On first launch the server downloads the database (~15–20 MB) from GitHub Releases and caches it locally:

Platform

Cache location

Windows

%USERPROFILE%\.entra-news-mcp\

macOS / Linux

~/.entra-news-mcp/

The server checks for a newer database release once per week. If you want to force an immediate re-download (e.g. after a new issue has been ingested), delete the cache folder and restart your MCP host:

Windows (PowerShell):

Remove-Item "$env:USERPROFILE\.entra-news-mcp" -Recurse -Force

macOS / Linux:

rm -rf ~/.entra-news-mcp

Available MCP Tools

Tool

Description

search_entra_news

Semantic + keyword hybrid search over all issues. Returns sourced excerpts.

get_issue

Retrieve the full content of a specific issue by number or date.

list_issues

Browse the archive with optional year/month filtering.

find_tool_mentions

Discover community tools and GitHub projects mentioned in the archive.

Example queries

  • "What did Entra.news cover about Conditional Access in 2024?"

  • "Show me the issue from March 2025"

  • "What PowerShell tools for Entra have been mentioned?"

  • "Has there been coverage of Verified ID?"

  • "List all issues from 2024"


Architecture

Substack API (entra.news/api/v1/posts)
    │
    ▼
Node.js ingestion script  ←  OpenAI text-embedding-3-small
    │
    ▼
SQLite (chunks + embeddings, ~15–20 MB)
    │
    ▼
GitHub Release asset  ──→  NPX MCP Server
                               └─ Downloads DB on first run
                               └─ Checks for updates weekly
                               └─ In-memory vector similarity + keyword search

Cost: ~$0.01/week (embeddings on new issues only). Zero hosting.


Running the Ingestion Pipeline

Note: You only need to do this if you're maintaining your own fork or building the initial index. End users just run npx entra-news-mcp — the database is downloaded automatically.

Prerequisites

  • Node.js 22+

  • An OpenAI API key (text-embedding-3-small access)

Full ingest (first time)

# Set your API key
$env:OPENAI_API_KEY = "sk-..."

# Run the ingestion pipeline
./scripts/ingest.ps1

Or directly with Node.js:

export OPENAI_API_KEY=sk-...
npm install && npm run build
node dist/scripts/ingest.js

Incremental update (new issues only)

./scripts/ingest.ps1 -Incremental
node dist/scripts/ingest.js --incremental

The output database (entra-news.db) should then be uploaded as a GitHub Release asset — the GitHub Actions workflow handles this automatically on a weekly schedule.


Automated Weekly Updates

A GitHub Actions workflow (.github/workflows/weekly-update.yml) runs every Monday at 9am Sydney time (Sunday 23:00 UTC), shortly after each new Entra.news issue is published:

  1. Downloads the current database from GitHub Releases

  2. Runs the incremental ingestion pipeline

  3. Publishes the updated database as a new GitHub Release

Required secret: Add OPENAI_API_KEY to your repository secrets (Settings → Secrets).


Releasing (npm + MCP Registry)

Publishing is automated by .github/workflows/publish-mcp.yml, triggered by pushing a v* tag. Authentication is tokenless (OIDC) for both npm (Trusted Publishing) and the MCP Registry.

  1. Bump the version in package.json and server.json (both version fields) — the workflow fails if they don't match the tag

  2. Commit, then tag and push — deriving the tag from package.json so it always matches the workflow's version gate:

VERSION=$(node -p "require('./package.json').version")
git tag "v$VERSION"
git push origin main "v$VERSION"

The workflow builds, publishes to npm (with provenance), and publishes the new version to the MCP Registry.


Development

npm install
npm run build          # Compile TypeScript
npm start              # Run the MCP server

Project structure

src/
  index.ts             # Entry point
  server.ts            # MCP server + tool registration
  db/
    client.ts          # SQLite client — DB download/cache + search
  tools/
    search.ts          # search_entra_news tool
    get-issue.ts       # get_issue tool
    list-issues.ts     # list_issues tool
    find-tool-mentions.ts  # find_tool_mentions tool
  utils/
    embeddings.ts      # OpenAI embedding helper
scripts/
  ingest.ts            # Full ingestion pipeline (TypeScript)
  ingest.ps1           # PowerShell wrapper for ingestion
.github/workflows/
  weekly-update.yml    # Automated weekly update

Permissions & Content

The Entra.news content is © Merill Fernando & Joshua Fernando. This tool accesses the publicly available Substack API (not scraping) and is intended for personal/community use. Please reach out to hey@entra.news before any public deployment.


Author

Built by Darren Robinson.

Entra.news by Merill Fernando.

Available Tools

4 tools
find_tool_mentionsA

Find community tools, GitHub projects, and open-source resources mentioned in Entra.news. Returns tool names, descriptions, GitHub URLs, and the issue context where they appeared. Optionally filter by keyword to find tools related to a specific technology or capability.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tool mentions to return (default: 20)
queryNoOptional filter — search by tool name, technology, or description keyword (e.g. "PowerShell", "Conditional Access", "reporting")

TDQS

A3.8/5.0
Behavior3/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. It discloses the returned data (tool names, descriptions, GitHub URLs, issue context) and mentions optional filtering. However, it does not explicitly state that the operation is read-only, nor does it describe pagination, rate limits, or behavior when no results are found. The description is adequate but could be richer.

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 very concise with two sentences. The first sentence states the purpose and output, the second adds the filtering option. No extraneous information, and key details are front-loaded.

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

Completeness4/5

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

Given the simplicity of the tool (two parameters, no output schema), the description covers the main points: what it finds, what it returns, and optional filtering. It does not mention sorting or error handling, but for a straightforward search tool, it is largely sufficient. Minor omissions prevent a perfect score.

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?

Schema description coverage is 100% (both query and limit parameters are described). The description adds marginal value by explaining the optional keyword filter in broader terms ('related to a specific technology or capability'). With high schema coverage, the baseline is 3.

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 clearly states the tool's action ('Find'), the specific resource ('community tools, GitHub projects, and open-source resources mentioned in Entra.news'), and what it returns. It distinguishes itself from sibling tools (get_issue, list_issues, search_entra_news) by focusing solely on tool mentions.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to find tool mentions) but does not explicitly state when not to use it or provide alternatives. Sibling tools exist for general issue search, but no comparison is made. Usage context is implied rather than explicit.

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

get_issueA

Retrieve the full content of a specific Entra.news issue by issue number or publication date. Returns the complete text of the newsletter with section headings preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD or YYYY-MM format to find the nearest issue (e.g. "2024-03" or "2024-03-15")
issue_numberNoIssue number (e.g. 42)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It accurately implies a read-only operation ('Retrieve'), and mentions return format ('complete text... with section headings preserved'). However, it does not disclose potential errors or restrictions (e.g., if issue not found), but for a simple retrieval this is adequate.

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?

Two sentences, each earning its place: first states the action and inputs, second details the output. No filler, front-loaded with verb and resource.

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?

Given the tool's simplicity (2 optional params, no output schema), the description covers all essential aspects: what it does, how to specify the issue, and what the response includes. No gaps remain.

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?

Schema description coverage is 100% with clear descriptions for both parameters. The description adds minimal extra meaning beyond the schema (reiterates 'by issue number or publication date'), so baseline score of 3 is appropriate.

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 clearly states the verb (Retrieve) and resource (specific Entra.news issue) and distinguishes from sibling tools like list_issues (which lists issues) and search_entra_news (which searches news). It specifies the two identification methods: by issue number or publication date.

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

Usage Guidelines3/5

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

The description provides clear context (use when you need full content of a specific issue) but does not explicitly state when not to use it or mention alternatives. It is implied that this tool is for a single issue, while siblings handle lists or search, but no direct comparison.

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

list_issuesA

Browse the Entra.news archive with optional year/month filtering. Returns a list of issues with title, date, and URL. Use this to discover what issues exist before using get_issue or search_entra_news.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFilter by year (e.g. 2024)
limitNoMaximum issues to return (default: 50)
monthNoFilter by month number 1–12 (e.g. 3 for March). Requires year.
offsetNoPagination offset (default: 0)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses that the tool returns a list of issues with title, date, and URL, and that filtering is optional. However, it omits behavioral details like default ordering, pagination behavior (beyond schema), and read-only nature.

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?

Three concise sentences with no redundancy. First sentence states action and filtering, second sentence describes output, third sentence provides usage context. Every sentence earns its place.

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

Completeness4/5

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

Given 4 parameters, no output schema, and no annotations, the description provides adequate completeness. It explains return fields, filtering, and usage context. Some details like pagination default (50) and offset are left to schema, but description is sufficient for correct invocation.

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?

Schema coverage is 100%, so baseline is 3. The description adds minimal value beyond schema: it mentions 'optional year/month filtering' and that month requires year (already in schema). No additional semantics for limit/offset.

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 uses specific verbs ('browse', 'returns a list') and clearly identifies the resource ('Entra.news archive'). It distinguishes from sibling tools by advising usage before get_issue or search_entra_news.

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?

Explicitly states when to use the tool ('to discover what issues exist before using get_issue or search_entra_news'), providing clear context for choosing between siblings. Lacks explicit when-not guidance but is sufficient.

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

search_entra_newsA

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.

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

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description bears full burden. Discloses date range (mid-2023 to present), hybrid search dependency on OPENAI_API_KEY, and return fields. Lacks details on pagination, error handling, or empty query 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?

Three sentences, front-loaded with core action, no filler. Efficiently covers purpose, date range, and search modes.

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

Completeness4/5

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

Adequately describes input, date range, search modes, and output nature for a search tool with no output schema. Could mention result ordering or more on hybrid search behavior.

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 description coverage is 100%, so baseline 3. Description adds valuable context: query is versatile, limit default and max, mode enum with hybrid as default and semantic requiring API key.

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?

Clearly states it searches the full Entra.news archive using natural language or keywords, returning sourced excerpts with issue number, date, and URL. Distinct from siblings like get_issue (single issue) and list_issues (list issues).

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

Usage Guidelines3/5

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

Provides context on search modes and API key requirement for semantic search, but does not explicitly guide when to use this vs. alternatives like get_issue or find_tool_mentions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.7
    • Addedfind_tool_mentions
    • Addedget_issue
    • Addedlist_issues
    • Addedsearch_entra_news
  2. 4 tool updatesv0.1.6
    • Removedfind_tool_mentions
    • Removedget_issue
    • Removedlist_issues
    • Removedsearch_entra_news
  3. 4 tool updatesv0.1.5
    • Addedfind_tool_mentions
    • Addedget_issue
    • Addedlist_issues
    • Addedsearch_entra_news
  4. 4 tool updatesv0.1.4
    • Removedfind_tool_mentions
    • Removedget_issue
    • Removedlist_issues
    • Removedsearch_entra_news
  5. 4 tool updatesv0.1.3
    • First observedfind_tool_mentions
    • First observedget_issue
    • First observedlist_issues
    • First observedsearch_entra_news

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: find_tool_mentions for community tool discovery, get_issue for full content retrieval, list_issues for browsing archive, and search_entra_news for full-text search. No overlap in functionality.

Naming Consistency5/5

All tool names use snake_case with a consistent verb_noun pattern (find_tool_mentions, get_issue, list_issues, search_entra_news), making the set predictable and easy to understand.

Tool Count5/5

With 4 tools covering browsing, retrieval, search, and specialized tool mention discovery, the set is appropriately scoped for a newsletter archive without being too sparse or bloated.

Completeness4/5

The core workflows (browse, read, search, and find tools) are well covered. A minor gap is the lack of a direct 'latest issue' shortcut, but this can be achieved via list_issues with date filtering.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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