Entra News MCP Server
The Entra News MCP Server lets you search, retrieve, and browse the full historical archive of Entra.news — Merill Fernando's curated weekly digest of Microsoft Entra (Azure AD) news, features, and community tools.
Search the archive (
search_entra_news): Query all issues using natural language or keywords, with support for hybrid (semantic + keyword), semantic-only, or keyword-only search modes. Returns sourced excerpts with issue number, date, and URL.Retrieve a specific issue (
get_issue): Fetch the full content of any issue by its number or publication date (e.g.2024-03or2024-03-15), with section headings preserved.Browse the archive (
list_issues): List all available issues with optional filtering by year and/or month, including pagination support.Find tool mentions (
find_tool_mentions): Discover community tools, GitHub projects, and open-source resources mentioned across all issues, optionally filtered by keyword (e.g. "PowerShell", "Conditional Access", "reporting").
Provides tools to search, list, and retrieve historical issues and community tool mentions from the Entra.news archive via the Substack API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Entra News MCP ServerWhat PowerShell tools for Entra have been mentioned in recent issues?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
entra-news-mcp
A searchable knowledge MCP over Entra.news — Merill Fernando's curated weekly digest of Microsoft Entra news, features, and community tools.
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 |
|
macOS / Linux |
|
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 -ForcemacOS / Linux:
rm -rf ~/.entra-news-mcpAvailable MCP Tools
Tool | Description |
| Semantic + keyword hybrid search over all issues. Returns sourced excerpts. |
| Retrieve the full content of a specific issue by number or date. |
| Browse the archive with optional year/month filtering. |
| 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 searchCost: ~$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-smallaccess)
Full ingest (first time)
# Set your API key
$env:OPENAI_API_KEY = "sk-..."
# Run the ingestion pipeline
./scripts/ingest.ps1Or directly with Node.js:
export OPENAI_API_KEY=sk-...
npm install && npm run build
node dist/scripts/ingest.jsIncremental update (new issues only)
./scripts/ingest.ps1 -Incrementalnode dist/scripts/ingest.js --incrementalThe 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:
Downloads the current database from GitHub Releases
Runs the incremental ingestion pipeline
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.
Bump the version in
package.jsonandserver.json(bothversionfields) — the workflow fails if they don't match the tagCommit, then tag and push — deriving the tag from
package.jsonso 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 serverProject 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 updatePermissions & 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 toolsfind_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tool mentions to return (default: 20) | |
| query | No | Optional filter — search by tool name, technology, or description keyword (e.g. "PowerShell", "Conditional Access", "reporting") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD or YYYY-MM format to find the nearest issue (e.g. "2024-03" or "2024-03-15") | |
| issue_number | No | Issue number (e.g. 42) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year (e.g. 2024) | |
| limit | No | Maximum issues to return (default: 50) | |
| month | No | Filter by month number 1–12 (e.g. 3 for March). Requires year. | |
| offset | No | Pagination offset (default: 0) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode: hybrid (default), semantic-only, or keyword-only | hybrid |
| limit | No | Maximum number of results to return (default: 10, max: 50) | |
| query | Yes | Natural language question or keywords to search for |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.7- Added
find_tool_mentions - Added
get_issue - Added
list_issues - Added
search_entra_news
4 tool updates
v0.1.6- Removed
find_tool_mentions - Removed
get_issue - Removed
list_issues - Removed
search_entra_news
4 tool updates
v0.1.5- Added
find_tool_mentions - Added
get_issue - Added
list_issues - Added
search_entra_news
4 tool updates
v0.1.4- Removed
find_tool_mentions - Removed
get_issue - Removed
list_issues - Removed
search_entra_news
4 tool updates
v0.1.3- First observed
find_tool_mentions - First observed
get_issue - First observed
list_issues - First observed
search_entra_news
TDQS
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.
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.
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.
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
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
Search your knowledge bases from any AI assistant using hybrid RAG.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Personal YouTube AI knowledge base powered by RAG. Query your subscribed YouTube channels.
The only News based AI MCP your agents will ever need — custom categories, global regions, and time-scoped results in one tool. We use multi-vector & sparse-hybrid search to search through thousands of articles across the world to find the exact news you're looking for.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables semantic search and knowledge management for storing and querying principles, patterns, and learnings using hybrid keyword and vector search.1-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve Azure service updates, retirements, and feature announcements using natural language queries with fast local caching.MIT
- FlicenseNot gradedqualityCmaintenanceEnables searching a knowledge base and asking grounded questions with hybrid retrieval, reranking, and cited answers.-
- AlicenseAqualityAmaintenanceEnables AI assistants to search and retrieve transcripts from the Entra.Chat podcast about Microsoft Entra ID, with timestamped YouTube links and guest information.6712MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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