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.
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/.github/workflows/publish.yml +10 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/.gitignore +4 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/PKG-INFO +31 -38
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/README.md +30 -37
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/pyproject.toml +1 -1
- m365_roadmap_mcp-0.2.1/server.json +23 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/__init__.py +1 -1
- m365_roadmap_mcp-0.2.0/.claude/agents/mcp-server-architect.md +0 -164
- m365_roadmap_mcp-0.2.0/.claude/settings.local.json +0 -67
- m365_roadmap_mcp-0.2.0/CLAUDE.md +0 -139
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/LICENSE +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/__main__.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/feeds/__init__.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/feeds/m365_api.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/models/__init__.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/models/feature.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/server.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/tools/__init__.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/src/m365_roadmap_mcp/tools/search.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/__init__.py +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/api_snapshot.json +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/rss_feed_snapshot.xml +0 -0
- {m365_roadmap_mcp-0.2.0 → m365_roadmap_mcp-0.2.1}/tests/test_feeds.py +0 -0
- {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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: m365-roadmap-mcp
|
|
3
|
-
Version: 0.2.
|
|
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
|
|
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
|
-
##
|
|
34
|
-
|
|
35
|
-
[](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
|
-
[](https://cursor.com/docs/context/mcp)
|
|
37
|
-
[](https://code.claude.com/docs/en/mcp)
|
|
38
|
-
[](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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
+
[](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
|
+
[](https://cursor.com/docs/context/mcp)
|
|
92
|
+
[](https://code.claude.com/docs/en/mcp)
|
|
93
|
+
[](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-copilot-cli)
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
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
|
-
##
|
|
8
|
-
|
|
9
|
-
[](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
|
-
[](https://cursor.com/docs/context/mcp)
|
|
11
|
-
[](https://code.claude.com/docs/en/mcp)
|
|
12
|
-
[](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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
+
[](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
|
+
[](https://cursor.com/docs/context/mcp)
|
|
66
|
+
[](https://code.claude.com/docs/en/mcp)
|
|
67
|
+
[](https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-copilot-cli)
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
@@ -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,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
|
-
}
|
m365_roadmap_mcp-0.2.0/CLAUDE.md
DELETED
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|