m365-roadmap-mcp 0.1.0__py3-none-any.whl → 0.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  """M365 Roadmap MCP Server - Query the Microsoft 365 Roadmap via MCP."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.2.1"
@@ -8,9 +8,6 @@ from fastmcp import FastMCP
8
8
  # Suppress FastMCP's INFO logs to reduce console noise
9
9
  logging.getLogger("fastmcp").setLevel(logging.WARNING)
10
10
 
11
- from .tools.cloud import check_cloud_availability
12
- from .tools.details import get_feature_details
13
- from .tools.recent import list_recent_additions
14
11
  from .tools.search import search_roadmap
15
12
 
16
13
  # Create the MCP server
@@ -19,23 +16,24 @@ mcp = FastMCP(
19
16
  instructions=(
20
17
  "Query and search the Microsoft 365 Roadmap for upcoming features, "
21
18
  "release dates, and cloud instance availability.\n\n"
22
- "Available tools:\n"
23
- "- search_roadmap: Find and filter roadmap features by keyword, product, "
24
- "status, cloud instance (GCC, GCC High, DoD), or feature ID.\n"
25
- "- get_feature_details: Retrieve full metadata for a specific roadmap "
26
- "feature by its ID.\n"
27
- "- check_cloud_availability: Verify whether a feature is available for a "
28
- "specific cloud instance (critical for government/defense clients).\n"
29
- "- list_recent_additions: List features recently added to the roadmap "
30
- "within a given number of days."
19
+ "Use the search_roadmap tool with any combination of filters:\n"
20
+ "- query: keyword search across title and description\n"
21
+ "- product: filter by product tag (e.g. 'Teams', 'SharePoint')\n"
22
+ "- status: filter by status ('In development', 'Rolling out', 'Launched')\n"
23
+ "- cloud_instance: filter by cloud instance ('GCC', 'GCC High', 'DoD')\n"
24
+ "- feature_id: retrieve a single feature by its roadmap ID\n"
25
+ "- added_within_days: show only features added within N days\n\n"
26
+ "Tips:\n"
27
+ "- To get feature details, use feature_id with the roadmap ID.\n"
28
+ "- To check cloud availability, use cloud_instance with a feature_id or "
29
+ "product filter. The cloud_instances field in each result shows all "
30
+ "supported instances.\n"
31
+ "- To list recent additions, use added_within_days (e.g. 30 for last month)."
31
32
  ),
32
33
  )
33
34
 
34
35
  # Register tools
35
36
  mcp.tool(search_roadmap)
36
- mcp.tool(get_feature_details)
37
- mcp.tool(check_cloud_availability)
38
- mcp.tool(list_recent_additions)
39
37
 
40
38
 
41
39
  def main():
@@ -1,5 +1,7 @@
1
1
  """Search tool for querying and filtering M365 Roadmap features."""
2
2
 
3
+ from datetime import datetime, timedelta, timezone
4
+
3
5
  from ..feeds.m365_api import fetch_features
4
6
 
5
7
 
@@ -9,13 +11,15 @@ async def search_roadmap(
9
11
  status: str | None = None,
10
12
  cloud_instance: str | None = None,
11
13
  feature_id: str | None = None,
14
+ added_within_days: int | None = None,
12
15
  limit: int = 10,
13
16
  ) -> dict:
14
17
  """Search the Microsoft 365 Roadmap for features matching keywords and filters.
15
18
 
16
- Combines keyword search, product filtering, status filtering, and cloud instance
17
- filtering into a single flexible tool. All filter parameters are optional and
18
- can be combined. When no filters are provided, returns the most recent features.
19
+ Combines keyword search, product filtering, status filtering, cloud instance
20
+ filtering, and recency filtering into a single flexible tool. All filter
21
+ parameters are optional and can be combined. When no filters are provided,
22
+ returns the most recent features.
19
23
 
20
24
  Use this tool to:
21
25
  - Browse recent roadmap features (no filters)
@@ -24,6 +28,7 @@ async def search_roadmap(
24
28
  - Find features by status (status="In development", "Rolling out", "Launched")
25
29
  - Filter by cloud instance (cloud_instance="GCC High", "DoD", "GCC")
26
30
  - Retrieve a specific feature by ID (feature_id="534606")
31
+ - List recently added features (added_within_days=30)
27
32
  - Combine any of the above (query="Copilot" + product="Teams" + cloud_instance="GCC")
28
33
 
29
34
  Args:
@@ -35,6 +40,9 @@ async def search_roadmap(
35
40
  e.g. "GCC" matches "GCC", "GCC High" matches "GCC High").
36
41
  feature_id: Optional roadmap ID to retrieve a single specific feature.
37
42
  When provided, all other filters are ignored.
43
+ added_within_days: Optional number of days to look back for recently added
44
+ features (clamped to 1–365). Only features with a created date within
45
+ this window are returned.
38
46
  limit: Maximum number of results to return (default: 10, max: 100).
39
47
  Ignored when feature_id is provided.
40
48
 
@@ -64,6 +72,12 @@ async def search_roadmap(
64
72
  # Clamp limit to reasonable bounds
65
73
  limit = max(1, min(limit, 100))
66
74
 
75
+ # Compute recency cutoff if requested
76
+ cutoff = None
77
+ if added_within_days is not None:
78
+ added_within_days = max(1, min(added_within_days, 365))
79
+ cutoff = datetime.now(timezone.utc) - timedelta(days=added_within_days)
80
+
67
81
  # Prepare lowercase values for case-insensitive matching
68
82
  query_lower = query.lower() if query else None
69
83
  product_lower = product.lower() if product else None
@@ -96,6 +110,19 @@ async def search_roadmap(
96
110
  ):
97
111
  continue
98
112
 
113
+ # Recency filter (added_within_days)
114
+ if cutoff is not None:
115
+ if not feature.created:
116
+ continue
117
+ try:
118
+ created_dt = datetime.fromisoformat(feature.created)
119
+ if created_dt.tzinfo is None:
120
+ created_dt = created_dt.replace(tzinfo=timezone.utc)
121
+ if created_dt < cutoff:
122
+ continue
123
+ except (ValueError, TypeError):
124
+ continue
125
+
99
126
  matched.append(feature)
100
127
 
101
128
  # Build filters summary
@@ -108,6 +135,9 @@ async def search_roadmap(
108
135
  filters_applied["status"] = status
109
136
  if cloud_instance:
110
137
  filters_applied["cloud_instance"] = cloud_instance
138
+ if added_within_days is not None:
139
+ filters_applied["added_within_days"] = added_within_days
140
+ filters_applied["cutoff_date"] = cutoff.isoformat()
111
141
  if not filters_applied:
112
142
  filters_applied["note"] = "No filters applied, returning most recent features"
113
143
 
@@ -0,0 +1,211 @@
1
+ Metadata-Version: 2.4
2
+ Name: m365-roadmap-mcp
3
+ Version: 0.2.1
4
+ Summary: MCP server for querying the Microsoft 365 Roadmap
5
+ Project-URL: Homepage, https://github.com/jonnybottles/M365-roadmap-mcp-server
6
+ Project-URL: Repository, https://github.com/jonnybottles/M365-roadmap-mcp-server
7
+ Project-URL: Issues, https://github.com/jonnybottles/M365-roadmap-mcp-server/issues
8
+ Author: Justin Buttler
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: ai-agent,gcc,mcp,microsoft-365,roadmap
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: fastmcp
20
+ Requires-Dist: httpx
21
+ Requires-Dist: pydantic
22
+ Provides-Extra: dev
23
+ Requires-Dist: pytest; extra == 'dev'
24
+ Requires-Dist: pytest-asyncio; extra == 'dev'
25
+ Description-Content-Type: text/markdown
26
+
27
+ # M365 Roadmap MCP Server
28
+
29
+ <!-- mcp-name: io.github.jonnybottles/m365-roadmap -->
30
+
31
+ A Python-based MCP (Model Context Protocol) server that enables AI agents to query the Microsoft 365 Roadmap programmatically.
32
+
33
+ ## Strategic Rationale
34
+
35
+ For organizations relying on Microsoft 365, Teams, or SharePoint, the "Roadmap" is the single source of truth for upcoming changes. However, navigating the roadmap website manually is cumbersome and disconnected from technical planning workflows. "When is Copilot coming to GCC High?" is a question that affects multi-million dollar contracts and deployment schedules.
36
+
37
+ Existing research indicates that while RSS feeds exist, there is no tool that allows an AI agent to structurally query this data to answer complex filtering questions. A "Roadmap Scout" MCP server empowers the Agent to act as a release manager, proactively identifying features that enable new capabilities or threaten existing customizations.
38
+
39
+ ## Prompt Examples
40
+
41
+ Once connected to an MCP client, you can ask questions like:
42
+
43
+ 1. **Search by product and status**: "What Microsoft Teams features are currently rolling out?"
44
+ 2. **Check government cloud availability**: "Is Copilot available for GCC High yet?"
45
+ 3. **Find recent additions**: "Show me everything added to the M365 roadmap in the last 30 days"
46
+ 4. **Get feature details**: "Tell me more about roadmap feature 534606"
47
+ 5. **Government cloud planning**: "My agency is on GCC High. Which OneDrive features can we expect?"
48
+
49
+ ## Installation
50
+
51
+ ### Prerequisites
52
+
53
+ - **Python 3.11+**
54
+ - An MCP-compatible client (Claude Desktop, Cursor, Claude Code, GitHub Copilot CLI, etc.)
55
+
56
+ ### From PyPI (recommended)
57
+
58
+ Using `uvx` (requires [uv](https://github.com/astral-sh/uv)):
59
+
60
+ ```bash
61
+ uvx m365-roadmap-mcp
62
+ ```
63
+
64
+ To update to the latest version:
65
+
66
+ ```bash
67
+ uvx m365-roadmap-mcp@latest
68
+ ```
69
+
70
+ Install uv if you don't have it:
71
+
72
+ ```bash
73
+ # macOS / Linux
74
+ curl -LsSf https://astral.sh/uv/install.sh | sh
75
+
76
+ # Windows (PowerShell)
77
+ irm https://astral.sh/uv/install.ps1 | iex
78
+ ```
79
+
80
+ Or install with pip (no uv required):
81
+
82
+ ```bash
83
+ pip install m365-roadmap-mcp
84
+
85
+ # Update to latest
86
+ pip install --upgrade m365-roadmap-mcp
87
+ ```
88
+ ## Quick Setup
89
+
90
+ [![Install in VS Code](https://img.shields.io/badge/Install_in-VS_Code-0078d4?style=flat-square&logo=visualstudiocode)](https://vscode.dev/redirect/mcp/install?name=m365-roadmap-mcp&config=%7B%22type%22%3A%20%22stdio%22%2C%20%22command%22%3A%20%22uvx%22%2C%20%22args%22%3A%20%5B%22m365-roadmap-mcp%22%5D%7D)
91
+ [![Install in Cursor](https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logo=cursor)](https://cursor.com/docs/context/mcp)
92
+ [![Install in Claude Code](https://img.shields.io/badge/Install_in-Claude_Code-9b6bff?style=flat-square&logo=anthropic)](https://code.claude.com/docs/en/mcp)
93
+ [![Install in Copilot CLI](https://img.shields.io/badge/Install_in-Copilot_CLI-28a745?style=flat-square&logo=github)](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-copilot-cli)
94
+
95
+ > **One-click install:** Click VS Code badge for automatic setup (requires `uv` installed)
96
+ > **Manual install:** See instructions below for Cursor, Claude Code, Copilot CLI, or Claude Desktop
97
+
98
+ ## Client Configuration
99
+
100
+ ### Running the server
101
+
102
+ ```bash
103
+ uvx m365-roadmap-mcp
104
+ ```
105
+
106
+ Or if installed with pip:
107
+
108
+ ```bash
109
+ m365-roadmap-mcp
110
+ ```
111
+
112
+ ### Claude Desktop
113
+
114
+ Add to your Claude Desktop MCP config:
115
+
116
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
117
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
118
+
119
+ **Using uvx (recommended)**
120
+
121
+ ```json
122
+ {
123
+ "mcpServers": {
124
+ "m365-roadmap": {
125
+ "command": "uvx",
126
+ "args": ["m365-roadmap-mcp"]
127
+ }
128
+ }
129
+ }
130
+ ```
131
+
132
+ **Using installed package**
133
+
134
+ ```json
135
+ {
136
+ "mcpServers": {
137
+ "m365-roadmap": {
138
+ "command": "m365-roadmap-mcp"
139
+ }
140
+ }
141
+ }
142
+ ```
143
+
144
+ ### Cursor
145
+
146
+ **Option 1: One-Click Install (Recommended)**
147
+
148
+ ```
149
+ cursor://anysphere.cursor-deeplink/mcp/install?name=m365-roadmap-mcp&config=eyJjb21tYW5kIjogInV2eCIsICJhcmdzIjogWyJtMzY1LXJvYWRtYXAtbWNwIl19
150
+ ```
151
+
152
+ **Option 2: Manual Configuration**
153
+
154
+ Add to your Cursor MCP config:
155
+
156
+ - macOS: `~/Library/Application Support/Cursor/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
157
+ - Windows: `%APPDATA%\Cursor\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json`
158
+
159
+ ### Claude Code
160
+
161
+ ```bash
162
+ claude mcp add --transport stdio m365-roadmap -- uvx m365-roadmap-mcp
163
+ ```
164
+
165
+ ### GitHub Copilot CLI
166
+
167
+ Add to `~/.copilot/mcp-config.json`:
168
+
169
+ ```json
170
+ {
171
+ "mcpServers": {
172
+ "m365-roadmap": {
173
+ "type": "stdio",
174
+ "command": "uvx",
175
+ "args": ["m365-roadmap-mcp"]
176
+ }
177
+ }
178
+ }
179
+ ```
180
+ ## Features
181
+
182
+ Provides a single **`search_roadmap`** tool that handles all M365 roadmap queries. Combine any filters:
183
+
184
+ - **Keyword search** -- Find features by keyword in title/description
185
+ - **Product filter** -- Filter by product tag (Teams, SharePoint, etc.)
186
+ - **Status filter** -- Filter by status (In development, Rolling out, Launched)
187
+ - **Cloud instance filter** -- Filter by cloud instance (GCC, GCC High, DoD)
188
+ - **Feature lookup** -- Retrieve full metadata for a specific roadmap ID
189
+ - **Recent additions** -- List features added within the last N days
190
+
191
+ ## Data Source
192
+
193
+ This MCP server pulls data from Microsoft's public roadmap API:
194
+
195
+ - **API Endpoint:** `https://www.microsoft.com/releasecommunications/api/v1/m365`
196
+ - **Authentication:** None required (public endpoint)
197
+ - **RSS Mirror:** `https://www.microsoft.com/microsoft-365/RoadmapFeatureRSS` (same data, RSS format)
198
+
199
+ This is the same data that powers the [Microsoft 365 Roadmap website](https://www.microsoft.com/en-us/microsoft-365/roadmap). The legacy endpoint (`roadmap-api.azurewebsites.net`) was retired in March 2025.
200
+
201
+ ### Coverage and Limitations
202
+
203
+ The API returns approximately **1,900 active features** -- those currently In Development, Rolling Out, or recently Launched. This is a hard cap; older or retired features age out of the API and are no longer returned. The roadmap website may display historical features that are no longer present in the API.
204
+
205
+ There is no official Microsoft documentation for this API. It is a public, unauthenticated endpoint that the community has reverse-engineered. Microsoft Graph does not expose the public M365 roadmap (Graph's Service Communications API covers tenant-specific Message Center posts and Service Health, which is different data).
206
+
207
+ ---
208
+
209
+ ## License
210
+
211
+ MIT
@@ -0,0 +1,14 @@
1
+ m365_roadmap_mcp/__init__.py,sha256=ydNG2ztexAZvnKchX4y1FnQ_atvfc1WGa4E8Y45lPjk,96
2
+ m365_roadmap_mcp/__main__.py,sha256=D9mYXV4TlB361LHfDDwvxsybz0_7EUsseJ3pZkS9AOo,84
3
+ m365_roadmap_mcp/server.py,sha256=U-vSRQjxmQVpySifzbPFM_eHdZn0cmYygZnoZWeDW0E,2181
4
+ m365_roadmap_mcp/feeds/__init__.py,sha256=mVerRhM3n8iwoiupqp4rhqOGOpR2WbtA6MErj5pLG3g,38
5
+ m365_roadmap_mcp/feeds/m365_api.py,sha256=MXvPGxRaE1EIyGYQCF6F94CGarz4qvGoIS6b_yD5t0Y,2058
6
+ m365_roadmap_mcp/models/__init__.py,sha256=Ml_sDvBRyK40Pq4Of0pDExGEBTjyh0QWB4VLu_zKkks,112
7
+ m365_roadmap_mcp/models/feature.py,sha256=NDKZpq4xcWBaujSaI3H7npXTO03Bh4y2BCY5vc4ZUH0,1672
8
+ m365_roadmap_mcp/tools/__init__.py,sha256=nsNOC46HR1ElncjDck0CjOyeCkh1ZugH8YOiaCg_4dE,34
9
+ m365_roadmap_mcp/tools/search.py,sha256=yKfWtQ1LzPJSa96OlM8PQBkbDzuW6SPVjmCLAWtFa9U,5817
10
+ m365_roadmap_mcp-0.2.1.dist-info/METADATA,sha256=p_WX6PvRNjlvleOWhDRViZI1NNZcUXjdPdenICCqT54,7392
11
+ m365_roadmap_mcp-0.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
12
+ m365_roadmap_mcp-0.2.1.dist-info/entry_points.txt,sha256=GNzyIHa06s1_7BMZzkI4Dsury7aBgUmOYiSXFGNgE6M,66
13
+ m365_roadmap_mcp-0.2.1.dist-info/licenses/LICENSE,sha256=NNt5lEWzqGxqVCVmj-VEeWFxXhtbgCNwFhYcCUffWDI,1071
14
+ m365_roadmap_mcp-0.2.1.dist-info/RECORD,,
@@ -1,70 +0,0 @@
1
- """Tool for checking cloud instance availability of M365 Roadmap features."""
2
-
3
- from ..feeds.m365_api import fetch_features
4
-
5
-
6
- async def check_cloud_availability(feature_id: str, instance: str) -> dict:
7
- """Check whether a Microsoft 365 Roadmap feature is available for a specific cloud instance.
8
-
9
- Critical for government and defense clients who need to verify feature availability
10
- on GCC, GCC High, or DoD cloud instances before planning deployments.
11
-
12
- Args:
13
- feature_id: The unique Roadmap ID (e.g., "534606").
14
- instance: The cloud instance to check (e.g., "GCC", "GCC High", "DoD",
15
- "Worldwide"). Case-insensitive partial match is used, so "gcc" matches
16
- "GCC" and "GCC High".
17
-
18
- Returns:
19
- Dictionary with:
20
- - feature_id: The queried feature ID
21
- - instance_queried: The cloud instance that was checked
22
- - found: Whether the feature was found in the roadmap
23
- - available: Whether the feature is available for the queried instance
24
- - matched_instances: List of cloud instances that matched the query
25
- - all_instances: All cloud instances the feature supports
26
- - status: Feature status (if found)
27
- - public_disclosure_date: Estimated release date (if found)
28
- - title: Feature title (if found)
29
- - error: Error message (if feature not found)
30
- """
31
- features = await fetch_features()
32
-
33
- # Find the feature by ID
34
- target = None
35
- for feature in features:
36
- if feature.id == feature_id:
37
- target = feature
38
- break
39
-
40
- if target is None:
41
- return {
42
- "feature_id": feature_id,
43
- "instance_queried": instance,
44
- "found": False,
45
- "available": False,
46
- "matched_instances": [],
47
- "all_instances": [],
48
- "status": None,
49
- "public_disclosure_date": None,
50
- "title": None,
51
- "error": f"No feature found with ID '{feature_id}'",
52
- }
53
-
54
- # Case-insensitive partial match on cloud instances
55
- instance_lower = instance.lower()
56
- matched = [
57
- ci for ci in target.cloud_instances if instance_lower in ci.lower()
58
- ]
59
-
60
- return {
61
- "feature_id": feature_id,
62
- "instance_queried": instance,
63
- "found": True,
64
- "available": len(matched) > 0,
65
- "matched_instances": matched,
66
- "all_instances": target.cloud_instances,
67
- "status": target.status,
68
- "public_disclosure_date": target.public_disclosure_date,
69
- "title": target.title,
70
- }
@@ -1,35 +0,0 @@
1
- """Tool for retrieving full details of a single M365 Roadmap feature."""
2
-
3
- from ..feeds.m365_api import fetch_features
4
-
5
-
6
- async def get_feature_details(feature_id: str) -> dict:
7
- """Retrieve full metadata for a specific Microsoft 365 Roadmap feature by its ID.
8
-
9
- Use this tool when you need complete details about a known roadmap feature,
10
- including its description, status, product tags, cloud instance availability,
11
- and release date.
12
-
13
- Args:
14
- feature_id: The unique Roadmap ID (e.g., "534606").
15
-
16
- Returns:
17
- Dictionary with:
18
- - found: Whether the feature was found
19
- - feature: Full feature object if found, None otherwise
20
- - error: Error message if not found
21
- """
22
- features = await fetch_features()
23
-
24
- for feature in features:
25
- if feature.id == feature_id:
26
- return {
27
- "found": True,
28
- "feature": feature.to_dict(),
29
- }
30
-
31
- return {
32
- "found": False,
33
- "feature": None,
34
- "error": f"No feature found with ID '{feature_id}'",
35
- }
@@ -1,50 +0,0 @@
1
- """Tool for listing recently added M365 Roadmap features."""
2
-
3
- from datetime import datetime, timedelta, timezone
4
-
5
- from ..feeds.m365_api import fetch_features
6
-
7
-
8
- async def list_recent_additions(days: int = 7) -> dict:
9
- """List features recently added to the Microsoft 365 Roadmap.
10
-
11
- Use this tool to monitor what new features have appeared on the roadmap
12
- within a given time window. Useful for staying current on Microsoft's
13
- latest plans and announcements.
14
-
15
- Args:
16
- days: Number of days to look back (default: 7, clamped to 1–365).
17
-
18
- Returns:
19
- Dictionary with:
20
- - total_found: Number of features added within the time window
21
- - features: List of recently added feature objects
22
- - days_queried: The actual number of days used (after clamping)
23
- - cutoff_date: The earliest date included in the results (ISO format)
24
- """
25
- # Clamp days to reasonable bounds
26
- days = max(1, min(days, 365))
27
-
28
- cutoff = datetime.now(timezone.utc) - timedelta(days=days)
29
- features = await fetch_features()
30
-
31
- recent = []
32
- for feature in features:
33
- if not feature.created:
34
- continue
35
- try:
36
- created_dt = datetime.fromisoformat(feature.created)
37
- # Ensure timezone-aware comparison
38
- if created_dt.tzinfo is None:
39
- created_dt = created_dt.replace(tzinfo=timezone.utc)
40
- if created_dt >= cutoff:
41
- recent.append(feature)
42
- except (ValueError, TypeError):
43
- continue
44
-
45
- return {
46
- "total_found": len(recent),
47
- "features": [f.to_dict() for f in recent],
48
- "days_queried": days,
49
- "cutoff_date": cutoff.isoformat(),
50
- }
@@ -1,140 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: m365-roadmap-mcp
3
- Version: 0.1.0
4
- Summary: MCP server for querying the Microsoft 365 Roadmap
5
- Project-URL: Homepage, https://github.com/jonnybottles/M365-roadmap-mcp-server
6
- Project-URL: Repository, https://github.com/jonnybottles/M365-roadmap-mcp-server
7
- Project-URL: Issues, https://github.com/jonnybottles/M365-roadmap-mcp-server/issues
8
- Author: Justin Buttler
9
- License-Expression: MIT
10
- License-File: LICENSE
11
- Keywords: ai-agent,gcc,mcp,microsoft-365,roadmap
12
- Classifier: Development Status :: 4 - Beta
13
- Classifier: License :: OSI Approved :: MIT License
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Classifier: Programming Language :: Python :: 3.13
18
- Requires-Python: >=3.11
19
- Requires-Dist: fastmcp
20
- Requires-Dist: httpx
21
- Requires-Dist: pydantic
22
- Provides-Extra: dev
23
- Requires-Dist: pytest; extra == 'dev'
24
- Requires-Dist: pytest-asyncio; extra == 'dev'
25
- Description-Content-Type: text/markdown
26
-
27
- # M365-roadmap-mcp-server
28
-
29
- A Model Context Protocol (MCP) server that enables AI agents to query the Microsoft 365 Roadmap programmatically.
30
-
31
- ## Strategic Rationale
32
-
33
- For organizations relying on Microsoft 365, Teams, or SharePoint, the "Roadmap" is the single source of truth for upcoming changes. However, navigating the roadmap website manually is cumbersome and disconnected from technical planning workflows. "When is Copilot coming to GCC High?" is a question that affects multi-million dollar contracts and deployment schedules.
34
-
35
- Existing research indicates that while RSS feeds exist, there is no tool that allows an AI agent to structurally query this data to answer complex filtering questions. A "Roadmap Scout" MCP server empowers the Agent to act as a release manager, proactively identifying features that enable new capabilities or threaten existing customizations.
36
-
37
- ## example MCP server
38
-
39
- ** NOTE THE EXAMPLE MCP SERVER IS THE WAY WE SHOULD MODEL OUR MCP SERVER FOR THIS PROJECT
40
-
41
- ## Data Source
42
-
43
- This MCP server pulls data from Microsoft's public roadmap API:
44
-
45
- - **API Endpoint:** `https://www.microsoft.com/releasecommunications/api/v1/m365`
46
- - **Authentication:** None required (public endpoint)
47
- - **RSS Mirror:** `https://www.microsoft.com/microsoft-365/RoadmapFeatureRSS` (same data, RSS format)
48
-
49
- This is the same data that powers the [Microsoft 365 Roadmap website](https://www.microsoft.com/en-us/microsoft-365/roadmap). The legacy endpoint (`roadmap-api.azurewebsites.net`) was retired in March 2025.
50
-
51
- ### Coverage and Limitations
52
-
53
- The API returns approximately **1,900 active features** -- those currently In Development, Rolling Out, or recently Launched. This is a hard cap; older or retired features age out of the API and are no longer returned. The roadmap website may display historical features that are no longer present in the API.
54
-
55
- There is no official Microsoft documentation for this API. It is a public, unauthenticated endpoint that the community has reverse-engineered. Microsoft Graph does not expose the public M365 roadmap (Graph's Service Communications API covers tenant-specific Message Center posts and Service Health, which is different data).
56
-
57
- ### Schema
58
-
59
- The API returns a JSON array where each item represents a feature:
60
-
61
- | Field | Description |
62
- |-------|-------------|
63
- | `id` | Unique Roadmap ID (e.g., "93182") |
64
- | `title` | Feature title |
65
- | `description` | HTML/Text description |
66
- | `status` | Enumerated values like "In development", "Rolling out", "Launched" |
67
- | `tags` | Product associations (e.g., "Microsoft Teams", "SharePoint") |
68
- | `publicDisclosureAvailabilityDate` | The estimated release target |
69
- | `cloudInstances` | Critical for government/defense clients. Values include "Worldwide (Standard Multi-Tenant)", "DoD", "GCC" |
70
-
71
- ## Proposed Tool Definitions
72
-
73
- | Tool Name | Description | Arguments (JSON Schema) | Expected Output |
74
- |-----------|-------------|------------------------|-----------------|
75
- | `search_roadmap` | Searches the M365 roadmap for features matching keywords and filters | `{ "query": "string", "product": "string", "status": "string" }` | List of feature summaries with IDs and dates |
76
- | `get_feature_details` | Retrieves the full metadata for a specific roadmap ID | `{ "feature_id": "string" }` | Detailed JSON object including description and instance tags |
77
- | `check_cloud_availability` | Verifies if a feature is scheduled for a specific cloud instance | `{ "feature_id": "string", "instance": "string (e.g., GCC)" }` | Boolean availability and specific release date for that instance |
78
- | `list_recent_additions` | Lists features added to the roadmap in the last X days | `{ "days": "integer" }` | List of new features to monitor |
79
-
80
- ## Example Prompts
81
-
82
- Here are 10 prompts you can use with an AI agent connected to this MCP server:
83
-
84
- 1. **"What Microsoft Teams features are currently rolling out?"**
85
- Uses `search_roadmap` with product and status filters to find Teams features in active rollout.
86
-
87
- 2. **"Is Copilot available for GCC High yet?"**
88
- Uses `search_roadmap` to find Copilot features, then `check_cloud_availability` to verify GCC High support for each result.
89
-
90
- 3. **"Show me everything added to the M365 roadmap in the last 30 days."**
91
- Uses `list_recent_additions(days=30)` to surface newly announced features.
92
-
93
- 4. **"Tell me more about that Microsoft Lists agent feature you just found."**
94
- After a prior search, the agent uses `get_feature_details` with the ID from the earlier result to retrieve the full description, cloud instances, and release date.
95
-
96
- 5. **"Which SharePoint features are in development and available for DoD?"**
97
- Uses `search_roadmap` with `product="SharePoint"`, `status="In development"`, and `cloud_instance="DoD"` to combine all three filters.
98
-
99
- 6. **"Compare GCC and GCC High availability for feature 412718."**
100
- Uses `check_cloud_availability` twice -- once with `instance="GCC"` and once with `instance="GCC High"` -- to compare cloud parity for a single feature.
101
-
102
- 7. **"What new features were added to the roadmap this week?"**
103
- Uses `list_recent_additions(days=7)` to get a concise list of the latest additions for a weekly briefing.
104
-
105
- 8. **"Find all roadmap features related to data loss prevention."**
106
- Uses `search_roadmap(query="data loss prevention")` to keyword-search across titles and descriptions.
107
-
108
- 9. **"My agency is on GCC High. Which OneDrive features can we expect?"**
109
- Uses `search_roadmap` with `product="OneDrive"` and `cloud_instance="GCC High"` to find features available for that government cloud.
110
-
111
- 10. **"List all launched Viva features and check which ones support GCC."**
112
- Uses `search_roadmap(product="Viva", status="Launched")` to get candidates, then `check_cloud_availability` on each to filter for GCC support.
113
-
114
- ## Usage Narrative: Government Compliance Checking
115
-
116
- ### Scenario
117
-
118
- An IT Director for a federal agency (using the GCC High cloud) asks about the availability of a new "Microsoft Lists" feature they saw in a demo.
119
-
120
- **User Query:** "My agency is on GCC High. When will we get the new 'Microsoft Lists' agent capabilities?"
121
-
122
- ### Agent Action
123
-
124
- 1. **Analysis:** The Agent parses the intent: Product="Microsoft Lists", Feature="agent capabilities", Constraint="GCC High"
125
-
126
- 2. **Tool Call:** `search_roadmap(query="Lists agent", product="Microsoft Lists")`
127
-
128
- 3. **Data Retrieval:** The server queries the API. It finds Roadmap ID 534606: "Enables effortless list creation for Copilot users..."
129
-
130
- 4. **Tool Call:** `check_cloud_availability(feature_id="534606", instance="GCC High")`
131
-
132
- 5. **Logic:** The server inspects the `cloudInstances` array of the feature object. It looks for "GCC High"
133
-
134
- 6. **Result:** The array contains "Worldwide (Standard Multi-Tenant)". It does not contain "GCC High"
135
-
136
- 7. **Synthesis:** The Agent formulates a precise answer
137
-
138
- ### Response
139
-
140
- > "Currently, Roadmap ID 534606 is listed for 'Worldwide (Standard Multi-Tenant)' with a status of 'Rolling Out'. It has not yet been scheduled for the GCC High environment. Based on typical parity delays, this feature is likely 6-12 months away for your tenant."
@@ -1,17 +0,0 @@
1
- m365_roadmap_mcp/__init__.py,sha256=qz6B-DQCFRM2X6JTnpV_csufVZFBugE6D29ieAJUAWw,96
2
- m365_roadmap_mcp/__main__.py,sha256=D9mYXV4TlB361LHfDDwvxsybz0_7EUsseJ3pZkS9AOo,84
3
- m365_roadmap_mcp/server.py,sha256=GXKAyCWojGATKInS6vtVW3PKzizSTe2OhHP2kPVR_0g,2107
4
- m365_roadmap_mcp/feeds/__init__.py,sha256=mVerRhM3n8iwoiupqp4rhqOGOpR2WbtA6MErj5pLG3g,38
5
- m365_roadmap_mcp/feeds/m365_api.py,sha256=MXvPGxRaE1EIyGYQCF6F94CGarz4qvGoIS6b_yD5t0Y,2058
6
- m365_roadmap_mcp/models/__init__.py,sha256=Ml_sDvBRyK40Pq4Of0pDExGEBTjyh0QWB4VLu_zKkks,112
7
- m365_roadmap_mcp/models/feature.py,sha256=NDKZpq4xcWBaujSaI3H7npXTO03Bh4y2BCY5vc4ZUH0,1672
8
- m365_roadmap_mcp/tools/__init__.py,sha256=nsNOC46HR1ElncjDck0CjOyeCkh1ZugH8YOiaCg_4dE,34
9
- m365_roadmap_mcp/tools/cloud.py,sha256=NuvztbKyMLc9pKZYD98kih23e09dAKnAeaEXZig2ky0,2562
10
- m365_roadmap_mcp/tools/details.py,sha256=jgIpi1BhraHPuMT9tQi3d8ikvLF0EZR7p_D7spNlWL0,1067
11
- m365_roadmap_mcp/tools/recent.py,sha256=Y9I5SS0I2MsV0i98QKtzXrL14AF5yfEyC3f6RiAxj-g,1709
12
- m365_roadmap_mcp/tools/search.py,sha256=kmFGam_uJsvTvDUcKjoREVSxUBghkDlrS4JevJLePtQ,4550
13
- m365_roadmap_mcp-0.1.0.dist-info/METADATA,sha256=mHnm1DnW4CEJv1lOVs1CQx77kB82W4fjI6SdsLG_1zc,8120
14
- m365_roadmap_mcp-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
15
- m365_roadmap_mcp-0.1.0.dist-info/entry_points.txt,sha256=GNzyIHa06s1_7BMZzkI4Dsury7aBgUmOYiSXFGNgE6M,66
16
- m365_roadmap_mcp-0.1.0.dist-info/licenses/LICENSE,sha256=NNt5lEWzqGxqVCVmj-VEeWFxXhtbgCNwFhYcCUffWDI,1071
17
- m365_roadmap_mcp-0.1.0.dist-info/RECORD,,