m365-roadmap-mcp 0.2.0__tar.gz → 0.2.1__tar.gz

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.
Files changed (24) hide show
  1. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/.github/workflows/publish.yml +10 -0
  2. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/.gitignore +4 -0
  3. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/PKG-INFO +31 -38
  4. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/README.md +30 -37
  5. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/pyproject.toml +1 -1
  6. m365_roadmap_mcp-0.2.1/server.json +23 -0
  7. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/__init__.py +1 -1
  8. m365_roadmap_mcp-0.2.0/.claude/agents/mcp-server-architect.md +0 -164
  9. m365_roadmap_mcp-0.2.0/.claude/settings.local.json +0 -67
  10. m365_roadmap_mcp-0.2.0/CLAUDE.md +0 -139
  11. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/LICENSE +0 -0
  12. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/__main__.py +0 -0
  13. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/feeds/__init__.py +0 -0
  14. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/feeds/m365_api.py +0 -0
  15. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/models/__init__.py +0 -0
  16. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/models/feature.py +0 -0
  17. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/server.py +0 -0
  18. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/tools/__init__.py +0 -0
  19. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/tools/search.py +0 -0
  20. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/__init__.py +0 -0
  21. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/api_snapshot.json +0 -0
  22. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/rss_feed_snapshot.xml +0 -0
  23. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/test_feeds.py +0 -0
  24. {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/test_tools.py +0 -0
@@ -27,3 +27,13 @@ jobs:
27
27
 
28
28
  - name: Publish to PyPI
29
29
  uses: pypa/gh-action-pypi-publish@release/v1
30
+
31
+ - name: Install mcp-publisher
32
+ run: |
33
+ curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" | tar xz mcp-publisher
34
+
35
+ - name: Authenticate to MCP Registry
36
+ run: ./mcp-publisher login github-oidc
37
+
38
+ - name: Publish to MCP Registry
39
+ run: ./mcp-publisher publish
@@ -201,6 +201,10 @@ cython_debug/
201
201
  .cursorignore
202
202
  .cursorindexingignore
203
203
 
204
+ # Claude Code
205
+ .claude/
206
+ CLAUDE.md
207
+
204
208
  # Marimo
205
209
  marimo/_static/
206
210
  marimo/_lsp/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: m365-roadmap-mcp
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: MCP server for querying the Microsoft 365 Roadmap
5
5
  Project-URL: Homepage, https://github.com/jonnybottles/M365-roadmap-mcp-server
6
6
  Project-URL: Repository, https://github.com/jonnybottles/M365-roadmap-mcp-server
@@ -26,30 +26,15 @@ Description-Content-Type: text/markdown
26
26
 
27
27
  # M365 Roadmap MCP Server
28
28
 
29
- mcp-name: io.github.jonnybottles.m365-roadmap
29
+ <!-- mcp-name: io.github.jonnybottles/m365-roadmap -->
30
30
 
31
31
  A Python-based MCP (Model Context Protocol) server that enables AI agents to query the Microsoft 365 Roadmap programmatically.
32
32
 
33
- ## Quick Setup
34
-
35
- [![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)
36
- [![Install in Cursor](https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logo=cursor)](https://cursor.com/docs/context/mcp)
37
- [![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)
38
- [![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)
39
-
40
- > **One-click install:** Click VS Code badge for automatic setup (requires `uv` installed)
41
- > **Manual install:** See instructions below for Cursor, Claude Code, Copilot CLI, or Claude Desktop
42
-
43
- ## Features
33
+ ## Strategic Rationale
44
34
 
45
- Provides a single **`search_roadmap`** tool that handles all M365 roadmap queries. Combine any filters:
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.
46
36
 
47
- - **Keyword search** -- Find features by keyword in title/description
48
- - **Product filter** -- Filter by product tag (Teams, SharePoint, etc.)
49
- - **Status filter** -- Filter by status (In development, Rolling out, Launched)
50
- - **Cloud instance filter** -- Filter by cloud instance (GCC, GCC High, DoD)
51
- - **Feature lookup** -- Retrieve full metadata for a specific roadmap ID
52
- - **Recent additions** -- List features added within the last N days
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.
53
38
 
54
39
  ## Prompt Examples
55
40
 
@@ -76,6 +61,12 @@ Using `uvx` (requires [uv](https://github.com/astral-sh/uv)):
76
61
  uvx m365-roadmap-mcp
77
62
  ```
78
63
 
64
+ To update to the latest version:
65
+
66
+ ```bash
67
+ uvx m365-roadmap-mcp@latest
68
+ ```
69
+
79
70
  Install uv if you don't have it:
80
71
 
81
72
  ```bash
@@ -90,15 +81,19 @@ Or install with pip (no uv required):
90
81
 
91
82
  ```bash
92
83
  pip install m365-roadmap-mcp
84
+
85
+ # Update to latest
86
+ pip install --upgrade m365-roadmap-mcp
93
87
  ```
88
+ ## Quick Setup
94
89
 
95
- ### From source (for development)
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)
96
94
 
97
- ```bash
98
- git clone https://github.com/jonnybottles/M365-roadmap-mcp-server.git
99
- cd M365-roadmap-mcp-server
100
- pip install -e ".[dev]"
101
- ```
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
102
97
 
103
98
  ## Client Configuration
104
99
 
@@ -182,6 +177,16 @@ Add to `~/.copilot/mcp-config.json`:
182
177
  }
183
178
  }
184
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
185
190
 
186
191
  ## Data Source
187
192
 
@@ -201,18 +206,6 @@ There is no official Microsoft documentation for this API. It is a public, unaut
201
206
 
202
207
  ---
203
208
 
204
- ## Strategic Rationale
205
-
206
- 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.
207
-
208
- 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.
209
-
210
- ## Development
211
-
212
- ```bash
213
- pytest
214
- ```
215
-
216
209
  ## License
217
210
 
218
211
  MIT
@@ -1,29 +1,14 @@
1
1
  # M365 Roadmap MCP Server
2
2
 
3
- mcp-name: io.github.jonnybottles.m365-roadmap
3
+ <!-- mcp-name: io.github.jonnybottles/m365-roadmap -->
4
4
 
5
5
  A Python-based MCP (Model Context Protocol) server that enables AI agents to query the Microsoft 365 Roadmap programmatically.
6
6
 
7
- ## Quick Setup
8
-
9
- [![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)
10
- [![Install in Cursor](https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logo=cursor)](https://cursor.com/docs/context/mcp)
11
- [![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)
12
- [![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)
13
-
14
- > **One-click install:** Click VS Code badge for automatic setup (requires `uv` installed)
15
- > **Manual install:** See instructions below for Cursor, Claude Code, Copilot CLI, or Claude Desktop
16
-
17
- ## Features
7
+ ## Strategic Rationale
18
8
 
19
- Provides a single **`search_roadmap`** tool that handles all M365 roadmap queries. Combine any filters:
9
+ 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.
20
10
 
21
- - **Keyword search** -- Find features by keyword in title/description
22
- - **Product filter** -- Filter by product tag (Teams, SharePoint, etc.)
23
- - **Status filter** -- Filter by status (In development, Rolling out, Launched)
24
- - **Cloud instance filter** -- Filter by cloud instance (GCC, GCC High, DoD)
25
- - **Feature lookup** -- Retrieve full metadata for a specific roadmap ID
26
- - **Recent additions** -- List features added within the last N days
11
+ 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.
27
12
 
28
13
  ## Prompt Examples
29
14
 
@@ -50,6 +35,12 @@ Using `uvx` (requires [uv](https://github.com/astral-sh/uv)):
50
35
  uvx m365-roadmap-mcp
51
36
  ```
52
37
 
38
+ To update to the latest version:
39
+
40
+ ```bash
41
+ uvx m365-roadmap-mcp@latest
42
+ ```
43
+
53
44
  Install uv if you don't have it:
54
45
 
55
46
  ```bash
@@ -64,15 +55,19 @@ Or install with pip (no uv required):
64
55
 
65
56
  ```bash
66
57
  pip install m365-roadmap-mcp
58
+
59
+ # Update to latest
60
+ pip install --upgrade m365-roadmap-mcp
67
61
  ```
62
+ ## Quick Setup
68
63
 
69
- ### From source (for development)
64
+ [![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)
65
+ [![Install in Cursor](https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logo=cursor)](https://cursor.com/docs/context/mcp)
66
+ [![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)
67
+ [![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)
70
68
 
71
- ```bash
72
- git clone https://github.com/jonnybottles/M365-roadmap-mcp-server.git
73
- cd M365-roadmap-mcp-server
74
- pip install -e ".[dev]"
75
- ```
69
+ > **One-click install:** Click VS Code badge for automatic setup (requires `uv` installed)
70
+ > **Manual install:** See instructions below for Cursor, Claude Code, Copilot CLI, or Claude Desktop
76
71
 
77
72
  ## Client Configuration
78
73
 
@@ -156,6 +151,16 @@ Add to `~/.copilot/mcp-config.json`:
156
151
  }
157
152
  }
158
153
  ```
154
+ ## Features
155
+
156
+ Provides a single **`search_roadmap`** tool that handles all M365 roadmap queries. Combine any filters:
157
+
158
+ - **Keyword search** -- Find features by keyword in title/description
159
+ - **Product filter** -- Filter by product tag (Teams, SharePoint, etc.)
160
+ - **Status filter** -- Filter by status (In development, Rolling out, Launched)
161
+ - **Cloud instance filter** -- Filter by cloud instance (GCC, GCC High, DoD)
162
+ - **Feature lookup** -- Retrieve full metadata for a specific roadmap ID
163
+ - **Recent additions** -- List features added within the last N days
159
164
 
160
165
  ## Data Source
161
166
 
@@ -175,18 +180,6 @@ There is no official Microsoft documentation for this API. It is a public, unaut
175
180
 
176
181
  ---
177
182
 
178
- ## Strategic Rationale
179
-
180
- 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.
181
-
182
- 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.
183
-
184
- ## Development
185
-
186
- ```bash
187
- pytest
188
- ```
189
-
190
183
  ## License
191
184
 
192
185
  MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "m365-roadmap-mcp"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  description = "MCP server for querying the Microsoft 365 Roadmap"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.jonnybottles/m365-roadmap",
4
+ "description": "Query the Microsoft 365 Roadmap from AI agents",
5
+ "title": "M365 Roadmap",
6
+ "repository": {
7
+ "url": "https://github.com/jonnybottles/M365-roadmap-mcp-server",
8
+ "source": "github"
9
+ },
10
+ "version": "0.2.1",
11
+ "packages": [
12
+ {
13
+ "registryType": "pypi",
14
+ "registryBaseUrl": "https://pypi.org",
15
+ "identifier": "m365-roadmap-mcp",
16
+ "version": "0.2.1",
17
+ "runtimeHint": "uvx",
18
+ "transport": {
19
+ "type": "stdio"
20
+ }
21
+ }
22
+ ]
23
+ }
@@ -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"
@@ -1,164 +0,0 @@
1
- ---
2
- name: mcp-server-architect
3
- description: "Use this agent when the user needs to create, design, or implement a Model Context Protocol (MCP) server. This includes building new MCP servers from scratch, adding tools/resources/prompts to existing servers, troubleshooting MCP server issues, or converting existing APIs into MCP-compatible interfaces. Examples of when to invoke this agent:\\n\\n<example>\\nContext: User wants to create a new MCP server for a weather service.\\nuser: \"I need to build an MCP server that provides weather data tools\"\\nassistant: \"I'll use the MCP server architect agent to design and implement a proper MCP server for your weather service.\"\\n<commentary>\\nSince the user is requesting creation of an MCP server, use the Task tool to launch the mcp-server-architect agent to handle the design and implementation.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: User has an existing REST API and wants to expose it via MCP.\\nuser: \"How can I expose my existing user management API as MCP tools?\"\\nassistant: \"Let me use the MCP server architect agent to help you create an MCP server that wraps your existing API.\"\\n<commentary>\\nThe user wants to create an MCP interface for an existing API. Use the Task tool to launch the mcp-server-architect agent to design the MCP server wrapper.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: User is debugging MCP server connection issues.\\nuser: \"My MCP server isn't responding to tool calls properly\"\\nassistant: \"I'll invoke the MCP server architect agent to diagnose and fix your MCP server implementation.\"\\n<commentary>\\nMCP server troubleshooting falls within this agent's expertise. Use the Task tool to launch the mcp-server-architect agent.\\n</commentary>\\n</example>"
4
- model: opus
5
- color: green
6
- ---
7
-
8
- You are an elite Model Context Protocol (MCP) server architect with deep expertise in the FastMCP Python library and the MCP specification. You possess comprehensive knowledge of distributed systems, API design, and real-time communication protocols.
9
-
10
- ## Your Expertise
11
-
12
- - **MCP Specification Mastery**: You have complete understanding of the MCP protocol including tools, resources, prompts, sampling, and transport mechanisms (stdio, HTTP, SSE, streamable-http)
13
- - **FastMCP Expert**: You are highly proficient with the FastMCP library (v2.0.0+), including its decorators, context management, type system, and deployment patterns
14
- - **Python Best Practices**: You write clean, type-hinted, well-documented Python code following modern conventions
15
- - **Azure Integration**: You understand how to deploy MCP servers on Azure Container Apps, Azure Functions, and expose them through Azure API Management
16
-
17
- ## Core Responsibilities
18
-
19
- 1. **Design MCP Servers**: Create well-structured MCP servers with clear separation of concerns, proper error handling, and comprehensive tool definitions
20
-
21
- 2. **Implement Tools**: Define MCP tools with:
22
- - Clear, descriptive names using kebab-case (e.g., `get-weather-forecast`)
23
- - Comprehensive descriptions that help LLMs understand when and how to use the tool
24
- - Proper input validation using Pydantic models
25
- - Appropriate return types and error handling
26
- - Context parameter usage when needed for logging or progress reporting
27
-
28
- 3. **Configure Transports**: Set up appropriate transport mechanisms based on deployment requirements:
29
- - `stdio` for local development and CLI tools
30
- - `streamable-http` for production HTTP deployments
31
- - `sse` for server-sent events scenarios
32
-
33
- 4. **Handle Resources and Prompts**: When appropriate, implement MCP resources for data access and prompts for reusable interaction patterns
34
-
35
- ## FastMCP Implementation Patterns
36
-
37
- ### Basic Server Structure
38
-
39
- ```python
40
- from fastmcp import FastMCP
41
- from pydantic import BaseModel, Field
42
-
43
- mcp = FastMCP(
44
- name="service-name",
45
- instructions="Clear instructions for how the LLM should use this server"
46
- )
47
-
48
- class ToolInput(BaseModel):
49
- """Pydantic model for input validation."""
50
- param: str = Field(..., description="Clear parameter description")
51
-
52
- @mcp.tool()
53
- async def tool_name(input: ToolInput) -> dict:
54
- """Tool description that helps LLMs understand the purpose."""
55
- # Implementation
56
- return {"result": "value"}
57
- ```
58
-
59
- ### Context Usage
60
-
61
- ```python
62
- from fastmcp import FastMCP, Context
63
-
64
- @mcp.tool()
65
- async def long_running_tool(ctx: Context, param: str) -> str:
66
- """Tool that reports progress."""
67
- await ctx.report_progress(0, 100, "Starting...")
68
- # Work...
69
- await ctx.report_progress(100, 100, "Complete")
70
- return "Done"
71
- ```
72
-
73
- ### HTTP Deployment
74
-
75
- ```python
76
- if __name__ == "__main__":
77
- import uvicorn
78
-
79
- # http_app() returns a Starlette/ASGI app with HTTP transport
80
- # MCP endpoint will be available at /mcp by default
81
- app = mcp.http_app()
82
-
83
- host = os.getenv("HOST", "0.0.0.0")
84
- port = int(os.getenv("PORT", "8000"))
85
-
86
- uvicorn.run(app, host=host, port=port)
87
- ```
88
-
89
- ## Best Practices You Always Follow
90
-
91
- 1. **Tool Design**:
92
- - Keep tools focused on single responsibilities
93
- - Provide detailed descriptions including expected inputs, outputs, and use cases
94
- - Include example usage in docstrings
95
- - Handle errors gracefully with informative messages
96
- - Use service-prefixed, action-oriented names (e.g., slack_send_message) to avoid collisions and facilitate model discovery.
97
- - Use precise JSON Schema definitions with zod or Pydantic. Define types, required fields, and constraints clearly.
98
- - Ruthlessly curate tool responses. Return only the data necessary for the task, and use pagination for large results to avoid context window overflow.
99
- - Use progressive disclosure for tool discovery and favor code execution with MCP for large-scale data processing.
100
-
101
- 2. **Type Safety**:
102
- - Use precise JSON Schema definitions with zod or Pydantic.
103
- - Define types, required fields, and constraints clearly.
104
- - Add Field descriptions for all model attributes
105
- - Use appropriate types (str, int, list, dict, Optional, etc.)
106
- - Validate inputs before processing
107
-
108
- 3. **Error Handling**:
109
- - Catch and handle expected exceptions
110
- - Return structured error responses
111
- - Log errors appropriately using the context
112
- - Never expose sensitive information in error messages
113
-
114
- 4. **Configuration**:
115
- - Use environment variables for configuration
116
- - Provide sensible defaults
117
- - Document all configuration options
118
- - Validate configuration on startup
119
-
120
- 5. **Project Structure**:
121
-
122
- ```
123
- mcp-server/
124
- ├── tools/ # Tool implementations by domain
125
- │ ├── __init__.py
126
- │ └── domain_tools.py
127
- ├── models/ # Pydantic models
128
- │ └── __init__.py
129
- ├── config.py # Environment configuration
130
- ├── main.py # FastMCP server entry point
131
- ├── Dockerfile # Container deployment
132
- └── requirements.txt
133
- ```
134
-
135
- 6. **MCP Version Compliance**: Ensure servers conform to MCP specification version `2025-06-18` or later
136
-
137
- 7. **APIM Compatibility**: When deploying behind Azure API Management:
138
- - Use tools only (APIM doesn't support resources or prompts in MCP mode)
139
- - Avoid accessing response body in policies (breaks streaming)
140
- - Configure proper subscription key authentication
141
-
142
- ## Quality Assurance
143
-
144
- Before completing any MCP server implementation, verify:
145
-
146
- - [ ] All tools have clear descriptions
147
- - [ ] Input validation is comprehensive
148
- - [ ] Error handling covers edge cases
149
- - [ ] Configuration is externalized
150
- - [ ] Code is properly typed and documented
151
- - [ ] Transport is appropriate for deployment target
152
- - [ ] Server can be tested with MCP Inspector
153
-
154
- ## When You Need Clarification
155
-
156
- Proactively ask for clarification when:
157
-
158
- - The scope of tools needed is unclear
159
- - Deployment environment is not specified
160
- - Integration requirements with existing systems are ambiguous
161
- - Security or authentication requirements are not defined
162
- - Expected scale or performance requirements are unknown
163
-
164
- You are thorough, precise, and focused on creating production-ready MCP servers that follow all best practices and integrate seamlessly with the broader MCP ecosystem.
@@ -1,67 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(git branch:*)",
5
- "Bash(git restore:*)",
6
- "Bash(del nul)",
7
- "Bash(if exist nul del nul)",
8
- "Bash(git checkout:*)",
9
- "Bash(python -m azure_updates_mcp.server:*)",
10
- "Bash(git add:*)",
11
- "Bash(git commit:*)",
12
- "Bash(git rm:*)",
13
- "Bash(git push)",
14
- "Bash(pip install:*)",
15
- "Bash(xargs:*)",
16
- "Bash(git ls-tree:*)",
17
- "Bash(git check-ignore:*)",
18
- "Bash(python -m pytest:*)",
19
- "Bash(git push:*)",
20
- "Bash(git merge:*)",
21
- "Bash(python -c:*)",
22
- "Bash(uv run:*)",
23
- "Bash(git reset:*)",
24
- "WebSearch",
25
- "mcp__context7__resolve-library-id",
26
- "mcp__context7__query-docs",
27
- "Bash(find \"C:\\\\Users\\\\jonbutler\\\\code\\\\azure-updates-mcp\" -type f -name \"*ping*.pyc\" -delete)",
28
- "Bash(pytest:*)",
29
- "Bash(ruff check:*)",
30
- "WebFetch(domain:mcpbadge.dev)",
31
- "WebFetch(domain:vscodemcp.com)",
32
- "WebFetch(domain:raw.githubusercontent.com)",
33
- "WebFetch(domain:github.com)",
34
- "Bash(pip search:*)",
35
- "Bash(uv pip search:*)",
36
- "WebFetch(domain:pypi.org)",
37
- "Bash(uv build:*)",
38
- "Bash(unzip:*)",
39
- "Bash(gh release create v0.1.0 --title \"v0.1.0 - Initial Release\" --notes \"$\\(cat <<''EOF''\n## Added\n- Initial release of azure-updates-mcp\n- `azure_updates_search` tool for searching and filtering Azure updates\n- `azure_updates_summarize` tool for getting statistical overview and trends\n- `azure_updates_list_categories` tool for listing available Azure service categories\n- Support for stdio transport \\(recommended for MCP clients\\)\n- One-click install support for VS Code and Cursor\n- Installation instructions for Claude Desktop, Claude Code, and GitHub Copilot CLI\nEOF\n\\)\")",
40
- "Bash(gh run list:*)",
41
- "Bash(gh workflow run:*)",
42
- "Bash(gh release delete:*)",
43
- "Bash(git tag:*)",
44
- "Bash(gh run watch:*)",
45
- "Bash(gh run view:*)",
46
- "Bash(uvx:*)",
47
- "WebFetch(domain:cursor.com)",
48
- "Bash(ls:*)",
49
- "Bash(GIT_SEQUENCE_EDITOR=\"sed -i 's/^pick/reword/'\" git rebase:*)",
50
- "Bash(git filter-branch:*)",
51
- "Bash(git reflog expire:*)",
52
- "Bash(git gc:*)",
53
- "WebFetch(domain:modelcontextprotocol.info)",
54
- "Bash(python -m build:*)",
55
- "Bash(C:UsersjonbutlerAppDataLocalProgramsPythonPython311python.exe -m build)",
56
- "Bash(\"C:\\\\Users\\\\jonbutler\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python311\\\\python.exe\" -m build)",
57
- "Bash(\"C:\\\\Users\\\\jonbutler\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python311\\\\python.exe\" -m twine upload dist/azure_updates_mcp-0.1.1*)",
58
- "Bash(gh release create:*)",
59
- "Bash(curl:*)",
60
- "Bash(tar xf:*)",
61
- "Bash(./mcp-publisher.exe:*)",
62
- "WebFetch(domain:registry.modelcontextprotocol.io)",
63
- "Bash(python -m json.tool:*)",
64
- "Bash(git config:*)"
65
- ]
66
- }
67
- }
@@ -1,139 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Project Overview
6
-
7
- This is a Model Context Protocol (MCP) server that enables AI agents to query the Microsoft 365 Roadmap programmatically. The server provides structured access to Microsoft's public roadmap API, allowing agents to answer complex filtering questions about upcoming M365 features, release dates, and cloud instance availability (particularly critical for government/defense clients using GCC, GCC High, or DoD instances).
8
-
9
- **Key API Endpoint**: `https://www.microsoft.com/releasecommunications/api/v1/m365` (replaces legacy roadmap-api.azurewebsites.net)
10
-
11
- ## Architecture Pattern
12
-
13
- This project follows a standard MCP server architecture:
14
-
15
- ### Directory Structure
16
- ```
17
- src/
18
- <server_name>_mcp/
19
- server.py # FastMCP server initialization with stdio/HTTP transport
20
- models/ # Pydantic models for data structures
21
- feeds/ # Data fetching and parsing logic
22
- tools/ # MCP tool implementations (async functions)
23
- __init__.py
24
- <tool_name>.py # Each tool in its own module
25
- tests/
26
- test_tools.py # pytest-based tests for MCP tools
27
- test_feeds.py # Tests for data fetching
28
- ```
29
-
30
- ### Core Components
31
-
32
- **1. Server Entry Point (`server.py`)**
33
- - Uses FastMCP library for MCP protocol implementation
34
- - Supports dual transport: stdio (default for MCP client auto-start) and HTTP (for remote access)
35
- - Transport selection via `MCP_TRANSPORT` environment variable
36
- - Registers tools using `mcp.tool()` decorator
37
- - Includes server instructions for AI agents
38
-
39
- **2. Tool Implementation Pattern**
40
- - Each tool is an async function in `tools/` directory
41
- - Tools accept typed parameters (leveraging Python type hints)
42
- - Return structured dictionaries with results
43
- - Include comprehensive docstrings describing usage, parameters, and return values
44
- - Example tool structure:
45
- ```python
46
- async def tool_name(
47
- param1: str | None = None,
48
- param2: int = 10,
49
- ) -> dict:
50
- """Tool description.
51
-
52
- Args:
53
- param1: Description
54
- param2: Description
55
-
56
- Returns:
57
- Dictionary with results
58
- """
59
- ```
60
-
61
- **3. Data Models (`models/`)**
62
- - Pydantic BaseModel classes for type safety and validation
63
- - Include `to_dict()` methods for serialization
64
- - Use Field() with descriptions for clarity
65
-
66
- **4. Data Fetching (`feeds/`)**
67
- - Async functions using httpx for HTTP requests
68
- - RSS/API parsing logic separated from tool logic
69
- - Returns strongly-typed model objects
70
-
71
- ## Tool Definitions
72
-
73
- **`search_roadmap`** - Single tool for all M365 roadmap queries. All parameters are optional and can be combined.
74
- - Args:
75
- - query (str) - keyword search across title and description
76
- - product (str) - filter by product tag (e.g. "Teams", "SharePoint")
77
- - status (str) - filter by status ("In development", "Rolling out", "Launched")
78
- - cloud_instance (str) - filter by cloud instance ("GCC", "GCC High", "DoD")
79
- - feature_id (str) - retrieve a single feature by its roadmap ID (ignores other filters)
80
- - added_within_days (int) - only return features added within N days (clamped 1-365)
81
- - limit (int, default=10, max=100) - max results returned
82
- - Returns: dict with total_found, features list, filters_applied
83
- - Feature details: use `feature_id` to look up a specific feature
84
- - Cloud availability: each feature includes `cloud_instances` list; combine with `cloud_instance` filter
85
- - Recent additions: use `added_within_days` (e.g. 30 for last month)
86
-
87
- ## Key Schema Fields from M365 API
88
-
89
- Critical fields from the API response:
90
- - `id` - Unique Roadmap ID
91
- - `title` - Feature title
92
- - `description` - HTML/Text description
93
- - `status` - Values: "In development", "Rolling out", "Launched"
94
- - `tags` - Product associations (e.g., "Microsoft Teams", "SharePoint")
95
- - `publicDisclosureAvailabilityDate` - Estimated release target
96
- - `cloudInstances` - Critical for government clients: "Worldwide (Standard Multi-Tenant)", "DoD", "GCC", "GCC High"
97
-
98
- ## Development Commands
99
-
100
- **Testing**
101
- ```bash
102
- pytest # Run all tests
103
- pytest tests/test_tools.py # Run specific test file
104
- pytest -k test_name # Run specific test by name
105
- pytest -v # Verbose output
106
- ```
107
-
108
- **Running the Server**
109
-
110
- Stdio mode (default for MCP clients):
111
- ```bash
112
- python -m <server_name>_mcp.server
113
- ```
114
-
115
- HTTP mode (for remote access):
116
- ```bash
117
- MCP_TRANSPORT=http python -m <server_name>_mcp.server
118
- # Custom host/port:
119
- MCP_TRANSPORT=http MCP_HOST=0.0.0.0 MCP_PORT=8000 python -m <server_name>_mcp.server
120
- ```
121
-
122
- ## Testing Approach
123
-
124
- - Use pytest with `@pytest.mark.asyncio` for async tests
125
- - Test each tool with multiple filter combinations
126
- - Include edge cases: invalid dates, nonexistent IDs, empty results
127
- - Verify filter composition (multiple filters combined)
128
- - Test boundary conditions (limit clamping, date ranges)
129
- - Structure: One test file per module (test_tools.py, test_feeds.py)
130
-
131
- ## Implementation Notes
132
-
133
- 1. **Follow the Established Architecture**: The directory structure and patterns in `src/m365_roadmap_mcp/` define the standard to follow
134
- 2. **Async-First**: All tools and data fetching should be async
135
- 3. **Filter Composition**: Support combining multiple filters (see search.py for pattern)
136
- 4. **Error Handling**: Return error messages in `filters_applied` dict rather than raising exceptions
137
- 5. **Case-Insensitive Matching**: Use `.lower()` for all string comparisons
138
- 6. **Government Cloud Focus**: The `cloudInstances` field is critical for compliance - prioritize accurate filtering
139
- 7. **Transport Flexibility**: Support both stdio (for local MCP clients) and HTTP (for remote access) via environment variables