Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/README.plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t
| [arch](../plugins/arch/README.md) | Architecture and modernization toolkit: produce a cited architecture document for a locally-cloned repo, and generate a phased modernization plan that auto-runs Documentation mode when needed. | 1 items | architecture, modernization, documentation, migration, onboarding |
| [arize-ax](../plugins/arize-ax/README.md) | Arize AX platform skills for LLM observability, evaluation, and optimization. Includes trace export, instrumentation, datasets, experiments, evaluators, AI provider integrations, annotations, prompt optimization, and deep linking to the Arize UI. | 9 items | arize, llm, observability, tracing, evaluation, instrumentation, datasets, experiments, prompt-optimization |
| [automate-this](../plugins/automate-this/README.md) | Record your screen doing a manual process, drop the video on your Desktop, and let Copilot CLI analyze it frame-by-frame to build working automation scripts. Supports narrated recordings with audio transcription. | 1 items | automation, screen-recording, workflow, video-analysis, process-automation, scripting, productivity, copilot-cli |
| [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 4 items | github-copilot, discovery, meta, prompt-engineering, agents |
| [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 5 items | github-copilot, discovery, meta, prompt-engineering, agents |
| [aws-cloud-development](../plugins/aws-cloud-development/README.md) | Comprehensive AWS cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 8 items | aws, cloud, infrastructure, cloudformation, terraform, serverless, architecture, devops, cdk |
| [azure-cloud-development](../plugins/azure-cloud-development/README.md) | Comprehensive Azure cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 11 items | azure, cloud, infrastructure, bicep, terraform, serverless, architecture, devops |
| [backlog-swipe-triage](../plugins/backlog-swipe-triage/README.md) | Quickly swipe through backlog issues to triage decisions like assign, needs-info, defer, close, or ignore. | 1 items | agent-assignment, backlog-triage, github-issues, issue-prioritization, swipe-interface, workflow-automation |
Expand All @@ -46,7 +46,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t
| [cms-development](../plugins/cms-development/README.md) | Skills for CMS development across themes, plugins, admin tooling, media workflows, markdown rendering, and static export pipelines. | 3 items | cms, content-management-system, wordpress, shopify, drupal, theme, plugin, media, static-site |
| [color-orb](../plugins/color-orb/README.md) | A visual orb that users can ask the agent to recolor while showing a live activity log in the canvas. | 1 items | agent-actions, color-picker, interactive-demo, realtime-updates, sse-events, visual-feedback |
| [context-engineering](../plugins/context-engineering/README.md) | Tools and techniques for maximizing GitHub Copilot effectiveness through better context management. Includes guidelines for structuring code, an agent for planning multi-file changes, and prompts for context-aware development. | 4 items | context, productivity, refactoring, best-practices, architecture |
| [context-matic](../plugins/context-matic/README.md) | Coding agents hallucinate APIs. ContextMatic gives them curated, versioned API and SDK docs. Ask your agent to "integrate the payments API" and it guesses — falling back on outdated training data and generic patterns that don't match your actual SDK. ContextMatic solves this by giving the agent deterministic, version-aware, SDK-native context at the exact moment it's needed. | 2 items | api-context, api-integration, mcp, sdk, apimatic, third-party-apis, sdks |
| [context-matic](../plugins/context-matic/README.md) | Coding agents hallucinate APIs. ContextMatic gives them curated, versioned API and SDK docs. Ask your agent to "integrate the payments API" and it guesses — falling back on outdated training data and generic patterns that don't match your actual SDK. ContextMatic solves this by giving the agent deterministic, version-aware, SDK-native context at the exact moment it's needed. | 3 items | api-context, api-integration, mcp, sdk, apimatic, third-party-apis, sdks |
| [convert-to-md](../plugins/convert-to-md/README.md) | A collection of Copilot skills that convert common document formats into Markdown so their contents can be accurately analyzed, summarized, searched, or extracted from. Just tell Copilot what you need — the right skill is invoked automatically and the conversion happens behind the scenes. | 3 items | skills, configuration, copilot, convert-word-to-md, convert-excel-to-md, convert-pdf-to-md |
| [copilot-sdk](../plugins/copilot-sdk/README.md) | Build applications with the GitHub Copilot SDK across multiple programming languages. Includes comprehensive instructions for C#, Go, Node.js/TypeScript, and Python to help you create AI-powered applications. | 1 items | copilot-sdk, sdk, csharp, go, nodejs, typescript, python, ai, github-copilot |
| [csharp-dotnet-development](../plugins/csharp-dotnet-development/README.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 9 items | csharp, dotnet, aspnet, testing |
Expand Down
30 changes: 21 additions & 9 deletions eng/generate-website-data.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -591,25 +591,37 @@ function generatePluginsData(gitDates, resourceIndex = {}) {
];
});

// Parse mcpServers: supports a path to a .mcp.json file or an inline object
// Parse mcpServers: an explicit manifest reference (path or inline object)
// takes precedence, otherwise fall back to the spec-named mcp.json at the
// plugin root, preferring the spec-named mcp.json over the legacy .mcp.json.
const mcpItems = [];
if (composition.mcpServers) {
{
let mcpServersObj = null;
let mcpConfigPath = relPath;
if (typeof composition.mcpServers === "string") {
const manifestMcpPath = composition.mcpServers.replace(/^\.\//, "");
mcpConfigPath = manifestMcpPath ? `${relPath}/${manifestMcpPath}` : relPath;
const mcpJsonPath = path.join(pluginDir, manifestMcpPath);
if (fs.existsSync(mcpJsonPath)) {
if (typeof composition.mcpServers === "object" && composition.mcpServers !== null) {
mcpServersObj = composition.mcpServers;
} else {
const candidates = [
...(typeof composition.mcpServers === "string"
? [composition.mcpServers.replace(/^\.\//, "")]
: []),
"mcp.json",
".mcp.json",
];
for (const candidate of candidates) {
const mcpJsonPath = path.join(pluginDir, candidate);
if (!fs.existsSync(mcpJsonPath)) {
continue;
}
try {
const mcpJson = JSON.parse(fs.readFileSync(mcpJsonPath, "utf-8"));
mcpServersObj = mcpJson.mcpServers || mcpJson;
mcpConfigPath = `${relPath}/${candidate}`;
break;
} catch {
// ignore parse errors
}
}
} else if (typeof composition.mcpServers === "object") {
mcpServersObj = composition.mcpServers;
}
if (mcpServersObj) {
for (const serverName of Object.keys(mcpServersObj)) {
Expand Down
40 changes: 39 additions & 1 deletion eng/update-readme.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -779,6 +779,43 @@ function generatePluginsSection(pluginsDir) {
return "";
}

// Count configured MCP servers, mirroring generate-website-data.mjs so the
// README and website catalogs report the same item count.
// Resolves an explicit manifest reference (path or inline object) first, then
// falls back to a plugin-root config file, preferring the spec-named mcp.json
// over the legacy .mcp.json, so counts stay correct under both conventions.
const countMcpServers = (composition, pluginDir) => {
const configured = composition.mcpServers;

let mcpServersObj = null;
if (typeof configured === "object" && configured !== null) {
mcpServersObj = configured;
} else {
const candidates = [
...(typeof configured === "string"
? [configured.replace(/^\.\//, "")]
: []),
"mcp.json",
".mcp.json",
];
for (const candidate of candidates) {
const mcpJsonPath = path.join(pluginDir, candidate);
if (!fs.existsSync(mcpJsonPath)) {
continue;
}
try {
const mcpJson = JSON.parse(fs.readFileSync(mcpJsonPath, "utf-8"));
mcpServersObj = mcpJson.mcpServers || mcpJson;
break;
} catch {
// ignore parse errors
}
}
}

return mcpServersObj ? Object.keys(mcpServersObj).length : 0;
};

// Create table header
let pluginsContent =
"| Name | Description | Items | Tags |\n| ---- | ----------- | ----- | ---- |\n";
Expand All @@ -802,7 +839,8 @@ function generatePluginsSection(pluginsDir) {
(composition.agents || []).length +
(composition.skills || []).length +
extensionReferences +
implicitExtension;
implicitExtension +
countMcpServers(composition, entry.pluginDir);
const keywords = plugin.keywords ? plugin.keywords.join(", ") : "";

const link = `../plugins/${dir}/README.md`;
Expand Down
Loading