Content
# M365 Release Radar — Microsoft 365 & Azure change‑tracking Copilot agent 📡
**M365 Release Radar** is a declarative agent for Microsoft 365 Copilot that helps IT admins, engineers, and technical teams stay ahead of everything changing across Microsoft 365 and Azure — from one place, in natural language, with rich adaptive‑card responses.
> [!WARNING]
> **🧪 Preview — built fast, still under test.** This solution was "vibe‑coded" and is currently going through testing. It's shared early so the community can try it and give feedback, but **responses may not be 100% accurate or complete**. Always verify important details against the official [Microsoft 365 Roadmap](https://www.microsoft.com/microsoft-365/roadmap), [Azure Updates](https://azure.microsoft.com/updates/), and the Microsoft 365 admin center Message Center before acting on them. Use at your own discretion.
It unifies three sources of change:
- 🗺️ **Microsoft 365 Roadmap** — upcoming, in‑development, rolling‑out, launched, and retiring M365 features.
- ☁️ **Azure Updates** — Azure service updates, product categories, retirements, and security‑related changes.
- 📢 **Message Center** *(optional, admin‑gated)* — tenant service update messages, advisories, and incidents.
> This project is the successor to two earlier community agents — [**M365 Insider**](https://github.com/alexc-MSFT/m365-insider) (roadmap) and [**Message Center Pulse**](https://github.com/alexc-MSFT/mc-pulse) (Message Center). It combines and modernises both into a single agent.
---
## ✨ What it does
- Answers natural‑language questions about the **Microsoft 365 Roadmap** and **Azure Updates** using **live** Microsoft Release Communications (MRC) data — never stale model knowledge.
- Surfaces the details that matter: title, status, affected products, availability/GA dates, retirements, and deep links back to the official source.
- Provides **insights**, not just lists — themes, imminent changes, and time‑sensitive callouts (previews opening, upcoming retirements). Includes the **Code Interpreter** capability for on‑the‑fly analysis and grouping of returned data.
- Renders results as consistent **Adaptive Cards**.
- *(When configured)* lets **admins** retrieve **Microsoft 365 Message Center** posts — filter by service, category, severity, message ID, date, tags, and keywords.
### Suggested prompts
- *"What Microsoft Teams features are rolling out or reaching general availability in the next couple of months?"*
- *"Show me the latest Microsoft 365 Copilot roadmap items that are in development or in preview."*
- *"Which Azure services have retirements announced for this year, and when do they take effect?"*
- *"Give me the full details for Microsoft 365 roadmap feature ID 81379."*
- *(Message Center enabled)* *"Show me the latest Message Center posts that require action."*
- *(Message Center enabled)* *"What recent Message Center posts affect Exchange Online, and which are 'Plan for Change'?"*
---
## 📸 See it in action
> [!NOTE]
> The images below are **illustrative mockups** that reproduce the Microsoft 365 Copilot experience using the agent's real adaptive‑card fields, name, and icon. They are **not** live screen captures, and the roadmap/Message Center items shown are representative examples.
**Roadmap & Azure Updates** — natural‑language questions answered with rich adaptive cards:

**Message Center** *(optional, admin‑gated)* — service changes, advisories, and incidents surfaced for admins:

---
## 🏗️ Architecture
M365 Release Radar hosts **two plugins** behind one declarative agent:
| Capability | Plugin | Runtime | Data source | Auth |
| --- | --- | --- | --- | --- |
| Roadmap + Azure Updates | `release-radar-plugin.json` | **Remote MCP server** | Microsoft Release Communications MCP server (`https://www.microsoft.com/releasecommunications/mcp`) | None (public) |
| Message Center | `message-center-plugin.json` | **OpenAPI (API plugin)** | Microsoft Graph Service Communications API (`serviceAnnouncement/messages`) | Delegated OAuth (per‑user admin sign‑in) |
Because roadmap/Azure use an unauthenticated MCP server, those capabilities **work for everyone out of the box**. Message Center calls Microsoft Graph directly and therefore requires **delegated** admin authentication — it stays dormant until a deployer configures it (see below).
---
## 🚀 Getting started
> **Prerequisites**
> - [Node.js](https://nodejs.org/) (supported version: 22)
> - A [Microsoft 365 account for development](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts) with a [Microsoft 365 Copilot license](https://learn.microsoft.com/microsoft-365-copilot/extensibility/prerequisites#prerequisites)
> - [Microsoft 365 Agents Toolkit](https://aka.ms/teams-toolkit) (VS Code extension or CLI)
1. Clone this repository.
2. Open the folder in Visual Studio Code.
3. Sign in with your Microsoft 365 account in the Microsoft 365 Agents Toolkit.
4. **Provision** the agent (Agents Toolkit → *Provision*, or `atk provision --env local`). The roadmap and Azure Updates capabilities work immediately.
5. Open the agent in Microsoft 365 Copilot and try a prompt.
Message Center is **off by default** and requires the extra setup below.
---
## 📢 Enabling Message Center (optional)
Message Center posts are tenant‑specific admin data retrieved from the **Microsoft Graph Service Communications API** using **delegated** authentication. Enabling it is a one‑time setup.
> **Note:** This capability is not intended to replace the first‑party **Microsoft 365 Admin** agent. For full admin coverage, Microsoft recommends the [Microsoft 365 Admin agent](https://learn.microsoft.com/en-us/copilot/microsoft-365/copilot-for-microsoft-365-admin). M365 Release Radar covers Message Center posts specifically.
> **Who can use it:** Once enabled, only users with an appropriate admin role can query Message Center:
> - Global Administrator
> - Service Support Administrator
> - Message Center Reader
>
> See the [Service Communications API permissions](https://learn.microsoft.com/en-us/graph/api/resources/service-communications-api-overview?view=graph-rest-1.0#permissions).
### 1. Register an app in Microsoft Entra
1. Create a new app registration in Microsoft Entra (e.g. "M365 Release Radar").
2. Copy the **Application (client) ID** and **Directory (tenant) ID**.
3. Create a **client secret** and copy its **Value**.
4. Under **API permissions**, add Microsoft Graph → **Delegated** → `ServiceMessage.Read.All`, then **grant admin consent**.
5. Under **Authentication**, add a **Web** redirect URI: `https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect`.
### 2. Register an OAuth client in the Teams Developer Portal
1. Go to the [Teams Developer Portal](https://dev.teams.microsoft.com/) → **Tools → OAuth client registration** → create a new registration.
2. Configure:
- **Registration name:** e.g. "M365 Release Radar"
- **Base URL:** `https://graph.microsoft.com/v1.0`
- **Restrict usage by organization:** *My organization only*
- **Restrict usage by Teams app:** *Any Teams app* (for testing/validation — restrict to your app for production)
- **Client ID / Client Secret:** the Entra app values from step 1
- **Authorization endpoint:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/authorize`
- **Token endpoint:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token`
- **Refresh endpoint:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token`
- **Scope:** `ServiceMessage.Read.All`
- **Enable PKCE:** Off
- **Client password authentication method:** Request body parameters (default)
3. Save and copy the generated **OAuth client registration ID**.
### 3. Configure the agent
Set the registration ID in your environment file, then re‑provision:
- **Local testing:** put it in `env/.env.local` (gitignored):
```
MC_OAUTH_REGISTRATION_ID=<your OAuth client registration ID>
```
- **Other environments (dev/prod):** put it in `env/.env.<env>.user` (gitignored). The committed `env/.env.<env>` template ships with `MC_OAUTH_REGISTRATION_ID=disabled` so the agent packages cleanly with Message Center **off**.
Re‑provision the agent. On first Message Center query, each admin signs in and consents once.
> ⚠️ **Never commit your real OAuth client registration ID.** Keep it only in gitignored files (`env/.env.local`, `env/.env.*.user`). See [Security](#-security).
---
## ⚙️ Configuration reference
| Variable | Where | Purpose |
| --- | --- | --- |
| `MC_OAUTH_REGISTRATION_ID` | `env/.env.local`, `env/.env.*.user` | OAuth client registration ID that enables Message Center. Value `disabled` (default) keeps it off while still packaging cleanly. |
| `AZURE_AI_OPENAI_ENDPOINT`, `AZURE_AI_API_KEY`, `AZURE_AI_API_VERSION`, `AZURE_AI_MODEL_NAME` | `env/.env.<env>` | Azure OpenAI credentials for running agent **evaluations** (optional). |
### Enable / disable behaviour
- **Off (default):** `MC_OAUTH_REGISTRATION_ID=disabled`. Roadmap + Azure work for everyone; the Message Center action is present but cannot authenticate, and the agent politely states it isn't enabled.
- **On:** set the variable to a real registration ID and re‑provision.
- **Hard removal (optional):** to ship a build with no Message Center at all, remove the `messageCenterPlugin` action from `appPackage/declarativeAgent.json` (and the two Message Center conversation starters) before packaging.
---
## 🧪 Evaluating the agent
This project includes a sample eval dataset at `evals/prompts.json`.
1. `npm install -g @microsoft/m365-copilot-eval`
2. Add the `AZURE_AI_*` variables (see [how to get them](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/evaluations-cli-get-env-values)).
3. Provision the agent first, then run `runevals` (or `runevals --env dev`).
[Read more about evaluations](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/evaluations-cli-overview).
---
## 🎨 Customising
- **Name / branding:** edit `appPackage/manifest.json` and `appPackage/declarativeAgent.json`.
- **Instructions:** refine `appPackage/instruction.txt`.
- **Adaptive cards:** tailor the response templates in `appPackage/` and `appPackage/adaptiveCards/`.
- **Actions:** add further MCP or API plugins as needed.
---
## 🔒 Security
- Secrets and identifiers are kept **out of source control**. The `.gitignore` excludes `env/.env.local`, all `env/.env.*.user` files, and `appPackage/build/`.
- **Client secrets** live only in the Entra app / Teams Developer Portal — never in this repo.
- Your **OAuth client registration ID** should only ever appear in gitignored env files. Committed `env/.env.<env>` templates use `MC_OAUTH_REGISTRATION_ID=disabled`.
- Before your first commit, run `git status` and confirm no `env/.env.local` or `env/.env.*.user` file is staged.
---
## 🗺️ Future iterations
- Combine relevant Message Center posts and roadmap items in a single response.
- "Follow" roadmap items / Message Center posts and summarise updates.
- Email / Teams digest of tracked items on request.
---
## 🤝 Contributing
Contributions are welcome! If you'd like to improve prompts, filters, cards, or documentation, please open an issue or submit a PR.
---
## 🛟 Support
This solution is open‑source and community‑provided by the **Copilot Agents & Platform Ecosystem (CAPE) team**. It is maintained by Microsoft employees and community contributors and is **not** an official Microsoft product — there is no SLA or direct Microsoft support. Please report issues via GitHub Issues.
---
## 📜 License
Licensed under the [MIT License](LICENSE).
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
No recommendations available