io.github.darrenjrobinson/microsoft-ai-roundup
Search Merill's Weekly Microsoft AI Roundup (msai.ms) archive — curated weekly Microsoft AI news
Open source Open in the app JSON README (API)
About
Search Merill's Weekly Microsoft AI Roundup (msai.ms) archive — curated weekly Microsoft AI news
Details
- Kind
- MCP servers
- Topic
- Social & content
- Publisher
- darrenjrobinson
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.1.3
- Open pull requests
- 1
- Last push
- 2026-09-02T07:07:06Z
- Repository state
- ativo
- Language
- TypeScript
- License
- MIT
- Added
- 2026-08-29 03:02:41
- Updated
- 2026-09-02 03:01:06
- Origin id
io.github.darrenjrobinson/microsoft-ai-roundup
README
# Microsoft AI Roundup MCP Server
[](https://www.npmjs.com/package/microsoft-ai-roundup-mcp)
[](https://www.npmjs.com/package/microsoft-ai-roundup-mcp)
[](LICENSE)
A Model Context Protocol (MCP) server for searching the archive of **[Merill's Weekly Microsoft AI Roundup](https://msai.ms)** — 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](https://github.com/darrenjrobinson/EntraNewsMCPServer).
## Quick Start
No installation, no API keys, no configuration required:
```bash
npx microsoft-ai-roundup-mcp
```
On 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:sqlite` module (no native dependencies). Node 20 will not work.
## Client Configuration
### Claude Desktop
Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"microsoft-ai-roundup": {
"command": "npx",
"args": ["microsoft-ai-roundup-mcp"]
}
}
}
```
### Claude Code
```bash
claude mcp add microsoft-ai-roundup -- npx microsoft-ai-roundup-mcp
```
### Cursor / VS Code / Copilot Studio
```json
{
"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:
```json
{
"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_microsoft_ai_roundup` | Search the full archive with natural language or keywords. Hybrid semantic + keyword search; returns sourced excerpts with issue number, date, and URL. Args: `query` (required), `limit` (default 10, max 50), `mode` (`hybrid` \| `semantic` \| `keyword`). |
| `get_issue` | Retrieve the full content of an issue by `issue_number` or `date` (`YYYY-MM-DD` or `YYYY-MM`), with section headings preserved. |
| `list_issues` | Browse the archive with optional `year`/`month` filtering and pagination. |
| `find_tool_mentions` | Find community tools, GitHub projects, and Microsoft AI products/features mentioned across issues, with surrounding context. Optional `query` filter. |
### 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 search
```
**Search 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 | `%USERPROFILE%\.microsoft-ai-roundup-mcp\` |
| macOS / Linux | `~/.microsoft-ai-roundup-mcp/` |
Delete the folder to force a fresh download of the latest database.
## Local Development / Ingestion
```bash
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-mcp
```
| Environment variable | Used by | Purpose |
|---|---|---|
| `OPENAI_API_KEY` | ingest + server | Embeddings (required for ingest; optional for the server's semantic search) |
| `INGEST_DB_PATH` | ingest | Output database path (default `./microsoft-ai-roundup.db`) |
| `MSAI_ROUNDUP_DB_PATH` | server | Use a local database instead of downloading from GitHub Releases |
## Permissions & Licensing
Newsletter content is © [Merill Fernando](https://merill.net) & 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](LICENSE).
## Credits
- **Newsletter:** [Merill Fernando](https://merill.net) & Joanne Hayek — [msai.ms](https://msai.ms)
- **MCP server:** [Darren Robinson](https://blog.darrenjrobinson.com)
- Sister project: [entra-news-mcp](https://github.com/darrenjrobinson/EntraNewsMCPServer) for [entra.news](https://entra.news)