{
  "markdown": "# Microsoft AI Roundup MCP Server\n\n[![npm version](https://img.shields.io/npm/v/microsoft-ai-roundup-mcp)](https://www.npmjs.com/package/microsoft-ai-roundup-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/microsoft-ai-roundup-mcp)](https://www.npmjs.com/package/microsoft-ai-roundup-mcp)\n[![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n\nA 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.\n\nAsk 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.\n\nSister project to [entra-news-mcp](https://github.com/darrenjrobinson/EntraNewsMCPServer).\n\n## Quick Start\n\nNo installation, no API keys, no configuration required:\n\n```bash\nnpx microsoft-ai-roundup-mcp\n```\n\nOn 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.\n\n> **Requires Node.js 22 or later** — the server uses Node's built-in `node:sqlite` module (no native dependencies). Node 20 will not work.\n\n## Client Configuration\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"microsoft-ai-roundup\": {\n      \"command\": \"npx\",\n      \"args\": [\"microsoft-ai-roundup-mcp\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\n```bash\nclaude mcp add microsoft-ai-roundup -- npx microsoft-ai-roundup-mcp\n```\n\n### Cursor / VS Code / Copilot Studio\n\n```json\n{\n  \"mcpServers\": {\n    \"microsoft-ai-roundup\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"microsoft-ai-roundup-mcp\"]\n    }\n  }\n}\n```\n\n### Optional: semantic search\n\nKeyword search works with zero configuration. For semantic (meaning-based) search, add an OpenAI API key:\n\n```json\n{\n  \"mcpServers\": {\n    \"microsoft-ai-roundup\": {\n      \"command\": \"npx\",\n      \"args\": [\"microsoft-ai-roundup-mcp\"],\n      \"env\": { \"OPENAI_API_KEY\": \"sk-...\" }\n    }\n  }\n}\n```\n\nWithout a key the server degrades gracefully to keyword-only search.\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `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`). |\n| `get_issue` | Retrieve the full content of an issue by `issue_number` or `date` (`YYYY-MM-DD` or `YYYY-MM`), with section headings preserved. |\n| `list_issues` | Browse the archive with optional `year`/`month` filtering and pagination. |\n| `find_tool_mentions` | Find community tools, GitHub projects, and Microsoft AI products/features mentioned across issues, with surrounding context. Optional `query` filter. |\n\n### Example queries\n\n- \"Search the Microsoft AI roundup for Copilot Studio agent announcements\"\n- \"Get issue #4 of the Microsoft AI roundup\"\n- \"List all roundup issues from May 2026\"\n- \"What GitHub projects has the Microsoft AI roundup mentioned?\"\n\n## How It Works\n\n```\nSubstack API (https://msai.ms/api/v1/posts)\n     │\n     ▼\nTypeScript ingestion script (scripts/ingest.ts)\n     │  weekly GitHub Action — Tuesdays 09:00 UTC\n     ▼\nOpenAI text-embedding-3-small embeddings (1536 dims)\n     │\n     ▼\nSQLite via node:sqlite (Node 22 built-in — no native deps)\n     │\n     ▼\nGitHub Release asset: microsoft-ai-roundup.db\n     │\n     ▼\nNPX MCP Server (stdio)\n  └─ Downloads DB on first run → caches in ~/.microsoft-ai-roundup-mcp/\n  └─ Re-checks for updates weekly (7-day staleness + tag diff)\n  └─ In-memory cosine similarity + SQL LIKE keyword search\n```\n\n**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.\n\n## Automated Weekly Updates\n\nA 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.\n\n## Cache Locations\n\n| OS | Path |\n|----|------|\n| Windows | `%USERPROFILE%\\.microsoft-ai-roundup-mcp\\` |\n| macOS / Linux | `~/.microsoft-ai-roundup-mcp/` |\n\nDelete the folder to force a fresh download of the latest database.\n\n## Local Development / Ingestion\n\n```bash\ngit clone https://github.com/darrenjrobinson/microsoft-ai-roundup-mcp\ncd microsoft-ai-roundup-mcp\nnpm install\nnpm run build\n\n# Build the search index locally (requires an OpenAI API key for embeddings)\nexport OPENAI_API_KEY=sk-...\nnode dist/scripts/ingest.js               # full ingest\nnode dist/scripts/ingest.js --incremental # only new issues\n\n# On Windows there's a PowerShell wrapper:\n./scripts/ingest.ps1 -Incremental\n\n# Run the server against your local database\nMSAI_ROUNDUP_DB_PATH=./microsoft-ai-roundup.db npx microsoft-ai-roundup-mcp\n```\n\n| Environment variable | Used by | Purpose |\n|---|---|---|\n| `OPENAI_API_KEY` | ingest + server | Embeddings (required for ingest; optional for the server's semantic search) |\n| `INGEST_DB_PATH` | ingest | Output database path (default `./microsoft-ai-roundup.db`) |\n| `MSAI_ROUNDUP_DB_PATH` | server | Use a local database instead of downloading from GitHub Releases |\n\n## Permissions & Licensing\n\nNewsletter 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).\n\n## Credits\n\n- **Newsletter:** [Merill Fernando](https://merill.net) & Joanne Hayek — [msai.ms](https://msai.ms)\n- **MCP server:** [Darren Robinson](https://blog.darrenjrobinson.com)\n- Sister project: [entra-news-mcp](https://github.com/darrenjrobinson/EntraNewsMCPServer) for [entra.news](https://entra.news)\n",
  "bytes": 6666,
  "sha": "a8f53b484c641698e6ac0129088218585a9f2d036393bc9207631e61f1aba609",
  "repo_slug": "darrenjrobinson/microsoft-ai-roundup-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_darrenjrobinson_microsoft_ai_r_cae215e0/readme"
}