mirror of
https://github.com/github/awesome-copilot.git
synced 2026-02-20 02:15:12 +00:00
Add MCP-based M365 Agents collection
- Create Declarative Agent prompt with MCP server integration - Create Adaptive Cards prompt for visual response templates - Deploy and Manage Agents prompt for admin workflows - Development guidelines instruction file - Collection manifest and reference documentation Based on: - https://devblogs.microsoft.com/microsoft365dev/build-declarative-agents-for-microsoft-365-copilot-with-mcp/ - https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/build-mcp-plugins - https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/api-plugin-adaptive-cards - https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-copilot-agents-integrated-apps
This commit is contained in:
325
collections/mcp-m365-copilot.collection.md
Normal file
325
collections/mcp-m365-copilot.collection.md
Normal file
@@ -0,0 +1,325 @@
|
|||||||
|
# MCP-based M365 Agents Collection
|
||||||
|
|
||||||
|
A comprehensive collection of prompts and instructions for building declarative agents with Model Context Protocol (MCP) integration for Microsoft 365 Copilot.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The Model Context Protocol (MCP) is a universal standard that allows AI models to integrate with external systems through standardized server endpoints. This collection provides everything you need to build, deploy, and manage MCP-based declarative agents that extend Microsoft 365 Copilot with custom capabilities.
|
||||||
|
|
||||||
|
## What is Model Context Protocol?
|
||||||
|
|
||||||
|
MCP is an open protocol developed to streamline how AI models connect to external data sources and tools. Instead of custom integration code for each system, MCP provides a consistent interface for:
|
||||||
|
|
||||||
|
- **Server Metadata**: Discover available tools and capabilities
|
||||||
|
- **Tools Listing**: Get function definitions and schemas
|
||||||
|
- **Tool Execution**: Invoke tools with parameters and receive results
|
||||||
|
|
||||||
|
For Microsoft 365 Copilot, this means you can create agents that connect to any MCP-compatible server with point-and-click configuration instead of writing custom code.
|
||||||
|
|
||||||
|
## Collection Contents
|
||||||
|
|
||||||
|
### Prompts
|
||||||
|
|
||||||
|
1. **Create Declarative Agent** ([mcp-create-declarative-agent.prompt.md](prompts/mcp-create-declarative-agent.prompt.md))
|
||||||
|
- Build declarative agents using Microsoft 365 Agents Toolkit
|
||||||
|
- Configure MCP server integration with tool import
|
||||||
|
- Set up OAuth 2.0 or SSO authentication
|
||||||
|
- Configure response semantics for data extraction
|
||||||
|
- Package and deploy agents for testing
|
||||||
|
|
||||||
|
2. **Create Adaptive Cards** ([mcp-create-adaptive-cards.prompt.md](prompts/mcp-create-adaptive-cards.prompt.md))
|
||||||
|
- Design static and dynamic Adaptive Card templates
|
||||||
|
- Configure response semantics (data_path, properties, template_selector)
|
||||||
|
- Use template language for conditionals and data binding
|
||||||
|
- Create responsive cards that work across Copilot surfaces
|
||||||
|
- Implement card actions for user interactions
|
||||||
|
|
||||||
|
3. **Deploy and Manage Agents** ([mcp-deploy-manage-agents.prompt.md](prompts/mcp-deploy-manage-agents.prompt.md))
|
||||||
|
- Deploy agents via Microsoft 365 admin center
|
||||||
|
- Configure organizational or public store distribution
|
||||||
|
- Manage agent lifecycle (publish, deploy, block, remove)
|
||||||
|
- Set up governance and compliance controls
|
||||||
|
- Monitor agent usage and performance
|
||||||
|
|
||||||
|
### Instructions
|
||||||
|
|
||||||
|
**MCP M365 Copilot Development Guidelines** ([mcp-m365-copilot.instructions.md](instructions/mcp-m365-copilot.instructions.md))
|
||||||
|
- Best practices for MCP server design and tool selection
|
||||||
|
- File organization and project structure
|
||||||
|
- Response semantics configuration patterns
|
||||||
|
- Adaptive Card design principles
|
||||||
|
- Security, governance, and compliance requirements
|
||||||
|
- Testing and deployment workflows
|
||||||
|
|
||||||
|
## Key Concepts
|
||||||
|
|
||||||
|
### Declarative Agents
|
||||||
|
|
||||||
|
Declarative agents are defined through configuration files rather than code:
|
||||||
|
- **declarativeAgent.json**: Agent instructions, capabilities, conversation starters
|
||||||
|
- **ai-plugin.json**: MCP server tools, response semantics, adaptive card templates
|
||||||
|
- **mcp.json**: MCP server URL, authentication configuration
|
||||||
|
- **manifest.json**: Teams app manifest for packaging
|
||||||
|
|
||||||
|
### MCP Server Integration
|
||||||
|
|
||||||
|
The Microsoft 365 Agents Toolkit provides a visual interface for:
|
||||||
|
1. **Scaffold** a new agent project
|
||||||
|
2. **Add MCP action** to connect to a server
|
||||||
|
3. **Choose tools** from the server's available functions
|
||||||
|
4. **Configure authentication** (OAuth 2.0, SSO)
|
||||||
|
5. **Generate files** (agent config, plugin manifest)
|
||||||
|
6. **Test** in m365.cloud.microsoft/chat
|
||||||
|
|
||||||
|
### Authentication Patterns
|
||||||
|
|
||||||
|
**OAuth 2.0 Static Registration:**
|
||||||
|
- Pre-register OAuth app with service provider
|
||||||
|
- Store credentials in .env.local (never commit)
|
||||||
|
- Reference in ai-plugin.json authentication config
|
||||||
|
- Users consent once, tokens stored in plugin vault
|
||||||
|
|
||||||
|
**Single Sign-On (SSO):**
|
||||||
|
- Use Microsoft Entra ID for authentication
|
||||||
|
- Seamless experience for M365 users
|
||||||
|
- No separate login required
|
||||||
|
- Ideal for internal organizational agents
|
||||||
|
|
||||||
|
### Response Semantics
|
||||||
|
|
||||||
|
Extract and format data from MCP server responses:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$.items[*]",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"subtitle": "$.description",
|
||||||
|
"url": "$.html_url"
|
||||||
|
},
|
||||||
|
"static_template": { ... }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **data_path**: JSONPath to extract array or object
|
||||||
|
- **properties**: Map response fields to Copilot properties
|
||||||
|
- **template_selector**: Choose dynamic template based on response
|
||||||
|
- **static_template**: Adaptive Card for visual formatting
|
||||||
|
|
||||||
|
### Adaptive Cards
|
||||||
|
|
||||||
|
Rich visual responses for agent outputs:
|
||||||
|
|
||||||
|
**Static Templates:**
|
||||||
|
- Defined once in ai-plugin.json
|
||||||
|
- Used for all responses with same structure
|
||||||
|
- Better performance and easier maintenance
|
||||||
|
|
||||||
|
**Dynamic Templates:**
|
||||||
|
- Returned in API response body
|
||||||
|
- Selected via template_selector JSONPath
|
||||||
|
- Useful for varied response structures
|
||||||
|
|
||||||
|
**Template Language:**
|
||||||
|
- `${property}`: Data binding
|
||||||
|
- `${if(condition, true, false)}`: Conditionals
|
||||||
|
- `${formatNumber(value, decimals)}`: Formatting
|
||||||
|
- `$when`: Conditional element rendering
|
||||||
|
|
||||||
|
## Deployment Options
|
||||||
|
|
||||||
|
### Organization Deployment
|
||||||
|
- IT admin deploys to all users or specific groups
|
||||||
|
- Requires approval in Microsoft 365 admin center
|
||||||
|
- Best for internal business agents
|
||||||
|
- Full governance and compliance controls
|
||||||
|
|
||||||
|
### Agent Store
|
||||||
|
- Submit to Partner Center for validation
|
||||||
|
- Public availability to all Copilot users
|
||||||
|
- Rigorous security and compliance review
|
||||||
|
- Suitable for partner-built agents
|
||||||
|
|
||||||
|
## Partner Examples
|
||||||
|
|
||||||
|
### monday.com
|
||||||
|
Task and project management integration:
|
||||||
|
- Create tasks directly from Copilot
|
||||||
|
- Query project status and updates
|
||||||
|
- Assign work items to team members
|
||||||
|
- View deadlines and milestones
|
||||||
|
|
||||||
|
### Canva
|
||||||
|
Design automation capabilities:
|
||||||
|
- Generate branded content
|
||||||
|
- Create social media graphics
|
||||||
|
- Access design templates
|
||||||
|
- Export in multiple formats
|
||||||
|
|
||||||
|
### Sitecore
|
||||||
|
Content management integration:
|
||||||
|
- Search content repository
|
||||||
|
- Create and update content items
|
||||||
|
- Manage workflows and approvals
|
||||||
|
- Preview content in context
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
- Visual Studio Code
|
||||||
|
- Microsoft 365 Agents Toolkit extension (v6.3.x or later)
|
||||||
|
- GitHub account (for OAuth examples)
|
||||||
|
- Microsoft 365 Copilot license
|
||||||
|
- Access to an MCP-compatible server
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
1. Install Microsoft 365 Agents Toolkit in VS Code
|
||||||
|
2. Use **Create Declarative Agent** prompt to scaffold project
|
||||||
|
3. Add MCP server URL and choose tools
|
||||||
|
4. Configure authentication with OAuth or SSO
|
||||||
|
5. Use **Create Adaptive Cards** prompt to design response templates
|
||||||
|
6. Test agent at m365.cloud.microsoft/chat
|
||||||
|
7. Use **Deploy and Manage Agents** prompt for distribution
|
||||||
|
|
||||||
|
### Development Workflow
|
||||||
|
```
|
||||||
|
1. Scaffold agent project
|
||||||
|
↓
|
||||||
|
2. Connect MCP server
|
||||||
|
↓
|
||||||
|
3. Import tools
|
||||||
|
↓
|
||||||
|
4. Configure authentication
|
||||||
|
↓
|
||||||
|
5. Design adaptive cards
|
||||||
|
↓
|
||||||
|
6. Test locally
|
||||||
|
↓
|
||||||
|
7. Deploy to organization
|
||||||
|
↓
|
||||||
|
8. Monitor and iterate
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### MCP Server Design
|
||||||
|
- Import only necessary tools (avoid over-scoping)
|
||||||
|
- Use secure authentication (OAuth 2.0, SSO)
|
||||||
|
- Test each tool individually
|
||||||
|
- Validate server endpoints are HTTPS
|
||||||
|
- Consider token limits when selecting tools
|
||||||
|
|
||||||
|
### Agent Instructions
|
||||||
|
- Be specific and clear about agent capabilities
|
||||||
|
- Provide examples of how to interact
|
||||||
|
- Set boundaries for what agent can/cannot do
|
||||||
|
- Use conversation starters to guide users
|
||||||
|
|
||||||
|
### Response Formatting
|
||||||
|
- Use JSONPath to extract relevant data
|
||||||
|
- Map properties clearly (title, subtitle, url)
|
||||||
|
- Design adaptive cards for readability
|
||||||
|
- Test cards across Copilot surfaces (Chat, Teams, Outlook)
|
||||||
|
|
||||||
|
### Security and Governance
|
||||||
|
- Never commit credentials to source control
|
||||||
|
- Use environment variables for secrets
|
||||||
|
- Follow principle of least privilege
|
||||||
|
- Review compliance requirements
|
||||||
|
- Monitor agent usage and performance
|
||||||
|
|
||||||
|
## Common Use Cases
|
||||||
|
|
||||||
|
### Data Retrieval
|
||||||
|
- Search external systems
|
||||||
|
- Fetch user-specific information
|
||||||
|
- Query databases or APIs
|
||||||
|
- Aggregate data from multiple sources
|
||||||
|
|
||||||
|
### Task Automation
|
||||||
|
- Create tickets or tasks
|
||||||
|
- Update records or statuses
|
||||||
|
- Trigger workflows
|
||||||
|
- Schedule actions
|
||||||
|
|
||||||
|
### Content Generation
|
||||||
|
- Create documents or designs
|
||||||
|
- Generate reports or summaries
|
||||||
|
- Format data into templates
|
||||||
|
- Export in various formats
|
||||||
|
|
||||||
|
### Integration Scenarios
|
||||||
|
- Connect CRM systems
|
||||||
|
- Integrate project management tools
|
||||||
|
- Access knowledge bases
|
||||||
|
- Connect to custom business apps
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Agent Not Appearing in Copilot
|
||||||
|
- Verify agent is deployed in admin center
|
||||||
|
- Check user is in assigned group
|
||||||
|
- Confirm agent is not blocked
|
||||||
|
- Refresh Copilot interface
|
||||||
|
|
||||||
|
### Authentication Errors
|
||||||
|
- Validate OAuth credentials in .env.local
|
||||||
|
- Check scopes match required permissions
|
||||||
|
- Test auth flow independently
|
||||||
|
- Verify MCP server is accessible
|
||||||
|
|
||||||
|
### Response Formatting Issues
|
||||||
|
- Test JSONPath expressions with sample data
|
||||||
|
- Validate data_path extracts expected array/object
|
||||||
|
- Check property mappings are correct
|
||||||
|
- Test adaptive card with various response structures
|
||||||
|
|
||||||
|
### Performance Problems
|
||||||
|
- Monitor MCP server response times
|
||||||
|
- Reduce number of imported tools
|
||||||
|
- Optimize response data size
|
||||||
|
- Use caching where appropriate
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
### Official Documentation
|
||||||
|
- [Build Declarative Agents with MCP (DevBlogs)](https://devblogs.microsoft.com/microsoft365dev/build-declarative-agents-for-microsoft-365-copilot-with-mcp/)
|
||||||
|
- [Build MCP Plugins (Microsoft Learn)](https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/build-mcp-plugins)
|
||||||
|
- [API Plugin Adaptive Cards (Microsoft Learn)](https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/api-plugin-adaptive-cards)
|
||||||
|
- [Manage Copilot Agents (Microsoft Learn)](https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-copilot-agents-integrated-apps)
|
||||||
|
|
||||||
|
### Tools and Extensions
|
||||||
|
- [Microsoft 365 Agents Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension)
|
||||||
|
- [Adaptive Cards Designer](https://adaptivecards.io/designer/)
|
||||||
|
- [Teams Toolkit](https://learn.microsoft.com/en-us/microsoftteams/platform/toolkit/teams-toolkit-fundamentals)
|
||||||
|
|
||||||
|
### MCP Resources
|
||||||
|
- [Model Context Protocol Specification](https://modelcontextprotocol.io/)
|
||||||
|
- [MCP Server Directory](https://github.com/modelcontextprotocol/servers)
|
||||||
|
- Community MCP servers and examples
|
||||||
|
|
||||||
|
### Admin and Governance
|
||||||
|
- [Microsoft 365 Admin Center](https://admin.microsoft.com/)
|
||||||
|
- [Power Platform Admin Center](https://admin.powerplatform.microsoft.com/)
|
||||||
|
- [Partner Center](https://partner.microsoft.com/) for agent submissions
|
||||||
|
|
||||||
|
## Support and Community
|
||||||
|
|
||||||
|
- Join the [Microsoft 365 Developer Community](https://developer.microsoft.com/en-us/microsoft-365/community)
|
||||||
|
- Ask questions on [Microsoft Q&A](https://learn.microsoft.com/en-us/answers/products/)
|
||||||
|
- Share feedback in [Microsoft 365 Copilot GitHub discussions](https://github.com/microsoft/copilot-feedback)
|
||||||
|
|
||||||
|
## What's Next?
|
||||||
|
|
||||||
|
After mastering MCP-based agents, explore:
|
||||||
|
- **Advanced tool composition**: Combine multiple MCP servers
|
||||||
|
- **Custom authentication flows**: Implement custom OAuth providers
|
||||||
|
- **Complex adaptive cards**: Multi-action cards with dynamic data
|
||||||
|
- **Agent analytics**: Track usage patterns and optimize
|
||||||
|
- **Multi-agent orchestration**: Build agents that work together
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This collection is maintained by the community and reflects current best practices for MCP-based M365 Copilot agent development. Contributions and feedback welcome!*
|
||||||
18
collections/mcp-m365-copilot.collection.yml
Normal file
18
collections/mcp-m365-copilot.collection.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
id: mcp-m365-copilot
|
||||||
|
name: MCP-based M365 Agents
|
||||||
|
description: Comprehensive collection for building declarative agents with Model Context Protocol integration for Microsoft 365 Copilot
|
||||||
|
tags: [mcp, m365-copilot, declarative-agents, api-plugins, model-context-protocol, adaptive-cards]
|
||||||
|
|
||||||
|
display:
|
||||||
|
order: manual
|
||||||
|
show_badge: true
|
||||||
|
|
||||||
|
items:
|
||||||
|
- kind: prompt
|
||||||
|
path: prompts/mcp-create-declarative-agent.prompt.md
|
||||||
|
- kind: prompt
|
||||||
|
path: prompts/mcp-create-adaptive-cards.prompt.md
|
||||||
|
- kind: prompt
|
||||||
|
path: prompts/mcp-deploy-manage-agents.prompt.md
|
||||||
|
- kind: instruction
|
||||||
|
path: instructions/mcp-m365-copilot.instructions.md
|
||||||
357
instructions/mcp-m365-copilot.instructions.md
Normal file
357
instructions/mcp-m365-copilot.instructions.md
Normal file
@@ -0,0 +1,357 @@
|
|||||||
|
---
|
||||||
|
description: 'Best practices for building MCP-based declarative agents and API plugins for Microsoft 365 Copilot with Model Context Protocol integration'
|
||||||
|
applyTo: '**/{*mcp*,*agent*,*plugin*,declarativeAgent.json,ai-plugin.json,mcp.json,manifest.json}'
|
||||||
|
---
|
||||||
|
|
||||||
|
# MCP-based M365 Copilot Development Guidelines
|
||||||
|
|
||||||
|
## Core Principles
|
||||||
|
|
||||||
|
### Model Context Protocol First
|
||||||
|
- Leverage MCP servers for external system integration
|
||||||
|
- Import tools from server endpoints, not manual definitions
|
||||||
|
- Let MCP handle schema discovery and function generation
|
||||||
|
- Use point-and-click tool selection in Agents Toolkit
|
||||||
|
|
||||||
|
### Declarative Over Imperative
|
||||||
|
- Define agent behavior through configuration, not code
|
||||||
|
- Use declarativeAgent.json for instructions and capabilities
|
||||||
|
- Specify tools and actions in ai-plugin.json
|
||||||
|
- Configure MCP servers in mcp.json
|
||||||
|
|
||||||
|
### Security and Governance
|
||||||
|
- Always use OAuth 2.0 or SSO for authentication
|
||||||
|
- Follow principle of least privilege for tool selection
|
||||||
|
- Validate MCP server endpoints are secure
|
||||||
|
- Review compliance requirements before deployment
|
||||||
|
|
||||||
|
### User-Centric Design
|
||||||
|
- Create adaptive cards for rich visual responses
|
||||||
|
- Provide clear conversation starters
|
||||||
|
- Design for responsive experience across hubs
|
||||||
|
- Test thoroughly before organizational deployment
|
||||||
|
|
||||||
|
## MCP Server Design
|
||||||
|
|
||||||
|
### Server Selection
|
||||||
|
Choose MCP servers that:
|
||||||
|
- Expose relevant tools for user tasks
|
||||||
|
- Support secure authentication (OAuth 2.0, SSO)
|
||||||
|
- Provide reliable uptime and performance
|
||||||
|
- Follow MCP specification standards
|
||||||
|
- Return well-structured response data
|
||||||
|
|
||||||
|
### Tool Import Strategy
|
||||||
|
- Import only necessary tools (avoid over-scoping)
|
||||||
|
- Group related tools from same server
|
||||||
|
- Test each tool individually before combining
|
||||||
|
- Consider token limits when selecting multiple tools
|
||||||
|
|
||||||
|
### Authentication Configuration
|
||||||
|
**OAuth 2.0 Static Registration:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "OAuthPluginVault",
|
||||||
|
"reference_id": "YOUR_AUTH_ID",
|
||||||
|
"client_id": "github_client_id",
|
||||||
|
"client_secret": "github_client_secret",
|
||||||
|
"authorization_url": "https://github.com/login/oauth/authorize",
|
||||||
|
"token_url": "https://github.com/login/oauth/access_token",
|
||||||
|
"scope": "repo read:user"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**SSO (Microsoft Entra ID):**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "OAuthPluginVault",
|
||||||
|
"reference_id": "sso_auth",
|
||||||
|
"authorization_url": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
||||||
|
"token_url": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
||||||
|
"scope": "User.Read"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## File Organization
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
```
|
||||||
|
project-root/
|
||||||
|
├── appPackage/
|
||||||
|
│ ├── manifest.json # Teams app manifest
|
||||||
|
│ ├── declarativeAgent.json # Agent config (instructions, capabilities)
|
||||||
|
│ ├── ai-plugin.json # API plugin definition
|
||||||
|
│ ├── color.png # App icon color
|
||||||
|
│ └── outline.png # App icon outline
|
||||||
|
├── .vscode/
|
||||||
|
│ └── mcp.json # MCP server configuration
|
||||||
|
├── .env.local # Credentials (NEVER commit)
|
||||||
|
└── teamsapp.yml # Teams Toolkit config
|
||||||
|
```
|
||||||
|
|
||||||
|
### Critical Files
|
||||||
|
|
||||||
|
**declarativeAgent.json:**
|
||||||
|
- Agent name and description
|
||||||
|
- Instructions for behavior
|
||||||
|
- Conversation starters
|
||||||
|
- Capabilities (actions from plugins)
|
||||||
|
|
||||||
|
**ai-plugin.json:**
|
||||||
|
- MCP server tools import
|
||||||
|
- Response semantics (data_path, properties)
|
||||||
|
- Static adaptive card templates
|
||||||
|
- Function definitions (auto-generated)
|
||||||
|
|
||||||
|
**mcp.json:**
|
||||||
|
- MCP server URL
|
||||||
|
- Server metadata endpoint
|
||||||
|
- Authentication reference
|
||||||
|
|
||||||
|
**.env.local:**
|
||||||
|
- OAuth client credentials
|
||||||
|
- API keys and secrets
|
||||||
|
- Environment-specific config
|
||||||
|
- **CRITICAL**: Add to .gitignore
|
||||||
|
|
||||||
|
## Response Semantics Best Practices
|
||||||
|
|
||||||
|
### Data Path Configuration
|
||||||
|
Use JSONPath to extract relevant data:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_path": "$.items[*]",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"subtitle": "$.description",
|
||||||
|
"url": "$.html_url"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Template Selection
|
||||||
|
For dynamic templates:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data_path": "$",
|
||||||
|
"template_selector": "$.templateType",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.title",
|
||||||
|
"url": "$.url"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Static Templates
|
||||||
|
Define in ai-plugin.json for consistent formatting:
|
||||||
|
- Use when all responses follow same structure
|
||||||
|
- Better performance than dynamic templates
|
||||||
|
- Easier to maintain and version control
|
||||||
|
|
||||||
|
## Adaptive Card Guidelines
|
||||||
|
|
||||||
|
### Design Principles
|
||||||
|
- **Single-column layout**: Stack elements vertically
|
||||||
|
- **Flexible widths**: Use "stretch" or "auto", not fixed pixels
|
||||||
|
- **Responsive design**: Test in Chat, Teams, Outlook
|
||||||
|
- **Minimal complexity**: Keep cards simple and scannable
|
||||||
|
|
||||||
|
### Template Language Patterns
|
||||||
|
**Conditionals:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${if(status == 'active', '✅ Active', '❌ Inactive')}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Data Binding:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${title}",
|
||||||
|
"weight": "bolder"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Number Formatting:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "Score: ${formatNumber(score, 0)}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Conditional Rendering:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$when": "${count(items) > 0}",
|
||||||
|
"items": [ ... ]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Card Elements Usage
|
||||||
|
- **TextBlock**: Titles, descriptions, metadata
|
||||||
|
- **FactSet**: Key-value pairs (status, dates, IDs)
|
||||||
|
- **Image**: Icons, thumbnails (use size: "small")
|
||||||
|
- **Container**: Grouping related content
|
||||||
|
- **ActionSet**: Buttons for follow-up actions
|
||||||
|
|
||||||
|
## Testing and Deployment
|
||||||
|
|
||||||
|
### Local Testing Workflow
|
||||||
|
1. **Provision**: Teams Toolkit → Provision
|
||||||
|
2. **Deploy**: Teams Toolkit → Deploy
|
||||||
|
3. **Sideload**: App uploaded to Teams
|
||||||
|
4. **Test**: Visit [m365.cloud.microsoft/chat](https://m365.cloud.microsoft/chat)
|
||||||
|
5. **Iterate**: Fix issues and re-deploy
|
||||||
|
|
||||||
|
### Pre-Deployment Checklist
|
||||||
|
- [ ] All MCP server tools tested individually
|
||||||
|
- [ ] Authentication flow works end-to-end
|
||||||
|
- [ ] Adaptive cards render correctly across hubs
|
||||||
|
- [ ] Response semantics extract expected data
|
||||||
|
- [ ] Error handling provides clear messages
|
||||||
|
- [ ] Conversation starters are relevant and clear
|
||||||
|
- [ ] Agent instructions guide proper behavior
|
||||||
|
- [ ] Compliance and security reviewed
|
||||||
|
|
||||||
|
### Deployment Options
|
||||||
|
**Organization Deployment:**
|
||||||
|
- IT admin deploys to all or selected users
|
||||||
|
- Requires approval in Microsoft 365 admin center
|
||||||
|
- Best for internal business agents
|
||||||
|
|
||||||
|
**Agent Store:**
|
||||||
|
- Submit to Partner Center for validation
|
||||||
|
- Public availability to all Copilot users
|
||||||
|
- Requires rigorous security review
|
||||||
|
|
||||||
|
## Common Patterns
|
||||||
|
|
||||||
|
### Multi-Tool Agent
|
||||||
|
Import tools from multiple MCP servers:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"github": {
|
||||||
|
"url": "https://github-mcp.example.com"
|
||||||
|
},
|
||||||
|
"jira": {
|
||||||
|
"url": "https://jira-mcp.example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Search and Display
|
||||||
|
1. Tool retrieves data from MCP server
|
||||||
|
2. Response semantics extract relevant fields
|
||||||
|
3. Adaptive card displays formatted results
|
||||||
|
4. User can take action from card buttons
|
||||||
|
|
||||||
|
### Authenticated Actions
|
||||||
|
1. User triggers tool requiring auth
|
||||||
|
2. OAuth flow redirects for consent
|
||||||
|
3. Access token stored in plugin vault
|
||||||
|
4. Subsequent requests use stored token
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
### MCP Server Errors
|
||||||
|
- Provide clear error messages in agent responses
|
||||||
|
- Fall back to alternative tools if available
|
||||||
|
- Log errors for debugging
|
||||||
|
- Guide user to retry or alternative approach
|
||||||
|
|
||||||
|
### Authentication Failures
|
||||||
|
- Check OAuth credentials in .env.local
|
||||||
|
- Verify scopes match required permissions
|
||||||
|
- Test auth flow outside Copilot first
|
||||||
|
- Ensure token refresh logic works
|
||||||
|
|
||||||
|
### Response Parsing Failures
|
||||||
|
- Validate JSONPath expressions in response semantics
|
||||||
|
- Handle missing or null data gracefully
|
||||||
|
- Provide default values where appropriate
|
||||||
|
- Test with varied API responses
|
||||||
|
|
||||||
|
## Performance Optimization
|
||||||
|
|
||||||
|
### Tool Selection
|
||||||
|
- Import only necessary tools (reduces token usage)
|
||||||
|
- Avoid redundant tools from multiple servers
|
||||||
|
- Test impact of each tool on response time
|
||||||
|
|
||||||
|
### Response Size
|
||||||
|
- Use data_path to filter unnecessary data
|
||||||
|
- Limit result sets where possible
|
||||||
|
- Consider pagination for large datasets
|
||||||
|
- Keep adaptive cards lightweight
|
||||||
|
|
||||||
|
### Caching Strategy
|
||||||
|
- MCP servers should cache where appropriate
|
||||||
|
- Agent responses may be cached by M365
|
||||||
|
- Consider cache invalidation for time-sensitive data
|
||||||
|
|
||||||
|
## Security Best Practices
|
||||||
|
|
||||||
|
### Credential Management
|
||||||
|
- **NEVER** commit .env.local to source control
|
||||||
|
- Use environment variables for all secrets
|
||||||
|
- Rotate OAuth credentials regularly
|
||||||
|
- Use separate credentials for dev/prod
|
||||||
|
|
||||||
|
### Data Privacy
|
||||||
|
- Only request minimum necessary scopes
|
||||||
|
- Avoid logging sensitive user data
|
||||||
|
- Review data residency requirements
|
||||||
|
- Follow compliance policies (GDPR, etc.)
|
||||||
|
|
||||||
|
### Server Validation
|
||||||
|
- Verify MCP server is trusted and secure
|
||||||
|
- Check HTTPS endpoints only
|
||||||
|
- Review server's privacy policy
|
||||||
|
- Test for injection vulnerabilities
|
||||||
|
|
||||||
|
## Governance and Compliance
|
||||||
|
|
||||||
|
### Admin Controls
|
||||||
|
Agents can be:
|
||||||
|
- **Blocked**: Prevented from use
|
||||||
|
- **Deployed**: Assigned to specific users/groups
|
||||||
|
- **Published**: Made available organization-wide
|
||||||
|
|
||||||
|
### Monitoring
|
||||||
|
Track:
|
||||||
|
- Agent usage and adoption
|
||||||
|
- Error rates and performance
|
||||||
|
- User feedback and satisfaction
|
||||||
|
- Security incidents
|
||||||
|
|
||||||
|
### Audit Requirements
|
||||||
|
Maintain:
|
||||||
|
- Change history for agent configurations
|
||||||
|
- Access logs for sensitive operations
|
||||||
|
- Approval records for deployments
|
||||||
|
- Compliance attestations
|
||||||
|
|
||||||
|
## Resources and References
|
||||||
|
|
||||||
|
### Official Documentation
|
||||||
|
- [Build Declarative Agents with MCP (DevBlogs)](https://devblogs.microsoft.com/microsoft365dev/build-declarative-agents-for-microsoft-365-copilot-with-mcp/)
|
||||||
|
- [Build MCP Plugins (Learn)](https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/build-mcp-plugins)
|
||||||
|
- [API Plugin Adaptive Cards (Learn)](https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/api-plugin-adaptive-cards)
|
||||||
|
- [Manage Copilot Agents (Learn)](https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-copilot-agents-integrated-apps)
|
||||||
|
|
||||||
|
### Tools and SDKs
|
||||||
|
- Microsoft 365 Agents Toolkit (VS Code extension v6.3.x+)
|
||||||
|
- Teams Toolkit for agent packaging
|
||||||
|
- Adaptive Cards Designer
|
||||||
|
- MCP specification documentation
|
||||||
|
|
||||||
|
### Partner Examples
|
||||||
|
- monday.com: Task management integration
|
||||||
|
- Canva: Design automation
|
||||||
|
- Sitecore: Content management
|
||||||
527
prompts/mcp-create-adaptive-cards.prompt.md
Normal file
527
prompts/mcp-create-adaptive-cards.prompt.md
Normal file
@@ -0,0 +1,527 @@
|
|||||||
|
````prompt
|
||||||
|
---
|
||||||
|
mode: 'agent'
|
||||||
|
tools: ['changes', 'search/codebase', 'edit/editFiles', 'problems']
|
||||||
|
description: 'Add Adaptive Card response templates to MCP-based API plugins for visual data presentation in Microsoft 365 Copilot'
|
||||||
|
model: 'gpt-4.1'
|
||||||
|
tags: [mcp, adaptive-cards, m365-copilot, api-plugin, response-templates]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Create Adaptive Cards for MCP Plugins
|
||||||
|
|
||||||
|
Add Adaptive Card response templates to MCP-based API plugins to enhance how data is presented visually in Microsoft 365 Copilot.
|
||||||
|
|
||||||
|
## Adaptive Card Types
|
||||||
|
|
||||||
|
### Static Response Templates
|
||||||
|
Use when API always returns items of the same type and format doesn't change often.
|
||||||
|
|
||||||
|
Define in `response_semantics.static_template` in ai-plugin.json:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"name": "GetBudgets",
|
||||||
|
"description": "Returns budget details including name and available funds",
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"subtitle": "$.availableFunds"
|
||||||
|
},
|
||||||
|
"static_template": {
|
||||||
|
"type": "AdaptiveCard",
|
||||||
|
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
|
||||||
|
"version": "1.5",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$data": "${$root}",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "Name: ${if(name, name, 'N/A')}",
|
||||||
|
"wrap": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "Available funds: ${if(availableFunds, formatNumber(availableFunds, 2), 'N/A')}",
|
||||||
|
"wrap": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dynamic Response Templates
|
||||||
|
Use when API returns multiple types and each item needs a different template.
|
||||||
|
|
||||||
|
**ai-plugin.json configuration:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "GetTransactions",
|
||||||
|
"description": "Returns transaction details with dynamic templates",
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$.transactions",
|
||||||
|
"properties": {
|
||||||
|
"template_selector": "$.displayTemplate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**API Response with Embedded Templates:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"transactions": [
|
||||||
|
{
|
||||||
|
"budgetName": "Fourth Coffee lobby renovation",
|
||||||
|
"amount": -2000,
|
||||||
|
"description": "Property survey for permit application",
|
||||||
|
"expenseCategory": "permits",
|
||||||
|
"displayTemplate": "$.templates.debit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"budgetName": "Fourth Coffee lobby renovation",
|
||||||
|
"amount": 5000,
|
||||||
|
"description": "Additional funds to cover cost overruns",
|
||||||
|
"expenseCategory": null,
|
||||||
|
"displayTemplate": "$.templates.credit"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"templates": {
|
||||||
|
"debit": {
|
||||||
|
"type": "AdaptiveCard",
|
||||||
|
"version": "1.5",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"size": "medium",
|
||||||
|
"weight": "bolder",
|
||||||
|
"color": "attention",
|
||||||
|
"text": "Debit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FactSet",
|
||||||
|
"facts": [
|
||||||
|
{
|
||||||
|
"title": "Budget",
|
||||||
|
"value": "${budgetName}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Amount",
|
||||||
|
"value": "${formatNumber(amount, 2)}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Category",
|
||||||
|
"value": "${if(expenseCategory, expenseCategory, 'N/A')}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Description",
|
||||||
|
"value": "${if(description, description, 'N/A')}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
|
||||||
|
},
|
||||||
|
"credit": {
|
||||||
|
"type": "AdaptiveCard",
|
||||||
|
"version": "1.5",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"size": "medium",
|
||||||
|
"weight": "bolder",
|
||||||
|
"color": "good",
|
||||||
|
"text": "Credit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FactSet",
|
||||||
|
"facts": [
|
||||||
|
{
|
||||||
|
"title": "Budget",
|
||||||
|
"value": "${budgetName}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Amount",
|
||||||
|
"value": "${formatNumber(amount, 2)}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Description",
|
||||||
|
"value": "${if(description, description, 'N/A')}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Combined Static and Dynamic Templates
|
||||||
|
Use static template as default when item doesn't have template_selector or when value doesn't resolve.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$.items",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"template_selector": "$.templateId"
|
||||||
|
},
|
||||||
|
"static_template": {
|
||||||
|
"type": "AdaptiveCard",
|
||||||
|
"version": "1.5",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "Default: ${name}",
|
||||||
|
"wrap": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Response Semantics Properties
|
||||||
|
|
||||||
|
### data_path
|
||||||
|
JSONPath query indicating where data resides in API response:
|
||||||
|
```json
|
||||||
|
"data_path": "$" // Root of response
|
||||||
|
"data_path": "$.results" // In results property
|
||||||
|
"data_path": "$.data.items"// Nested path
|
||||||
|
```
|
||||||
|
|
||||||
|
### properties
|
||||||
|
Map response fields for Copilot citations:
|
||||||
|
```json
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name", // Citation title
|
||||||
|
"subtitle": "$.description", // Citation subtitle
|
||||||
|
"url": "$.link" // Citation link
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### template_selector
|
||||||
|
Property on each item indicating which template to use:
|
||||||
|
```json
|
||||||
|
"template_selector": "$.displayTemplate"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adaptive Card Template Language
|
||||||
|
|
||||||
|
### Conditional Rendering
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${if(field, field, 'N/A')}" // Show field or 'N/A'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Number Formatting
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${formatNumber(amount, 2)}" // Two decimal places
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Data Binding
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$data": "${$root}", // Break to root context
|
||||||
|
"items": [ ... ]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Conditional Display
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Image",
|
||||||
|
"url": "${imageUrl}",
|
||||||
|
"$when": "${imageUrl != null}" // Only show if imageUrl exists
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Card Elements
|
||||||
|
|
||||||
|
### TextBlock
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "Text content",
|
||||||
|
"size": "medium", // small, default, medium, large, extraLarge
|
||||||
|
"weight": "bolder", // lighter, default, bolder
|
||||||
|
"color": "attention", // default, dark, light, accent, good, warning, attention
|
||||||
|
"wrap": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### FactSet
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "FactSet",
|
||||||
|
"facts": [
|
||||||
|
{
|
||||||
|
"title": "Label",
|
||||||
|
"value": "Value"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Image
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Image",
|
||||||
|
"url": "https://example.com/image.png",
|
||||||
|
"size": "medium", // auto, stretch, small, medium, large
|
||||||
|
"style": "default" // default, person
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Container
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$data": "${items}", // Iterate over array
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${name}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### ColumnSet
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "ColumnSet",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"type": "Column",
|
||||||
|
"width": "auto",
|
||||||
|
"items": [ ... ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Column",
|
||||||
|
"width": "stretch",
|
||||||
|
"items": [ ... ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Actions
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Action.OpenUrl",
|
||||||
|
"title": "View Details",
|
||||||
|
"url": "https://example.com/item/${id}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Responsive Design Best Practices
|
||||||
|
|
||||||
|
### Single-Column Layouts
|
||||||
|
- Use single columns for narrow viewports
|
||||||
|
- Avoid multi-column layouts when possible
|
||||||
|
- Ensure cards work at minimum viewport width
|
||||||
|
|
||||||
|
### Flexible Widths
|
||||||
|
- Don't assign fixed widths to elements
|
||||||
|
- Use "auto" or "stretch" for width properties
|
||||||
|
- Allow elements to resize with viewport
|
||||||
|
- Fixed widths OK for icons/avatars only
|
||||||
|
|
||||||
|
### Text and Images
|
||||||
|
- Avoid placing text and images in same row
|
||||||
|
- Exception: Small icons or avatars
|
||||||
|
- Use "wrap": true for text content
|
||||||
|
- Test at various viewport widths
|
||||||
|
|
||||||
|
### Test Across Hubs
|
||||||
|
Validate cards in:
|
||||||
|
- Teams (desktop and mobile)
|
||||||
|
- Word
|
||||||
|
- PowerPoint
|
||||||
|
- Various viewport widths (contract/expand UI)
|
||||||
|
|
||||||
|
## Complete Example
|
||||||
|
|
||||||
|
**ai-plugin.json:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"name": "SearchProjects",
|
||||||
|
"description": "Search for projects with status and details",
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$.projects",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"subtitle": "$.status",
|
||||||
|
"url": "$.projectUrl"
|
||||||
|
},
|
||||||
|
"static_template": {
|
||||||
|
"type": "AdaptiveCard",
|
||||||
|
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
|
||||||
|
"version": "1.5",
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$data": "${$root}",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"size": "medium",
|
||||||
|
"weight": "bolder",
|
||||||
|
"text": "${if(name, name, 'Untitled Project')}",
|
||||||
|
"wrap": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FactSet",
|
||||||
|
"facts": [
|
||||||
|
{
|
||||||
|
"title": "Status",
|
||||||
|
"value": "${status}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Owner",
|
||||||
|
"value": "${if(owner, owner, 'Unassigned')}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Due Date",
|
||||||
|
"value": "${if(dueDate, dueDate, 'Not set')}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Budget",
|
||||||
|
"value": "${if(budget, formatNumber(budget, 2), 'N/A')}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${if(description, description, 'No description')}",
|
||||||
|
"wrap": true,
|
||||||
|
"separator": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "Action.OpenUrl",
|
||||||
|
"title": "View Project",
|
||||||
|
"url": "${projectUrl}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
Ask the user:
|
||||||
|
1. What type of data does the API return?
|
||||||
|
2. Are all items the same type (static) or different types (dynamic)?
|
||||||
|
3. What fields should appear in the card?
|
||||||
|
4. Should there be actions (e.g., "View Details")?
|
||||||
|
5. Are there multiple states or categories requiring different templates?
|
||||||
|
|
||||||
|
Then generate:
|
||||||
|
- Appropriate response_semantics configuration
|
||||||
|
- Static template, dynamic templates, or both
|
||||||
|
- Proper data binding with conditional rendering
|
||||||
|
- Responsive single-column layout
|
||||||
|
- Test scenarios for validation
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Adaptive Card Designer](https://adaptivecards.microsoft.com/designer) - Visual design tool
|
||||||
|
- [Adaptive Card Schema](https://adaptivecards.io/schemas/adaptive-card.json) - Full schema reference
|
||||||
|
- [Template Language](https://learn.microsoft.com/en-us/adaptive-cards/templating/language) - Binding syntax guide
|
||||||
|
- [JSONPath](https://www.rfc-editor.org/rfc/rfc9535) - Path query syntax
|
||||||
|
|
||||||
|
## Common Patterns
|
||||||
|
|
||||||
|
### List with Images
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "Container",
|
||||||
|
"$data": "${items}",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "ColumnSet",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"type": "Column",
|
||||||
|
"width": "auto",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "Image",
|
||||||
|
"url": "${thumbnailUrl}",
|
||||||
|
"size": "small",
|
||||||
|
"$when": "${thumbnailUrl != null}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Column",
|
||||||
|
"width": "stretch",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${title}",
|
||||||
|
"weight": "bolder",
|
||||||
|
"wrap": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Status Indicators
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "${status}",
|
||||||
|
"color": "${if(status == 'Completed', 'good', if(status == 'In Progress', 'attention', 'default'))}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Currency Formatting
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "TextBlock",
|
||||||
|
"text": "$${formatNumber(amount, 2)}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
````
|
||||||
310
prompts/mcp-create-declarative-agent.prompt.md
Normal file
310
prompts/mcp-create-declarative-agent.prompt.md
Normal file
@@ -0,0 +1,310 @@
|
|||||||
|
````prompt
|
||||||
|
---
|
||||||
|
mode: 'agent'
|
||||||
|
tools: ['changes', 'search/codebase', 'edit/editFiles', 'problems']
|
||||||
|
description: 'Create a declarative agent for Microsoft 365 Copilot by integrating an MCP server with authentication, tool selection, and configuration'
|
||||||
|
model: 'gpt-4.1'
|
||||||
|
tags: [mcp, m365-copilot, declarative-agent, model-context-protocol, api-plugin]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Create MCP-based Declarative Agent for Microsoft 365 Copilot
|
||||||
|
|
||||||
|
Create a complete declarative agent for Microsoft 365 Copilot that integrates with a Model Context Protocol (MCP) server to access external systems and data.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Generate the following project structure using Microsoft 365 Agents Toolkit:
|
||||||
|
|
||||||
|
### Project Setup
|
||||||
|
1. **Scaffold declarative agent** via Agents Toolkit
|
||||||
|
2. **Add MCP action** pointing to MCP server
|
||||||
|
3. **Select tools** to import from MCP server
|
||||||
|
4. **Configure authentication** (OAuth 2.0 or SSO)
|
||||||
|
5. **Review generated files** (manifest.json, ai-plugin.json, declarativeAgent.json)
|
||||||
|
|
||||||
|
### Key Files Generated
|
||||||
|
|
||||||
|
**appPackage/manifest.json** - Teams app manifest with plugin reference:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"$schema": "https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json",
|
||||||
|
"manifestVersion": "devPreview",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"id": "...",
|
||||||
|
"developer": {
|
||||||
|
"name": "...",
|
||||||
|
"websiteUrl": "...",
|
||||||
|
"privacyUrl": "...",
|
||||||
|
"termsOfUseUrl": "..."
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"short": "Agent Name",
|
||||||
|
"full": "Full Agent Name"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"short": "Short description",
|
||||||
|
"full": "Full description"
|
||||||
|
},
|
||||||
|
"copilotAgents": {
|
||||||
|
"declarativeAgents": [
|
||||||
|
{
|
||||||
|
"id": "declarativeAgent",
|
||||||
|
"file": "declarativeAgent.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**appPackage/declarativeAgent.json** - Agent definition:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"$schema": "https://aka.ms/json-schemas/copilot/declarative-agent/v1.0/schema.json",
|
||||||
|
"version": "v1.0",
|
||||||
|
"name": "Agent Name",
|
||||||
|
"description": "Agent description",
|
||||||
|
"instructions": "You are an assistant that helps with [specific domain]. Use the available tools to [capabilities].",
|
||||||
|
"capabilities": [
|
||||||
|
{
|
||||||
|
"name": "WebSearch",
|
||||||
|
"websites": [
|
||||||
|
{
|
||||||
|
"url": "https://learn.microsoft.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MCP",
|
||||||
|
"file": "ai-plugin.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**appPackage/ai-plugin.json** - MCP plugin manifest:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"schema_version": "v2.1",
|
||||||
|
"name_for_human": "Service Name",
|
||||||
|
"description_for_human": "Description for users",
|
||||||
|
"description_for_model": "Description for AI model",
|
||||||
|
"contact_email": "support@company.com",
|
||||||
|
"namespace": "serviceName",
|
||||||
|
"capabilities": {
|
||||||
|
"conversation_starters": [
|
||||||
|
{
|
||||||
|
"text": "Example query 1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"name": "functionName",
|
||||||
|
"description": "Function description",
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.title",
|
||||||
|
"subtitle": "$.description"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"runtimes": [
|
||||||
|
{
|
||||||
|
"type": "MCP",
|
||||||
|
"spec": {
|
||||||
|
"url": "https://api.service.com/mcp/"
|
||||||
|
},
|
||||||
|
"run_for_functions": ["functionName"],
|
||||||
|
"auth": {
|
||||||
|
"type": "OAuthPluginVault",
|
||||||
|
"reference_id": "${{OAUTH_REFERENCE_ID}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**/.vscode/mcp.json** - MCP server configuration:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"serverUrl": "https://api.service.com/mcp/",
|
||||||
|
"pluginFilePath": "appPackage/ai-plugin.json"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## MCP Server Integration
|
||||||
|
|
||||||
|
### Supported MCP Endpoints
|
||||||
|
The MCP server must provide:
|
||||||
|
- **Server metadata** endpoint
|
||||||
|
- **Tools listing** endpoint (exposes available functions)
|
||||||
|
- **Tool execution** endpoint (handles function calls)
|
||||||
|
|
||||||
|
### Tool Selection
|
||||||
|
When importing from MCP:
|
||||||
|
1. Fetch available tools from server
|
||||||
|
2. Select specific tools to include (for security/simplicity)
|
||||||
|
3. Tool definitions are auto-generated in ai-plugin.json
|
||||||
|
|
||||||
|
### Authentication Types
|
||||||
|
|
||||||
|
**OAuth 2.0 (Static Registration)**
|
||||||
|
```json
|
||||||
|
"auth": {
|
||||||
|
"type": "OAuthPluginVault",
|
||||||
|
"reference_id": "${{OAUTH_REFERENCE_ID}}",
|
||||||
|
"authorization_url": "https://auth.service.com/authorize",
|
||||||
|
"client_id": "${{CLIENT_ID}}",
|
||||||
|
"client_secret": "${{CLIENT_SECRET}}",
|
||||||
|
"scope": "read write"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Single Sign-On (SSO)**
|
||||||
|
```json
|
||||||
|
"auth": {
|
||||||
|
"type": "SSO"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Response Semantics
|
||||||
|
|
||||||
|
### Define Data Mapping
|
||||||
|
Use `response_semantics` to extract relevant fields from API responses:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"capabilities": {
|
||||||
|
"response_semantics": {
|
||||||
|
"data_path": "$.results",
|
||||||
|
"properties": {
|
||||||
|
"title": "$.name",
|
||||||
|
"subtitle": "$.description",
|
||||||
|
"url": "$.link"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add Adaptive Cards (Optional)
|
||||||
|
See the `mcp-create-adaptive-cards` prompt for adding visual card templates.
|
||||||
|
|
||||||
|
## Environment Configuration
|
||||||
|
|
||||||
|
Create `.env.local` or `.env.dev` for credentials:
|
||||||
|
|
||||||
|
```env
|
||||||
|
OAUTH_REFERENCE_ID=your-oauth-reference-id
|
||||||
|
CLIENT_ID=your-client-id
|
||||||
|
CLIENT_SECRET=your-client-secret
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing & Deployment
|
||||||
|
|
||||||
|
### Local Testing
|
||||||
|
1. **Provision** agent in Agents Toolkit
|
||||||
|
2. **Start debugging** to sideload in Teams
|
||||||
|
3. Test in Microsoft 365 Copilot at https://m365.cloud.microsoft/chat
|
||||||
|
4. Authenticate when prompted
|
||||||
|
5. Query the agent using natural language
|
||||||
|
|
||||||
|
### Validation
|
||||||
|
- Verify tool imports in ai-plugin.json
|
||||||
|
- Check authentication configuration
|
||||||
|
- Test each exposed function
|
||||||
|
- Validate response data mapping
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### Tool Design
|
||||||
|
- **Focused functions**: Each tool should do one thing well
|
||||||
|
- **Clear descriptions**: Help the model understand when to use each tool
|
||||||
|
- **Minimal scoping**: Only import tools the agent needs
|
||||||
|
- **Descriptive names**: Use action-oriented function names
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- **Use OAuth 2.0** for production scenarios
|
||||||
|
- **Store secrets** in environment variables
|
||||||
|
- **Validate inputs** on the MCP server side
|
||||||
|
- **Limit scopes** to minimum required permissions
|
||||||
|
- **Use reference IDs** for OAuth registration
|
||||||
|
|
||||||
|
### Instructions
|
||||||
|
- **Be specific** about the agent's purpose and capabilities
|
||||||
|
- **Define behavior** for both successful and error scenarios
|
||||||
|
- **Reference tools** explicitly in instructions when applicable
|
||||||
|
- **Set expectations** for users about what the agent can/cannot do
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- **Cache responses** when appropriate on MCP server
|
||||||
|
- **Batch operations** where possible
|
||||||
|
- **Set timeouts** for long-running operations
|
||||||
|
- **Paginate results** for large datasets
|
||||||
|
|
||||||
|
## Common MCP Server Examples
|
||||||
|
|
||||||
|
### GitHub MCP Server
|
||||||
|
```
|
||||||
|
URL: https://api.githubcopilot.com/mcp/
|
||||||
|
Tools: search_repositories, search_users, get_repository
|
||||||
|
Auth: OAuth 2.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Jira MCP Server
|
||||||
|
```
|
||||||
|
URL: https://your-domain.atlassian.net/mcp/
|
||||||
|
Tools: search_issues, create_issue, update_issue
|
||||||
|
Auth: OAuth 2.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom Service
|
||||||
|
```
|
||||||
|
URL: https://api.your-service.com/mcp/
|
||||||
|
Tools: Custom tools exposed by your service
|
||||||
|
Auth: OAuth 2.0 or SSO
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
Ask the user:
|
||||||
|
1. What MCP server are you integrating with (URL)?
|
||||||
|
2. What tools should be exposed to Copilot?
|
||||||
|
3. What authentication method does the server support?
|
||||||
|
4. What should the agent's primary purpose be?
|
||||||
|
5. Do you need response semantics or Adaptive Cards?
|
||||||
|
|
||||||
|
Then generate:
|
||||||
|
- Complete appPackage/ structure (manifest.json, declarativeAgent.json, ai-plugin.json)
|
||||||
|
- mcp.json configuration
|
||||||
|
- .env.local template
|
||||||
|
- Provisioning and testing instructions
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### MCP Server Not Responding
|
||||||
|
- Verify server URL is correct
|
||||||
|
- Check network connectivity
|
||||||
|
- Validate MCP server implements required endpoints
|
||||||
|
|
||||||
|
### Authentication Fails
|
||||||
|
- Verify OAuth credentials are correct
|
||||||
|
- Check reference ID matches registration
|
||||||
|
- Confirm scopes are requested properly
|
||||||
|
- Test OAuth flow independently
|
||||||
|
|
||||||
|
### Tools Not Appearing
|
||||||
|
- Ensure mcp.json points to correct server
|
||||||
|
- Verify tools were selected during import
|
||||||
|
- Check ai-plugin.json has correct function definitions
|
||||||
|
- Re-fetch actions from MCP if server changed
|
||||||
|
|
||||||
|
### Agent Not Understanding Queries
|
||||||
|
- Review instructions in declarativeAgent.json
|
||||||
|
- Check function descriptions are clear
|
||||||
|
- Verify response_semantics extract correct data
|
||||||
|
- Test with more specific queries
|
||||||
|
|
||||||
|
````
|
||||||
336
prompts/mcp-deploy-manage-agents.prompt.md
Normal file
336
prompts/mcp-deploy-manage-agents.prompt.md
Normal file
@@ -0,0 +1,336 @@
|
|||||||
|
````prompt
|
||||||
|
---
|
||||||
|
mode: 'agent'
|
||||||
|
tools: ['changes', 'search/codebase', 'edit/editFiles', 'problems']
|
||||||
|
description: 'Deploy and manage MCP-based declarative agents in Microsoft 365 admin center with governance, assignments, and organizational distribution'
|
||||||
|
model: 'gpt-4.1'
|
||||||
|
tags: [mcp, m365-copilot, deployment, admin, agent-management, governance]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Deploy and Manage MCP-Based Agents
|
||||||
|
|
||||||
|
Deploy, manage, and govern MCP-based declarative agents in Microsoft 365 using the admin center for organizational distribution and control.
|
||||||
|
|
||||||
|
## Agent Types
|
||||||
|
|
||||||
|
### Published by Organization
|
||||||
|
- Built with predefined instructions and actions
|
||||||
|
- Follow structured logic for predictable tasks
|
||||||
|
- Require admin approval and publishing process
|
||||||
|
- Support compliance and governance requirements
|
||||||
|
|
||||||
|
### Shared by Creator
|
||||||
|
- Created in Microsoft 365 Copilot Studio or Agent Builder
|
||||||
|
- Shared directly with specific users
|
||||||
|
- Enhanced functionality with search, actions, connectors, APIs
|
||||||
|
- Visible to admins in agent registry
|
||||||
|
|
||||||
|
### Microsoft Agents
|
||||||
|
- Developed and maintained by Microsoft
|
||||||
|
- Integrated with Microsoft 365 services
|
||||||
|
- Pre-approved and ready to use
|
||||||
|
|
||||||
|
### External Partner Agents
|
||||||
|
- Created by verified external developers/vendors
|
||||||
|
- Subject to admin approval and control
|
||||||
|
- Configurable availability and permissions
|
||||||
|
|
||||||
|
### Frontier Agents
|
||||||
|
- Experimental or advanced capabilities
|
||||||
|
- May require limited rollout or additional oversight
|
||||||
|
- Examples:
|
||||||
|
- **App Builder agent**: Managed via M365 Copilot or Power Platform admin center
|
||||||
|
- **Workflows agent**: Flow automation managed via Power Platform admin center
|
||||||
|
|
||||||
|
## Admin Roles and Permissions
|
||||||
|
|
||||||
|
### Required Roles
|
||||||
|
- **AI Admin**: Full agent management capabilities
|
||||||
|
- **Global Reader**: View-only access (no editing)
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
- Use roles with fewest permissions
|
||||||
|
- Limit Global Administrator to emergency scenarios
|
||||||
|
- Follow principle of least privilege
|
||||||
|
|
||||||
|
## Agent Management in Microsoft 365 Admin Center
|
||||||
|
|
||||||
|
### Access Agent Management
|
||||||
|
1. Go to [Microsoft 365 admin center](https://admin.microsoft.com/)
|
||||||
|
2. Navigate to **Agents** page
|
||||||
|
3. View available, deployed, or blocked agents
|
||||||
|
|
||||||
|
### Available Actions
|
||||||
|
|
||||||
|
**View Agents**
|
||||||
|
- Filter by availability (available, deployed, blocked)
|
||||||
|
- Search for specific agents
|
||||||
|
- View agent details (name, creator, date, host products, status)
|
||||||
|
|
||||||
|
**Deploy Agents**
|
||||||
|
Options for distribution:
|
||||||
|
1. **Agent Store**: Submit to Partner Center for validation and public availability
|
||||||
|
2. **Organization Deployment**: IT admin deploys to all or selected employees
|
||||||
|
|
||||||
|
**Manage Agent Lifecycle**
|
||||||
|
- **Publish**: Make agent available to organization
|
||||||
|
- **Deploy**: Assign to specific users or groups
|
||||||
|
- **Block**: Prevent agent from being used
|
||||||
|
- **Remove**: Delete agent from organization
|
||||||
|
|
||||||
|
**Configure Access**
|
||||||
|
- Set availability for specific user groups
|
||||||
|
- Manage permissions per agent
|
||||||
|
- Control which agents appear in Copilot
|
||||||
|
|
||||||
|
## Deployment Workflows
|
||||||
|
|
||||||
|
### Publish to Organization
|
||||||
|
|
||||||
|
**For Agent Developers:**
|
||||||
|
1. Build agent with Microsoft 365 Agents Toolkit
|
||||||
|
2. Test thoroughly in development
|
||||||
|
3. Submit agent for approval
|
||||||
|
4. Wait for admin review
|
||||||
|
|
||||||
|
**For Admins:**
|
||||||
|
1. Review submitted agent in admin center
|
||||||
|
2. Validate compliance and security
|
||||||
|
3. Approve for organizational use
|
||||||
|
4. Configure deployment settings
|
||||||
|
5. Publish to selected users or organization-wide
|
||||||
|
|
||||||
|
### Deploy via Agent Store
|
||||||
|
|
||||||
|
**Developer Steps:**
|
||||||
|
1. Complete agent development and testing
|
||||||
|
2. Package agent for submission
|
||||||
|
3. Submit to Partner Center
|
||||||
|
4. Await validation process
|
||||||
|
5. Receive approval notification
|
||||||
|
6. Agent appears in Copilot store
|
||||||
|
|
||||||
|
**Admin Steps:**
|
||||||
|
1. Discover agents in Copilot store
|
||||||
|
2. Review agent details and permissions
|
||||||
|
3. Assign to organization or user groups
|
||||||
|
4. Monitor usage and feedback
|
||||||
|
|
||||||
|
### Deploy Organizational Agent
|
||||||
|
|
||||||
|
**Admin Deployment Options:**
|
||||||
|
```
|
||||||
|
Organization-wide:
|
||||||
|
- All employees with Copilot license
|
||||||
|
- Automatically available in Copilot
|
||||||
|
|
||||||
|
Group-based:
|
||||||
|
- Specific departments or teams
|
||||||
|
- Security group assignments
|
||||||
|
- Role-based access control
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuration Steps:**
|
||||||
|
1. Navigate to Agents page in admin center
|
||||||
|
2. Select agent to deploy
|
||||||
|
3. Choose deployment scope:
|
||||||
|
- All users
|
||||||
|
- Specific security groups
|
||||||
|
- Individual users
|
||||||
|
4. Set availability status
|
||||||
|
5. Configure permissions if applicable
|
||||||
|
6. Deploy and monitor
|
||||||
|
|
||||||
|
## User Experience
|
||||||
|
|
||||||
|
### Agent Discovery
|
||||||
|
Users find agents in:
|
||||||
|
- Microsoft 365 Copilot hub
|
||||||
|
- Agent picker in Copilot interface
|
||||||
|
- Organization's agent catalog
|
||||||
|
|
||||||
|
### Agent Access Control
|
||||||
|
Users can:
|
||||||
|
- Toggle agents on/off during interactions
|
||||||
|
- Add/remove agents from their experience
|
||||||
|
- Right-click agents to manage preferences
|
||||||
|
- Only access admin-allowed agents
|
||||||
|
|
||||||
|
### Agent Usage
|
||||||
|
- Agents appear in Copilot sidebar
|
||||||
|
- Users select agent for context
|
||||||
|
- Queries routed through selected agent
|
||||||
|
- Responses leverage agent's capabilities
|
||||||
|
|
||||||
|
## Governance and Compliance
|
||||||
|
|
||||||
|
### Security Considerations
|
||||||
|
- **Data access**: Review what data agent can access
|
||||||
|
- **API permissions**: Validate required scopes
|
||||||
|
- **Authentication**: Ensure secure OAuth flows
|
||||||
|
- **External connections**: Assess risk of external integrations
|
||||||
|
|
||||||
|
### Compliance Requirements
|
||||||
|
- **Data residency**: Verify data stays within boundaries
|
||||||
|
- **Privacy policies**: Review agent privacy statement
|
||||||
|
- **Terms of use**: Validate acceptable use policies
|
||||||
|
- **Audit logs**: Monitor agent usage and activity
|
||||||
|
|
||||||
|
### Monitoring and Reporting
|
||||||
|
Track:
|
||||||
|
- Agent adoption rates
|
||||||
|
- User feedback and satisfaction
|
||||||
|
- Error rates and performance
|
||||||
|
- Security incidents or violations
|
||||||
|
|
||||||
|
## MCP-Specific Management
|
||||||
|
|
||||||
|
### MCP Agent Characteristics
|
||||||
|
- Connect to external systems via Model Context Protocol
|
||||||
|
- Use tools exposed by MCP servers
|
||||||
|
- Require OAuth 2.0 or SSO authentication
|
||||||
|
- Support same governance as REST API agents
|
||||||
|
|
||||||
|
### MCP Agent Validation
|
||||||
|
Verify:
|
||||||
|
- MCP server URL is accessible
|
||||||
|
- Authentication configuration is secure
|
||||||
|
- Tools imported are appropriate
|
||||||
|
- Response data doesn't expose sensitive info
|
||||||
|
- Server follows security best practices
|
||||||
|
|
||||||
|
### MCP Agent Deployment
|
||||||
|
Same process as REST API agents:
|
||||||
|
1. Review in admin center
|
||||||
|
2. Validate MCP server compliance
|
||||||
|
3. Test authentication flow
|
||||||
|
4. Deploy to users/groups
|
||||||
|
5. Monitor performance
|
||||||
|
|
||||||
|
## Agent Settings and Configuration
|
||||||
|
|
||||||
|
### Organizational Settings
|
||||||
|
Configure at tenant level:
|
||||||
|
- Enable/disable agent creation
|
||||||
|
- Set default permissions
|
||||||
|
- Configure approval workflows
|
||||||
|
- Define compliance policies
|
||||||
|
|
||||||
|
### Per-Agent Settings
|
||||||
|
Configure for individual agents:
|
||||||
|
- Availability (on/off)
|
||||||
|
- User assignment (all/groups/individuals)
|
||||||
|
- Permission scopes
|
||||||
|
- Usage limits or quotas
|
||||||
|
|
||||||
|
### Environment Routing
|
||||||
|
For Power Platform-based agents:
|
||||||
|
- Configure default environment
|
||||||
|
- Enable environment routing for Copilot Studio
|
||||||
|
- Manage flows via Power Platform admin center
|
||||||
|
|
||||||
|
## Shared Agent Management
|
||||||
|
|
||||||
|
### View Shared Agents
|
||||||
|
Admins can see:
|
||||||
|
- List of all shared agents
|
||||||
|
- Creator information
|
||||||
|
- Creation date
|
||||||
|
- Host products
|
||||||
|
- Availability status
|
||||||
|
|
||||||
|
### Manage Shared Agents
|
||||||
|
Admin actions:
|
||||||
|
- Search for specific shared agents
|
||||||
|
- View agent capabilities
|
||||||
|
- Block unsafe or non-compliant agents
|
||||||
|
- Monitor agent lifecycle
|
||||||
|
|
||||||
|
### User Access to Shared Agents
|
||||||
|
Users access through:
|
||||||
|
- Microsoft 365 Copilot on various surfaces
|
||||||
|
- Agent-specific tasks and assistance
|
||||||
|
- Creator-defined capabilities
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### Before Deployment
|
||||||
|
- **Pilot test** with small user group
|
||||||
|
- **Gather feedback** from early adopters
|
||||||
|
- **Validate security** and compliance
|
||||||
|
- **Document** agent capabilities and limitations
|
||||||
|
- **Train users** on agent usage
|
||||||
|
|
||||||
|
### During Deployment
|
||||||
|
- **Phased rollout** to manage adoption
|
||||||
|
- **Monitor performance** and errors
|
||||||
|
- **Collect feedback** continuously
|
||||||
|
- **Address issues** promptly
|
||||||
|
- **Communicate** availability to users
|
||||||
|
|
||||||
|
### Post-Deployment
|
||||||
|
- **Track metrics**: Adoption, satisfaction, errors
|
||||||
|
- **Iterate**: Improve based on feedback
|
||||||
|
- **Update**: Keep agent current with new features
|
||||||
|
- **Retire**: Remove obsolete or unused agents
|
||||||
|
- **Review**: Regular security and compliance audits
|
||||||
|
|
||||||
|
### Communication
|
||||||
|
- Announce new agents to users
|
||||||
|
- Provide documentation and examples
|
||||||
|
- Share best practices and use cases
|
||||||
|
- Highlight benefits and capabilities
|
||||||
|
- Offer support channels
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Agent Not Appearing
|
||||||
|
- Check deployment status in admin center
|
||||||
|
- Verify user is in assigned group
|
||||||
|
- Confirm agent is not blocked
|
||||||
|
- Check user has Copilot license
|
||||||
|
- Refresh Copilot interface
|
||||||
|
|
||||||
|
### Authentication Failures
|
||||||
|
- Verify OAuth credentials are valid
|
||||||
|
- Check user has necessary permissions
|
||||||
|
- Confirm MCP server is accessible
|
||||||
|
- Test authentication flow independently
|
||||||
|
|
||||||
|
### Performance Issues
|
||||||
|
- Monitor MCP server response times
|
||||||
|
- Check network connectivity
|
||||||
|
- Review error logs in admin center
|
||||||
|
- Validate agent isn't rate-limited
|
||||||
|
|
||||||
|
### Compliance Violations
|
||||||
|
- Block agent immediately if unsafe
|
||||||
|
- Review audit logs for violations
|
||||||
|
- Investigate data access patterns
|
||||||
|
- Update policies to prevent recurrence
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Microsoft 365 admin center](https://admin.microsoft.com/)
|
||||||
|
- [Power Platform admin center](https://admin.powerplatform.microsoft.com/)
|
||||||
|
- [Partner Center](https://partner.microsoft.com/) for agent submissions
|
||||||
|
- [Microsoft Agent 365 Overview](https://learn.microsoft.com/en-us/microsoft-agent-365/overview)
|
||||||
|
- [Agent Registry Documentation](https://learn.microsoft.com/en-us/microsoft-365/admin/manage/agent-registry)
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
Ask the user:
|
||||||
|
1. Is this agent ready for deployment or still in development?
|
||||||
|
2. Who should have access (all users, specific groups, individuals)?
|
||||||
|
3. Are there compliance or security requirements to address?
|
||||||
|
4. Should this be published to the organization or the public store?
|
||||||
|
5. What monitoring and reporting is needed?
|
||||||
|
|
||||||
|
Then provide:
|
||||||
|
- Step-by-step deployment guide
|
||||||
|
- Admin center configuration steps
|
||||||
|
- User assignment recommendations
|
||||||
|
- Governance and compliance checklist
|
||||||
|
- Monitoring and reporting plan
|
||||||
|
|
||||||
|
````
|
||||||
Reference in New Issue
Block a user