microsoft-ai-roundup-mcp
This server lets you search and explore the Microsoft AI Roundup newsletter archive via natural language or keywords.
search_microsoft_ai_roundup: Search the full archive with hybrid, semantic, or keyword modes, returning sourced excerpts with issue number, date, and URL.
get_issue: Retrieve the full content of a specific issue by issue number, or by date (YYYY-MM-DD or YYYY-MM).
list_issues: Browse available issues with optional year/month filtering and pagination.
find_tool_mentions: Discover community tools, GitHub projects, and Microsoft AI products/features mentioned across issues, with optional keyword filtering.
Click on "Deploy 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., "@microsoft-ai-roundup-mcpSearch the roundup for announcements about Copilot agents"
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.
Microsoft AI Roundup MCP Server
A Model Context Protocol (MCP) server for searching the archive of Merill's Weekly Microsoft AI Roundup — a curated weekly Substack newsletter by Merill Fernando (with Joanne Hayek) covering Microsoft AI: Copilot, GitHub, Azure AI, M365 AI integrations, and the surrounding ecosystem.
Ask natural-language questions like "When did Copilot get feature X?", "What did the roundup say about Build?", or "Which GitHub projects has it highlighted?" and get sourced answers with issue numbers, dates, and links.
Sister project to entra-news-mcp.
Quick Start
No installation, no API keys, no configuration required:
npx microsoft-ai-roundup-mcpOn first run the server downloads a pre-built search index (SQLite database) from this repo's GitHub Releases and caches it locally. It checks for an updated index at most once every 7 days.
Requires Node.js 22 or later — the server uses Node's built-in
node:sqlitemodule (no native dependencies). Node 20 will not work.
Related MCP server: openresearch-mcp
Client Configuration
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"microsoft-ai-roundup": {
"command": "npx",
"args": ["microsoft-ai-roundup-mcp"]
}
}
}Claude Code
claude mcp add microsoft-ai-roundup -- npx microsoft-ai-roundup-mcpCursor / VS Code / Copilot Studio
{
"mcpServers": {
"microsoft-ai-roundup": {
"command": "npx",
"args": ["-y", "microsoft-ai-roundup-mcp"]
}
}
}Optional: semantic search
Keyword search works with zero configuration. For semantic (meaning-based) search, add an OpenAI API key:
{
"mcpServers": {
"microsoft-ai-roundup": {
"command": "npx",
"args": ["microsoft-ai-roundup-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}Without a key the server degrades gracefully to keyword-only search.
Tools
Tool | Description |
| Search the full archive with natural language or keywords. Hybrid semantic + keyword search; returns sourced excerpts with issue number, date, and URL. Args: |
| Retrieve the full content of an issue by |
| Browse the archive with optional |
| Find community tools, GitHub projects, and Microsoft AI products/features mentioned across issues, with surrounding context. Optional |
Example queries
"Search the Microsoft AI roundup for Copilot Studio agent announcements"
"Get issue #4 of the Microsoft AI roundup"
"List all roundup issues from May 2026"
"What GitHub projects has the Microsoft AI roundup mentioned?"
How It Works
Substack API (https://msai.ms/api/v1/posts)
│
▼
TypeScript ingestion script (scripts/ingest.ts)
│ weekly GitHub Action — Tuesdays 09:00 UTC
▼
OpenAI text-embedding-3-small embeddings (1536 dims)
│
▼
SQLite via node:sqlite (Node 22 built-in — no native deps)
│
▼
GitHub Release asset: microsoft-ai-roundup.db
│
▼
NPX MCP Server (stdio)
└─ Downloads DB on first run → caches in ~/.microsoft-ai-roundup-mcp/
└─ Re-checks for updates weekly (7-day staleness + tag diff)
└─ In-memory cosine similarity + SQL LIKE keyword searchSearch implementation (honest version): semantic search loads all embedding vectors into memory at startup and ranks by cosine similarity in JavaScript; keyword search uses SQL LIKE (exact phrase first, then per-word fallback). Hybrid mode merges and de-duplicates both result sets. No sqlite-vec, no FTS5 — deliberately simple, and more than adequate at this archive's scale.
Automated Weekly Updates
A GitHub Actions workflow runs every Tuesday at 09:00 UTC (the morning after the newsletter's usual Monday publish). It incrementally ingests any new issues, verifies the database, and publishes it as a new GitHub Release tagged db-YYYY.MM.DD-NNNN. The NPX server picks up the new database automatically within a week (or immediately on a fresh install). A workflow_dispatch trigger provides a manual escape hatch for off-schedule publishes or full rebuilds.
Cache Locations
OS | Path |
Windows |
|
macOS / Linux |
|
Delete the folder to force a fresh download of the latest database.
Local Development / Ingestion
git clone https://github.com/darrenjrobinson/microsoft-ai-roundup-mcp
cd microsoft-ai-roundup-mcp
npm install
npm run build
# Build the search index locally (requires an OpenAI API key for embeddings)
export OPENAI_API_KEY=sk-...
node dist/scripts/ingest.js # full ingest
node dist/scripts/ingest.js --incremental # only new issues
# On Windows there's a PowerShell wrapper:
./scripts/ingest.ps1 -Incremental
# Run the server against your local database
MSAI_ROUNDUP_DB_PATH=./microsoft-ai-roundup.db npx microsoft-ai-roundup-mcpEnvironment variable | Used by | Purpose |
| ingest + server | Embeddings (required for ingest; optional for the server's semantic search) |
| ingest | Output database path (default |
| server | Use a local database instead of downloading from GitHub Releases |
Permissions & Licensing
Newsletter content is © Merill Fernando & Joanne Hayek. This project indexes the freely available public archive via the public Substack API (all posts are free, audience: "everyone") and always links back to the original issues. The code is MIT licensed.
Credits
Newsletter: Merill Fernando & Joanne Hayek — msai.ms
MCP server: Darren Robinson
Sister project: entra-news-mcp for entra.news
Available Tools
4 toolsfind_tool_mentionsA
Find community tools, GitHub projects, and Microsoft AI products/features mentioned in the Microsoft AI Roundup. 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. "Copilot", "Azure AI Foundry", "agents") |
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 return fields (tool names, descriptions, GitHub URLs, issue context) and the optional filter. It does not mention sorting or pagination, but for a read-oriented find tool, the description offers adequate behavioral detail.
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, front-loaded with the main action and scope. No redundant wording or unnecessary details.
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?
The tool is simple with two optional parameters, no output schema, and no annotations. The description covers what it does, what it returns, and how to filter. It is complete enough for an agent to determine if this tool fits the task.
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% for both parameters (limit and query). The description only restates the query's search purpose ('find tools related to a specific technology or capability') without adding new meaning beyond the schema.
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 purpose with a specific verb 'Find' and explicit resources: community tools, GitHub projects, and Microsoft AI products/features mentioned in the Microsoft AI Roundup. This distinguishes it from siblings like get_issue and list_issues, which focus on 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?
The description provides clear context: it searches tool mentions within the Microsoft AI Roundup, with an optional keyword filter. However, it does not explicitly mention when to use an alternative like search_microsoft_ai_roundup, lacking direct exclusionary guidance.
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 Microsoft AI Roundup 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. "2026-05" or "2026-05-18") | |
| issue_number | No | Issue number (e.g. 4) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool returns the complete text with section headings preserved, which is useful. However, it does not mention what happens when both parameters are provided, when neither is provided, or the 'nearest issue' behavior that is only in the parameter description. The description adds some behavioral context but not a comprehensive picture.
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 two concise sentences, front-loaded with the action and resource. Every sentence contributes: the first states the purpose and parameters, the second describes the return value. No unnecessary words or repetition.
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?
The tool is simple with two optional parameters, and the output schema is absent, so the description helps by indicating the return format. However, it lacks important contextual details such as the requirement to provide at least one identifier and the conflict resolution if both are given. The description is adequate but has gaps.
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?
The input schema has 100% coverage for both parameters, so the baseline is 3. The description merely reiterates that the tool works by 'issue number or publication date', which adds no new meaning beyond the schema. It does not clarify that at least one parameter is needed, since none are required.
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 purpose: 'Retrieve the full content of a specific Microsoft AI Roundup issue.' It specifies the resource ('Microsoft AI Roundup issue') and the action ('retrieve') along with the two lookup methods (issue number or publication date). It also distinguishes itself from sibling tools like search or list by focusing on full content of a single issue.
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 for use: when you want a specific issue identified by number or date. It implies that you should have one of these identifiers. It does not mention alternatives like list_issues for finding issue numbers, but the context is clear enough without exclusions.
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 Microsoft AI Roundup (msai.ms) 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_microsoft_ai_roundup.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year (e.g. 2026) | |
| limit | No | Maximum issues to return (default: 50) | |
| month | No | Filter by month number 1–12 (e.g. 5 for May). 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 the full burden for behavioral disclosure. It states the tool is for browsing (implying read-only) and returns a list with specified fields, but does not disclose pagination behavior, potential size limits, or ordering. It adds some context but not rich detail.
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, front-loaded with the core action, and no unnecessary fluff. Every word 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?
The description covers the return fields and positions itself against sibling tools. Since there is no output schema, it explains the return value (list with title, date, URL). However, it omits mention of pagination via offset/limit, which the schema supports, so it falls just short of being fully complete.
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%, and each parameter already has a description. The description reinforces that year/month are for filtering, but adds no new information beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
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 browses the Microsoft AI Roundup archive and returns a list of issues with title, date, and URL. It differentiates from siblings by explicitly mentioning use before get_issue or search_microsoft_ai_roundup, establishing its role as a discovery tool.
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 explicit guidance: 'Use this to discover what issues exist before using get_issue or search_microsoft_ai_roundup.' This clearly indicates when to use this tool versus the alternatives, and the mention of optional filtering adds context for parameter usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_microsoft_ai_roundupA
Search the full Microsoft AI Roundup (msai.ms) 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 issues of Merill's weekly Microsoft AI roundup from May 2026 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?
With no annotations, the description carries the full burden and does well. It discloses the hybrid semantic+keyword search, the OPENAI_API_KEY dependency for semantic mode, coverage from May 2026, and the return format. Minor gaps remain (e.g., no mention of result sorting or error handling), but it's transparent for a read-only search tool.
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 three sentences, front-loaded with the main action, and every sentence provides useful detail. No filler or repetition of schema fields.
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?
The tool is moderately complex with 3 parameters and no output schema. The description adequately explains the return format, coverage, and dependencies. It doesn't mention pagination or relevance ordering, but the limit parameter and search nature make this acceptable. Overall, it's complete enough for an agent to invoke correctly.
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 value by explaining that query can be natural language, and that semantic mode requires an API key, which is not in the schema. This enhances understanding of mode's behavior beyond the enum description.
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 function: searching the full Microsoft AI Roundup archive with natural language or keywords. It distinguishes itself from siblings like get_issue and list_issues by focusing on cross-issue content search, and specifies the output (sourced excerpts with issue number, date, URL).
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 for when to use this tool: when searching across the archive. It doesn't explicitly name alternatives or exclusions, but the search-focused wording implies differentiation from other sibling tools. A brief mention of when not to use it would elevate this further.
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.
4 tool updates
v0.1.1- First observed
find_tool_mentions - First observed
get_issue - First observed
list_issues - First observed
search_microsoft_ai_roundup
TDQS
Scored across 4 tools
Each tool serves a distinct purpose: listing issues, retrieving full content, searching across content, and specifically finding tool mentions. There is no overlap or ambiguity in their roles.
Three tools follow a consistent verb_noun pattern (get_issue, list_issues, find_tool_mentions). The search tool includes the domain name, making it slightly longer but still clear and predictable.
Four tools is well-scoped for a newsletter archive server, covering the core access and search needs without unnecessary bloat.
The set covers browsing, retrieving, searching, and specialized extraction (tool mentions), providing complete lifecycle coverage for read-only access to the newsletter archive. No obvious gaps.
Maintenance
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
MCP server for searching Airweave collections with natural language queries.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server for searching and citing ASTGL (As The Geek Learns) articles about MCP servers, local AI, and AI automation. Provides semantic search, direct Q\&A, and topic browsing across 20 authoritative articles with pre-computed embeddings.3101 npmMIT
- AlicenseNot gradedqualityAmaintenanceZero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.10Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server that aggregates AI news, academic papers from ArXiv, and trending GitHub repositories from multiple sources, enabling users to fetch, search, and filter recent AI content via natural language.1MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides AI-powered document processing and search capabilities, including PDF summarization, text extraction, metadata retrieval, and web search via Google Custom Search.-