feat: adding workiq and m365-agents-toolkit skills#62
feat: adding workiq and m365-agents-toolkit skills#62darrelmiller merged 14 commits intomicrosoft:mainfrom
Conversation
Transform the work-iq repo into a plugin marketplace hosting multiple Copilot plugins with standardized metadata and structure. Changes: - Add marketplace registry (.github/plugin/marketplace.json) - Add workiq plugin (MCP server + skill) - Restructure m365-agents-toolkit as a marketplace plugin - Remove agent evaluator skill and all references - Remove TypeSpec/tsp references - Remove security-guidelines, patterns-and-frameworks, common-pitfalls - Flatten references subdirectories into single references/ folder - Merge scaffolding-best-practices into scaffolding-workflow - Merge scaffolding-examples into scaffolding-workflow - Rewrite conversation-design based on official MS docs - Slim SKILL.md from 409 to 139 lines, extract workspace-gates reference - Use real ATK VS Code extension ID instead of temp VSIX URL - Replace atk validate --file with atk validate - Remove all Python/JSON.parse validation references - Rewrite root README as marketplace landing page - Add CONTRIBUTING.md for plugin authors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e Plugins Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add AGENTS.md with streamlined local plugin install instructions - Add .github/plugin/plugin.json for each plugin (enables local install) - Fix atk validate to always use --env local (not --env dev) - Fix atk validate to run once per project (no --file flag, no per-file runs) - Fix API plugins to use single atk add action call with all operations - Pin ATK CLI to @rc and MCP Inspector to @0.20.0 - Update MCP plugin to inline tools in mcp_tool_description.tools (no separate file) - Add local_endpoint and auth to MCP runtime templates - Rename api-plugin-manifest URLs to plugin-manifest - Add reinstall-after-edit instruction to self-maintenance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add new skill for building MCP servers with OpenAI Apps SDK widget rendering for Copilot Chat. Includes references for widget patterns, devtunnels, plugin schema, and best practices. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat: restructure repo as plugin marketplace
There was a problem hiding this comment.
Pull request overview
This PR restructures the work-iq repository into a GitHub Copilot CLI plugin marketplace, introducing a centralized marketplace registry and two initial plugins (workiq and m365-agents-toolkit) with standardized metadata, MCP configuration, and skill documentation.
Changes:
- Added a marketplace registry at
.github/plugin/marketplace.jsonand updated repo docs to position the repo as a plugin marketplace. - Added the
workiqplugin (README, MCP config, skill docs, and plugin metadata). - Added the
m365-agents-toolkitplugin with consolidated skills and extensive reference documentation for agent + MCP/widget development.
Reviewed changes
Copilot reviewed 30 out of 30 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| plugins/workiq/skills/workiq/SKILL.md | Adds WorkIQ skill definition and MCP tool documentation for ask_work_iq. |
| plugins/workiq/README.md | Adds plugin install and usage docs for the WorkIQ plugin. |
| plugins/workiq/.mcp.json | Adds MCP server configuration for the WorkIQ plugin. |
| plugins/workiq/.github/plugin/plugin.json | Adds plugin metadata for marketplace consumption. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/widget-patterns.md | Adds widget HTML templates/patterns for Copilot widget rendering. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/plugin-schema.md | Adds MCP plugin schema guidance and manifest examples. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/mcp-server-pattern.md | Adds a TypeScript reference MCP server implementation pattern. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/devtunnels.md | Adds devtunnel setup scripts and workflow documentation. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/copilot-widget-protocol.md | Adds a language-agnostic protocol spec for Copilot widgets over MCP. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/best-practices.md | Adds best practices for widget/tool/resource patterns and CORS/security. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/SKILL.md | Adds the ui-widget-developer skill entrypoint and routing rules. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/workspace-gates.md | Adds workspace gating rules for agent scaffolding/editing workflows. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/schema.md | Adds schema version reference links for agent/plugin manifests. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/scaffolding-workflow.md | Adds the standardized scaffolding workflow for new agents. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/mcp-plugin.md | Adds guidance for integrating RemoteMCPServer plugins into agents. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/examples.md | Adds examples for common M365 agent development scenarios. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/editing-workflow.md | Adds the standardized validate+provision editing workflow rules. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/deployment.md | Adds ATK CLI lifecycle/deployment guidance and environment conventions. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/conversation-design.md | Adds updated conversation/instruction design guidance based on MS docs. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/best-practices.md | Adds best practices for security/perf/testing/compliance for agents. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/references/api-plugins.md | Adds comprehensive ATK-driven API plugin guidance and patterns. |
| plugins/m365-agents-toolkit/skills/m365-agent-developer/SKILL.md | Adds the main m365-agent-developer skill definition and routing. |
| plugins/m365-agents-toolkit/skills/install-atk/SKILL.md | Adds the install-atk skill to install/update ATK CLI + VS Code extension. |
| plugins/m365-agents-toolkit/README.md | Adds marketplace install and usage docs for the toolkit plugin. |
| plugins/m365-agents-toolkit/.github/plugin/plugin.json | Adds plugin metadata for marketplace consumption. |
| plugins/m365-agents-toolkit/skills/ui-widget-developer/references/widget-patterns.md | Adds widget template and implementation patterns for OpenAI Apps SDK widgets. |
| README.md | Rewrites the root README as the marketplace landing page and quickstart. |
| CONTRIBUTING.md | Adds contribution guidance for plugin authors and marketplace registration. |
| AGENTS.md | Adds repo structure + installation guidance for AI agents working in this repo. |
| .github/plugin/marketplace.json | Adds the central marketplace index for plugins and skill paths. |
| .claude-plugin/marketplace.json | Adds/updates Claude plugin marketplace metadata (mirrors registry content). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| Add to your `.mcp.json` or IDE MCP settings: | ||
|
|
||
| ```json | ||
| { | ||
| "workiq": { | ||
| "command": "npx", | ||
| "args": ["-y", "@microsoft/workiq@latest", "mcp"], | ||
| "tools": ["*"] | ||
| } | ||
| } |
There was a problem hiding this comment.
The example says to add this to your .mcp.json, but the JSON shown is missing the top-level mcpServers key that your actual .mcp.json files use (see plugins/workiq/.mcp.json). Please either wrap this example under mcpServers for .mcp.json, or split the docs into two explicit examples (one for .mcp.json and one for IDE settings).
| [](https://vscode.dev/redirect/mcp/install?name=workiq&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40microsoft%2Fworkiq%22%2C%22mcp%22%5D%7D) | ||
| [](https://insiders.vscode.dev/redirect/mcp/install?name=workiq&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40microsoft%2Fworkiq%22%2C%22mcp%22%5D%7D&quality=insiders) |
There was a problem hiding this comment.
The VS Code/Insiders install badge URLs embed an npx config using @microsoft/workiq without @latest, but later examples use @microsoft/workiq@latest. Consider keeping these consistent (or pinning an explicit version) so users don’t end up with different installs depending on which path they follow.
| Or add it as an MCP server in your coding agent or IDE: | ||
|
|
||
| ```json | ||
| { | ||
| "workiq": { | ||
| "command": "npx", | ||
| "args": [ | ||
| "-y", | ||
| "@microsoft/workiq", | ||
| "mcp" | ||
| ], | ||
| "tools": [ | ||
| "*" | ||
| ] | ||
| "args": ["-y", "@microsoft/workiq@latest", "mcp"], | ||
| "tools": ["*"] | ||
| } | ||
| } |
There was a problem hiding this comment.
This MCP config snippet appears to be missing the mcpServers wrapper that the repo documents elsewhere for .mcp.json (see AGENTS.md / CONTRIBUTING.md examples). If this is intended for VS Code’s MCP settings, it should match the expected shape; otherwise readers may copy an invalid config and the server won’t load.
| **NEVER manually write tool definitions.** Always use MCP Inspector to get the complete tool definitions from your running MCP server: | ||
|
|
||
| ```bash | ||
| npx @anthropic-ai/mcp-inspector | ||
| ``` |
There was a problem hiding this comment.
The MCP Inspector command here uses @anthropic-ai/mcp-inspector, but other repo docs use @modelcontextprotocol/inspector (for example in skills/ui-widget-developer/SKILL.md and m365-agent-developer/references/mcp-plugin.md). Please standardize on the same inspector package/command to avoid users following a broken or inconsistent setup path.
| // Debug logging | ||
| console.log('=== WIDGET DEBUG ==='); | ||
| console.log('window.openai:', window.openai); | ||
| if (window.openai) { | ||
| console.log('toolOutput:', window.openai.toolOutput); | ||
| console.log('theme:', window.openai.theme); | ||
| } |
There was a problem hiding this comment.
The template’s debug logging prints window.openai.toolOutput to the console. In real Copilot widget scenarios this data can contain user content/PII; logging it by default is risky and may violate privacy expectations. Consider removing these logs from the default template or gating them behind an explicit debug flag.
| function initialize() { | ||
| const data = getWidgetData(); | ||
| if (data) { | ||
| renderWidget(data); | ||
| } | ||
|
|
||
| // Listen for state changes | ||
| if (window.openai && typeof window.openai.onStateChange === 'function') { | ||
| window.openai.onStateChange(function(newState) { | ||
| console.log('onStateChange:', newState); | ||
| renderWidget(newState); | ||
| }); | ||
| } | ||
| } | ||
|
|
||
| initialize(); | ||
|
|
||
| // Poll if not rendered (data might arrive late) | ||
| if (!rendered) { | ||
| let attempts = 0; | ||
| const maxAttempts = 50; | ||
| const poll = setInterval(function() { | ||
| attempts++; | ||
| const data = getWidgetData(); | ||
| if (data) { | ||
| renderWidget(data); | ||
| clearInterval(poll); | ||
| } else if (attempts >= maxAttempts) { | ||
| clearInterval(poll); | ||
| document.getElementById('title').textContent = 'Unable to load'; | ||
| } | ||
| }, 100); | ||
| } | ||
|
|
||
| if (document.readyState === 'loading') { | ||
| document.addEventListener('DOMContentLoaded', initialize); | ||
| } |
There was a problem hiding this comment.
initialize() is called immediately and also registered on DOMContentLoaded when document.readyState === 'loading'. This can lead to duplicate renders, duplicate onStateChange subscriptions, and multiple polling intervals in slow-load cases. Recommend ensuring initialization happens exactly once (e.g., call immediately only when the DOM is ready, or only use the DOMContentLoaded hook with a guard).
| $content = Get-Content $envFile | ||
| $content = $content -replace "^MCP_SERVER_URL=.*", "MCP_SERVER_URL=$tunnelUrl" | ||
| $content = $content -replace "^MCP_SERVER_DOMAIN=.*", "MCP_SERVER_DOMAIN=$tunnelDomain" | ||
| $content | Out-File -FilePath $envFile -Encoding UTF8 |
There was a problem hiding this comment.
In the PowerShell devtunnel script, $content = Get-Content $envFile will fail if env/.env.local doesn’t exist yet, and the -replace calls only update existing MCP_SERVER_URL/MCP_SERVER_DOMAIN lines (they won’t add them if missing). Consider creating the file if absent and appending the variables when they’re not present, similar to the bash script behavior.
Replace -c declarative-agent-basic with -c declarative-agent in deployment.md and scaffolding-workflow.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Plugin marketplace: skills, MCP servers, and capability name fix
- Add 'Scaffold the Agent Project First' section to mcp-plugin.md with the 5 required lifecycle steps (especially teamsApp/extendToM365) - Add Step 0 to the MCP plugin workflow checklist - Add M365_TITLE_ID / extendToM365 warning to deployment.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Full overwrite of all reference files and SKILL.md body from agency-microsoft/playground main branch. Kept local skill name and description in SKILL.md frontmatter. Key changes: - SKILL.md: Added OAI vs MCP Apps path selection, ext-apps plugin delegation, MCP Apps migration guidance - best-practices.md: Updated tool response format with full _meta fields, named tunnel references - devtunnels.md: Switched to named tunnels for stable URLs - mcp-server-pattern.md: Use toolMeta helper in tool definitions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- deployment.md: Remove T_ prefix from test URLs, split local vs non-local test link guidance (M365_TITLE_ID vs SHARE_LINK) - Fix @anthropic-ai/mcp-inspector → @modelcontextprotocol/inspector@0.20.0 - Pin MCP Inspector to 0.20.0 across both skills (0.21 has a bug) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Full overwrite with upstream version: richer trigger patterns, comprehensive use case tables, stronger skill activation guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Rename plugin directory from m365-agents-toolkit to microsoft-365-agents-toolkit - Rename m365-agent-developer skill to declarative-agent-developer - Update marketplace.json, AGENTS.md, README.md, and .gitignore Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Transform the work-iq repo into a plugin marketplace hosting multiple Copilot plugins with standardized metadata and structure.
Changes
New structure
.github/plugin/marketplace.json) — central plugin indexask_work_iq,accept_eula,get_debug_link) + skillm365-agents-toolkit cleanup
references/subdirectories (json/, shared/, scaffolding/) into single folderatk validate --filewithatk validateRepo-level