mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-06-28 07:13:28 +00:00
Compare commits
69 Commits
bump/data-
...
add-hostin
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
827d09f619 | ||
|
|
30a213f9b3 | ||
|
|
42e5f5a93f | ||
|
|
c5effca3cb | ||
|
|
b46c1c3389 | ||
|
|
80b8c30937 | ||
|
|
3346ad8d4b | ||
|
|
ea3fff0323 | ||
|
|
f42c6edab3 | ||
|
|
783d8a5b37 | ||
|
|
0b8e678277 | ||
|
|
55daa1829a | ||
|
|
a817322f5b | ||
|
|
dcc18fee49 | ||
|
|
84380368a6 | ||
|
|
5709e1e267 | ||
|
|
dabc3ee036 | ||
|
|
cceb9eda21 | ||
|
|
01297202f5 | ||
|
|
307b006258 | ||
|
|
b92dc518fe | ||
|
|
a4892eba3b | ||
|
|
7718c3c84d | ||
|
|
7cc2e2be16 | ||
|
|
8fcaa2a35c | ||
|
|
da6f51df03 | ||
|
|
2220995220 | ||
|
|
6f7d4a8f86 | ||
|
|
9a27a46fe0 | ||
|
|
2ab7f9bc65 | ||
|
|
d27324777f | ||
|
|
04e6ed01e0 | ||
|
|
f3efd8a231 | ||
|
|
99a7821483 | ||
|
|
76cafe3c9c | ||
|
|
0b4b7aebdf | ||
|
|
d0bb0029f9 | ||
|
|
11e454d706 | ||
|
|
a37ecb4e8a | ||
|
|
43fd4d1837 | ||
|
|
8cff23c1c1 | ||
|
|
a0a3f2f695 | ||
|
|
78457a28aa | ||
|
|
02b6d7f579 | ||
|
|
a1c74e73ba | ||
|
|
0b16870038 | ||
|
|
91404dbe27 | ||
|
|
e7078a01e5 | ||
|
|
e55ed38966 | ||
|
|
a03bb78ed2 | ||
|
|
2fe4bfae86 | ||
|
|
7185b68b1c | ||
|
|
cbc7d77931 | ||
|
|
82f22ec4f0 | ||
|
|
92fcf8973b | ||
|
|
f2e1d01b77 | ||
|
|
b6d4f81be3 | ||
|
|
50c34b2478 | ||
|
|
a30e0614d3 | ||
|
|
c63064637d | ||
|
|
d1410844ad | ||
|
|
89aae89012 | ||
|
|
c8e9219efb | ||
|
|
6b93bc00d3 | ||
|
|
16c1372836 | ||
|
|
ff23096dcd | ||
|
|
06c6d8878b | ||
|
|
324d8ebe73 | ||
|
|
c0236a0ffd |
@@ -77,7 +77,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/AikidoSec/aikido-claude-plugin.git",
|
||||
"sha": "01e8cf542500e579cff948a0fa0365e4f819d7b4"
|
||||
"sha": "fbe11e287175e5eda448516dd2f741a63b276514"
|
||||
},
|
||||
"homepage": "https://github.com/AikidoSec/aikido-claude-plugin"
|
||||
},
|
||||
@@ -223,7 +223,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/astronomer/agents.git",
|
||||
"sha": "ed2fe757381ff42337fd7bce56a50f31134d9dce"
|
||||
"sha": "d33a14ddd4cd8045f90acfe49d2552120feeeced"
|
||||
},
|
||||
"homepage": "https://github.com/astronomer/agents"
|
||||
},
|
||||
@@ -244,7 +244,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/atlassian/atlassian-mcp-server.git",
|
||||
"sha": "55cfdc55afed1e273354f840a238421fbd9eee86"
|
||||
"sha": "201c1b20ef45a05fcece7f7b11df6e62b356d8d0"
|
||||
},
|
||||
"homepage": "https://github.com/atlassian/atlassian-mcp-server"
|
||||
},
|
||||
@@ -276,7 +276,7 @@
|
||||
"url": "https://github.com/auth0/agent-skills.git",
|
||||
"path": "plugins/auth0",
|
||||
"ref": "main",
|
||||
"sha": "3e3a5d84fe922378bd2c2eafb7f7986759e3c87e"
|
||||
"sha": "aacefa7dcbdf2d32ac14d3d7790b610cf716bd3c"
|
||||
},
|
||||
"homepage": "https://auth0.com"
|
||||
},
|
||||
@@ -337,7 +337,7 @@
|
||||
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
|
||||
"path": "plugins/aws-core",
|
||||
"ref": "main",
|
||||
"sha": "7898a91483218173d096db3de6892c2dc545d160"
|
||||
"sha": "49c4592dc490f569d5adf0c483239886bad2f09b"
|
||||
},
|
||||
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
|
||||
},
|
||||
@@ -353,7 +353,7 @@
|
||||
"url": "https://github.com/aws/agent-toolkit-for-aws.git",
|
||||
"path": "plugins/aws-data-analytics",
|
||||
"ref": "main",
|
||||
"sha": "49ca75209219a89ac43690d6ca0a59d976933ee8"
|
||||
"sha": "49c4592dc490f569d5adf0c483239886bad2f09b"
|
||||
},
|
||||
"homepage": "https://github.com/aws/agent-toolkit-for-aws"
|
||||
},
|
||||
@@ -425,7 +425,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/microsoft/azure-skills.git",
|
||||
"sha": "2cd48ca625cddcc1d377d2861fbddd54417c70cc"
|
||||
"sha": "c752fe85c8e499e32e34eb8a5498c22d5dd586c8"
|
||||
},
|
||||
"homepage": "https://github.com/microsoft/azure-skills"
|
||||
},
|
||||
@@ -539,6 +539,22 @@
|
||||
},
|
||||
"homepage": "https://buildkite.com"
|
||||
},
|
||||
{
|
||||
"name": "canva",
|
||||
"description": "Create, edit, review, resize, and brand-check Canva designs with the Canva MCP server.",
|
||||
"author": {
|
||||
"name": "Canva"
|
||||
},
|
||||
"category": "design",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/canva-sdks/canva-skills.git",
|
||||
"path": "plugins/canva",
|
||||
"ref": "main",
|
||||
"sha": "b56291ea0a36d0a941e1478b47959be5f1771dee"
|
||||
},
|
||||
"homepage": "https://www.canva.com"
|
||||
},
|
||||
{
|
||||
"name": "carta-cap-table",
|
||||
"description": "Carta Cap Table plugin — skills and hooks for querying cap tables, grants, SAFEs, 409A valuations, waterfall scenarios, and more",
|
||||
@@ -551,7 +567,7 @@
|
||||
"url": "https://github.com/carta/plugins.git",
|
||||
"path": "plugins/carta-cap-table",
|
||||
"ref": "main",
|
||||
"sha": "d73954d3d9ce1e3fce1ec2b9ee6819922dd539e3"
|
||||
"sha": "8ef1de26aa8d39096672e8d431ac6c46710f44db"
|
||||
},
|
||||
"homepage": "https://carta.com"
|
||||
},
|
||||
@@ -583,7 +599,7 @@
|
||||
"url": "https://github.com/carta/plugins.git",
|
||||
"path": "plugins/carta-investors",
|
||||
"ref": "main",
|
||||
"sha": "d73a3615864a5590ad6105df1b3e1b26324d1813"
|
||||
"sha": "8ef1de26aa8d39096672e8d431ac6c46710f44db"
|
||||
},
|
||||
"homepage": "https://carta.com"
|
||||
},
|
||||
@@ -610,7 +626,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/ChromeDevTools/chrome-devtools-mcp.git",
|
||||
"sha": "6a9466378c13b6ccba91b54091ea83a5ca37a8db"
|
||||
"sha": "e5bd334c97b4f25207cad586684cca8208f1657e"
|
||||
},
|
||||
"homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp"
|
||||
},
|
||||
@@ -935,7 +951,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/CrowdStrike/foundry-skills.git",
|
||||
"sha": "20ef548a615a5a8a18de7edbe65eb4bb10c8563b"
|
||||
"sha": "7b2cda5cd3c5383924c365a3194172feb9fbac59"
|
||||
},
|
||||
"homepage": "https://github.com/CrowdStrike/foundry-skills"
|
||||
},
|
||||
@@ -981,7 +997,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/dash0hq/dash0-agent-plugin.git",
|
||||
"sha": "f8c31f6fcdc6588a27153ceed09e561a40da3a86"
|
||||
"sha": "4eac30a47b4dd3819e0719f9f01b9772cde7ca24"
|
||||
},
|
||||
"homepage": "https://dash0.com/"
|
||||
},
|
||||
@@ -992,7 +1008,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/astronomer/agents.git",
|
||||
"sha": "e4ebf9a7ad3f8dbf3fcfda9c245a65eb1415967b"
|
||||
"sha": "d33a14ddd4cd8045f90acfe49d2552120feeeced"
|
||||
},
|
||||
"homepage": "https://github.com/astronomer/agents"
|
||||
},
|
||||
@@ -1006,7 +1022,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack.git",
|
||||
"sha": "86cd0201237ed5ac30d8645c2ba50000fac84972"
|
||||
"sha": "23d0e064cce2f7034e9270f770dc10d96bccde39"
|
||||
},
|
||||
"homepage": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack"
|
||||
},
|
||||
@@ -1029,7 +1045,7 @@
|
||||
"url": "https://github.com/awslabs/agent-plugins.git",
|
||||
"path": "plugins/databases-on-aws",
|
||||
"ref": "main",
|
||||
"sha": "66dd3cf5acdf374cc0d79af2bf51fa6fbb975c07"
|
||||
"sha": "96a073a195491f2192c256ba66730b631ced03e1"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/agent-plugins"
|
||||
},
|
||||
@@ -1045,7 +1061,7 @@
|
||||
"url": "https://github.com/databricks/databricks-agent-skills.git",
|
||||
"path": "plugins/databricks/claude",
|
||||
"ref": "main",
|
||||
"sha": "e337277c9771597bd2a67dfc5f8dd1d1afc887c6"
|
||||
"sha": "ae99f56bbadc5ac0bac8df11791eb6a5224a2a36"
|
||||
},
|
||||
"homepage": "https://developers.databricks.com/"
|
||||
},
|
||||
@@ -1087,7 +1103,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/gemini-cli-extensions/dataproc.git",
|
||||
"sha": "c36c7f8bb53a1f8903382471366986ef226c509d"
|
||||
"sha": "6d6ac3889bf448e33a0ad96174bc5b0849c74ebe"
|
||||
},
|
||||
"homepage": "https://github.com/gemini-cli-extensions/dataproc"
|
||||
},
|
||||
@@ -1179,7 +1195,7 @@
|
||||
"url": "https://github.com/dropbox/dropbox-ai-plugins.git",
|
||||
"path": "claude",
|
||||
"ref": "main",
|
||||
"sha": "2f9c81a5d012cc9c389132331a93f4ade06a97a9"
|
||||
"sha": "4135e81caf8275b4c97caef244479e0dcb6fb823"
|
||||
},
|
||||
"homepage": "https://www.dropbox.com"
|
||||
},
|
||||
@@ -1221,7 +1237,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/exa-labs/exa-mcp-server.git",
|
||||
"sha": "40d9990f48c55301535b0ea2d950176e6f115df3"
|
||||
"sha": "a4dcddf69b701debe9d7caca30e6fa4610ce553c"
|
||||
},
|
||||
"homepage": "https://exa.ai/docs/reference/exa-mcp"
|
||||
},
|
||||
@@ -1311,7 +1327,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/firecrawl/firecrawl-claude-plugin.git",
|
||||
"sha": "069551a7d2b0379ea7589a9e2f46062e69820a2d"
|
||||
"sha": "52b6c0970b904b10641f223dbeb8f6b35643521c"
|
||||
},
|
||||
"homepage": "https://github.com/firecrawl/firecrawl-claude-plugin.git"
|
||||
},
|
||||
@@ -1421,6 +1437,20 @@
|
||||
"category": "productivity",
|
||||
"homepage": "https://github.com/anthropics/claude-plugins-public/tree/main/plugins/hookify"
|
||||
},
|
||||
{
|
||||
"name": "hostinger",
|
||||
"description": "Deploy, manage and monitor Hostinger services — Websites, Domains, Ecommerce, Email Marketing, Subscriptions & Payments, and VPS. Authenticate via browser (OAuth) or API token.",
|
||||
"author": {
|
||||
"name": "Hostinger"
|
||||
},
|
||||
"category": "deployment",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/hostinger/claude-plugin.git",
|
||||
"sha": "6fe8f03f9b1f6d71cf60f05f01f9e228e772cbb0"
|
||||
},
|
||||
"homepage": "https://www.hostinger.com"
|
||||
},
|
||||
{
|
||||
"name": "huggingface-skills",
|
||||
"description": "Build, train, evaluate, and use open source AI models, datasets, and spaces.",
|
||||
@@ -1442,7 +1472,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/hunter-io/claude-plugin.git",
|
||||
"sha": "0a03795dfe7258f46e702a2898bfc25aebbfcc58"
|
||||
"sha": "6db1c0ae9a789da21b415d65a59a3409dd99ca38"
|
||||
},
|
||||
"homepage": "https://hunter.io"
|
||||
},
|
||||
@@ -1456,7 +1486,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/heygen-com/hyperframes.git",
|
||||
"sha": "56859b618f45f646835c717a8a6dfaabbbda636d"
|
||||
"sha": "3351fb1a6d7f0202d07db9bf9ad335fd0d1ec344"
|
||||
},
|
||||
"homepage": "https://hyperframes.heygen.com"
|
||||
},
|
||||
@@ -1563,7 +1593,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/langfuse/claude-observability-plugin.git",
|
||||
"sha": "938df41639efcaa22790b1a216308b6ed626a8b7"
|
||||
"sha": "4615df55428bdcd8a2095fdea2cbe970b2c5152e"
|
||||
},
|
||||
"homepage": "https://langfuse.com/integrations/other/claude-code"
|
||||
},
|
||||
@@ -1867,7 +1897,7 @@
|
||||
"url": "https://github.com/awslabs/startups.git",
|
||||
"path": "migrate/plugins/migration-to-aws",
|
||||
"ref": "main",
|
||||
"sha": "e49c21bf8b4883a9646938c00091633dfb8f483f"
|
||||
"sha": "01c38bf635e5c5ad24e5ea1afbf34b6f41518317"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/startups"
|
||||
},
|
||||
@@ -1991,7 +2021,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Nimbleway/agent-skills.git",
|
||||
"sha": "1a599ea15f71d20cc6f85692030021146931997a"
|
||||
"sha": "958fca1cca704c247fe75929c572fbad6a302ba5"
|
||||
},
|
||||
"homepage": "https://docs.nimbleway.com/integrations/agent-skills/plugin-installation"
|
||||
},
|
||||
@@ -2066,7 +2096,7 @@
|
||||
"url": "https://github.com/oracle-samples/oracle-aidp-samples.git",
|
||||
"path": "ai/claude-code-plugins/oracle-ai-data-platform-workbench-spark-connectors",
|
||||
"ref": "main",
|
||||
"sha": "13e7a9139b3b62172119c7fc1a63bf4a2eac919d"
|
||||
"sha": "ca1ab4e5689bdc6cb22b842fed5d98829847fd64"
|
||||
},
|
||||
"homepage": "https://docs.oracle.com/en/cloud/paas/ai-data-platform/index.html"
|
||||
},
|
||||
@@ -2206,7 +2236,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/PostHog/ai-plugin.git",
|
||||
"sha": "835f4f647fec8a8fbde8ea00cf9b2432a35d7e5b"
|
||||
"sha": "b2054334354599d7cc2d02e7329a5066e44d9c4f"
|
||||
},
|
||||
"homepage": "https://posthog.com/docs/model-context-protocol"
|
||||
},
|
||||
@@ -2272,7 +2302,7 @@
|
||||
"url": "https://github.com/pydantic/skills.git",
|
||||
"path": "plugins/ai",
|
||||
"ref": "main",
|
||||
"sha": "f0c20b9895f06d58823032f13e68c6aaae9dd3fa"
|
||||
"sha": "96e5d761173b496a4ce4188ce4aaada86d93a5c3"
|
||||
},
|
||||
"homepage": "https://github.com/pydantic/skills/tree/main/plugins/ai"
|
||||
},
|
||||
@@ -2411,7 +2441,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Digital-Process-Tools/claude-remember.git",
|
||||
"sha": "f1a00382598ef627c858d9eed6438047b072ba41"
|
||||
"sha": "9d7324957b4d6e92fd57d265a2685a363e93f63e"
|
||||
},
|
||||
"homepage": "https://github.com/Digital-Process-Tools/claude-remember"
|
||||
},
|
||||
@@ -2451,7 +2481,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/rilldata/agent-skills.git",
|
||||
"sha": "c8c8738f44826150d52304cd4fb70cc3ecbdca2e"
|
||||
"sha": "5ac72459d4ec43c6e818bfdb1f3f2696e0cb21d4"
|
||||
},
|
||||
"homepage": "https://docs.rilldata.com/developers/build/ai-configuration"
|
||||
},
|
||||
@@ -2656,7 +2686,7 @@
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/semgrep/mcp-marketplace.git",
|
||||
"path": "plugin",
|
||||
"sha": "5ee984a4aeee83b3edae3ed44be4be8d333d24d1"
|
||||
"sha": "8e652ba6f586bb20377a72792c402c5a85a9b284"
|
||||
},
|
||||
"homepage": "https://github.com/semgrep/mcp-marketplace.git"
|
||||
},
|
||||
@@ -2667,7 +2697,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/getsentry/plugin-claude.git",
|
||||
"sha": "f69cf097dd4c2fd56cab2738442e78848ff6d206"
|
||||
"sha": "83df938b934e154c5be2a059fab500711ac54c3f"
|
||||
},
|
||||
"homepage": "https://github.com/getsentry/plugin-claude"
|
||||
},
|
||||
@@ -2683,7 +2713,7 @@
|
||||
"url": "https://github.com/getsentry/cli.git",
|
||||
"path": "plugins/sentry-cli",
|
||||
"ref": "main",
|
||||
"sha": "6acb9aa84a8e02d2cc4b029e05266427fdb79559"
|
||||
"sha": "97e7fccea763d388c49f5f69eaebac59749bf65d"
|
||||
},
|
||||
"homepage": "https://sentry.io"
|
||||
},
|
||||
@@ -2770,7 +2800,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/slackapi/slack-mcp-plugin.git",
|
||||
"sha": "1559729e80eafb1e93fba4aae30c43a85fe35355"
|
||||
"sha": "acf7fcd0e07177e0e54eb08472f3488587607ba0"
|
||||
},
|
||||
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
|
||||
},
|
||||
@@ -2860,7 +2890,7 @@
|
||||
"url": "https://github.com/stripe/ai.git",
|
||||
"path": "providers/claude/plugin",
|
||||
"ref": "main",
|
||||
"sha": "23b54f12503eb18bb05eb9de9fbaeb301bec80b0"
|
||||
"sha": "f54c9e6c0e8b6cfe4e648745eec68ecab3ddc994"
|
||||
},
|
||||
"homepage": "https://github.com/stripe/ai/tree/main/providers/claude/plugin"
|
||||
},
|
||||
@@ -2872,7 +2902,7 @@
|
||||
"source": "url",
|
||||
"url": "https://github.com/sumup/sumup-skills.git",
|
||||
"path": "providers/claude/plugin",
|
||||
"sha": "b69ff6f5afcd5934af70529e529c0dd8abe46cbe"
|
||||
"sha": "700da2e866a71c7acbfcb0f2940ad7fa19955ae4"
|
||||
},
|
||||
"homepage": "https://www.sumup.com/"
|
||||
},
|
||||
@@ -2918,6 +2948,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tavily",
|
||||
"description": "Build AI applications with real-time web data using Tavily's search, extract, crawl, and research APIs.",
|
||||
"author": {
|
||||
"name": "Tavily Team"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/tavily-ai/skills.git",
|
||||
"sha": "ea5e8201b0d3ed9c10b70b71187589bd761fe2d2"
|
||||
},
|
||||
"homepage": "https://www.tavily.com/"
|
||||
},
|
||||
{
|
||||
"name": "teamcity-cli",
|
||||
"description": "Agent skill for interacting with TeamCity CI/CD using the teamcity CLI. Enables Claude to explore builds, view logs, start jobs, manage queues, agents, and more.",
|
||||
@@ -2928,7 +2972,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/JetBrains/teamcity-cli.git",
|
||||
"sha": "42ce6a22b1a8167120adbfa8de8b79f36e698133"
|
||||
"sha": "32dfd91cc8a9b6d44f47896c1ef1b183ab58e973"
|
||||
},
|
||||
"homepage": "https://www.jetbrains.com/teamcity/"
|
||||
},
|
||||
@@ -3039,7 +3083,7 @@
|
||||
"url": "https://github.com/UI5/plugins-coding-agents.git",
|
||||
"path": "plugins/ui5-modernization",
|
||||
"ref": "main",
|
||||
"sha": "1d4dedd56afcd1c3269c4d80f09e2ddb7f1bf5be"
|
||||
"sha": "d1e3a43fa80ef160cb42689b88d665e25a5a81a1"
|
||||
},
|
||||
"homepage": "https://github.com/UI5/plugins-coding-agents"
|
||||
},
|
||||
@@ -3061,6 +3105,20 @@
|
||||
},
|
||||
"homepage": "https://github.com/UI5/plugins-coding-agents"
|
||||
},
|
||||
{
|
||||
"name": "unreal-engine-skills-for-claude-code",
|
||||
"description": "Control Unreal Editor directly from Claude Code via MCP. Hundreds of tools exposed via Unreal's ToolsetRegistry across 30+ toolsets: actors, blueprints, materials, Niagara, Control Rigs, Sequencer, State Trees, widgets, Gameplay Ability System, automation testing, and more.",
|
||||
"author": {
|
||||
"name": "Epic Games"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/EpicGames/unreal-engine-skills-for-claude-code-plugin.git",
|
||||
"sha": "766fb42370d9e251f7524fffb12cfdbc5b11a426"
|
||||
},
|
||||
"homepage": "https://dev.epicgames.com/documentation/unreal-engine/unreal-mcp-in-unreal-editor"
|
||||
},
|
||||
{
|
||||
"name": "valtown",
|
||||
"description": "Build and deploy on Val Town. Bundles the Val Town MCP server and platform skills (HTTP vals, cron/intervals, SQLite, email, OAuth, React UI, third-party integrations, templates).",
|
||||
@@ -3073,7 +3131,7 @@
|
||||
"url": "https://github.com/val-town/plugins.git",
|
||||
"path": "plugin",
|
||||
"ref": "main",
|
||||
"sha": "22594eb245d5b06714c99248d68c333169274b21"
|
||||
"sha": "80cc05b9229aaec38b5da5e9d33d9898e1e614cd"
|
||||
},
|
||||
"homepage": "https://val.town"
|
||||
},
|
||||
@@ -3204,7 +3262,7 @@
|
||||
"url": "https://github.com/zapier/zapier-mcp.git",
|
||||
"path": "plugins/zapier",
|
||||
"ref": "main",
|
||||
"sha": "469651fe7fdaa3dfc6a476ef5bad6c354773366a"
|
||||
"sha": "11bfb606bd1984beef15f6e16257f99ee47c7f29"
|
||||
},
|
||||
"homepage": "https://github.com/zapier/zapier-mcp/tree/main/plugins/zapier"
|
||||
},
|
||||
@@ -3272,7 +3330,7 @@
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/langfuse/skills.git",
|
||||
"sha": "c39789078b848160a695947907db3ba40b7a2bce"
|
||||
"sha": "6b6c44cfe3c4e00860401a697d401dcb3b6e3737"
|
||||
},
|
||||
"homepage": "https://langfuse.com"
|
||||
}
|
||||
|
||||
31
.github/scripts/external-pr-scope.js
vendored
31
.github/scripts/external-pr-scope.js
vendored
@@ -121,4 +121,33 @@ async function evaluate({ github, context }) {
|
||||
return analyze({ changedFiles, before, after, liveRepos: liveReposOf(liveBase) });
|
||||
}
|
||||
|
||||
module.exports = { normalizeRepo, liveReposOf, analyze, readPlugins, evaluate, MARKETPLACE };
|
||||
// Authors that are NOT subject to the external-contributor scope rules:
|
||||
// - the repo's own automation bot — its bump PRs legitimately MODIFY existing entries
|
||||
// (SHA bumps), which the additions-only external-contributor rule forbids; AND
|
||||
// - org members (write/admin).
|
||||
// Safe under pull_request_target: a fork PR cannot set its author to github-actions[bot]
|
||||
// (that login is only ever the org's own GITHUB_TOKEN workflow), and the member path is a
|
||||
// real permission lookup. Wrapped in try/catch because getCollaboratorPermissionLevel throws
|
||||
// for a non-collaborator/unknown user — without this, both callers would error the job rather
|
||||
// than fall through to scope evaluation.
|
||||
const EXEMPT_BOTS = new Set(['github-actions[bot]']);
|
||||
|
||||
async function isExemptAuthor({ github, context }) {
|
||||
const author = context.payload.pull_request.user.login;
|
||||
if (EXEMPT_BOTS.has(author)) {
|
||||
return { exempt: true, reason: `${author} is the trusted automation bot` };
|
||||
}
|
||||
try {
|
||||
const { data } = await github.rest.repos.getCollaboratorPermissionLevel({
|
||||
owner: context.repo.owner, repo: context.repo.repo, username: author,
|
||||
});
|
||||
if (['admin', 'write'].includes(data.permission)) {
|
||||
return { exempt: true, reason: `${author} is ${data.permission} (member)` };
|
||||
}
|
||||
} catch (e) {
|
||||
// not a collaborator / lookup failed → not exempt; fall through to scope evaluation
|
||||
}
|
||||
return { exempt: false };
|
||||
}
|
||||
|
||||
module.exports = { normalizeRepo, liveReposOf, analyze, readPlugins, evaluate, isExemptAuthor, MARKETPLACE };
|
||||
|
||||
19
.github/workflows/close-external-prs.yml
vendored
19
.github/workflows/close-external-prs.yml
vendored
@@ -23,14 +23,13 @@ jobs:
|
||||
script: |
|
||||
const author = context.payload.pull_request.user.login;
|
||||
|
||||
const { data } = await github.rest.repos.getCollaboratorPermissionLevel({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
username: author
|
||||
});
|
||||
const { evaluate, isExemptAuthor } = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/external-pr-scope.js`);
|
||||
|
||||
if (['admin', 'write'].includes(data.permission)) {
|
||||
console.log(`${author} has ${data.permission} access, allowing PR`);
|
||||
// Members (write/admin) and the repo's own automation bot (bump SHA PRs) are never
|
||||
// auto-closed.
|
||||
const ex = await isExemptAuthor({ github, context });
|
||||
if (ex.exempt) {
|
||||
console.log(`${ex.reason} — allowing PR`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,9 +37,9 @@ jobs:
|
||||
// contribution — it adds marketplace.json entries whose source repo ALREADY backs
|
||||
// a live plugin here, and changes nothing else. (No maintained allowlist: the set
|
||||
// of allowed repos is derived from the live marketplace.) This grants only the
|
||||
// right to open a reviewable PR; the External PR Scope Guard required check and a
|
||||
// maintainer approval still gate the merge.
|
||||
const { evaluate } = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/external-pr-scope.js`);
|
||||
// right to open a reviewable PR; the validate + scan checks and a maintainer
|
||||
// approval still gate the merge (the External PR Scope Guard is advisory signal,
|
||||
// not a required check).
|
||||
const result = await evaluate({ github, context });
|
||||
if (result.ok && result.added.length > 0) {
|
||||
console.log(`In-scope external contribution (adds: ${result.added.join(', ')}) — allowing PR.`);
|
||||
|
||||
32
.github/workflows/external-pr-scope-guard.yml
vendored
32
.github/workflows/external-pr-scope-guard.yml
vendored
@@ -1,14 +1,17 @@
|
||||
name: External PR Scope Guard
|
||||
|
||||
# Required status check that constrains what a NON-MEMBER pull request may change.
|
||||
# Members (write/admin) are unrestricted and skip this check. For a non-member PR this
|
||||
# fails unless the PR is an in-scope external contribution per .github/scripts/external-pr-scope.js:
|
||||
# it changes ONLY .claude-plugin/marketplace.json, the delta is additions-only (no existing
|
||||
# entry modified or removed), and every ADDED entry's source.url is a repo that ALREADY backs
|
||||
# a live plugin in this marketplace (the allowed set is derived from the live marketplace —
|
||||
# there is no maintained allowlist).
|
||||
# Advisory check that surfaces what a NON-MEMBER pull request may change.
|
||||
# Members (write/admin) and the repo's own automation bot (bump SHA PRs) are unrestricted and
|
||||
# skip this check. For a non-member PR this fails unless the PR is an in-scope external
|
||||
# contribution per .github/scripts/external-pr-scope.js: it changes ONLY
|
||||
# .claude-plugin/marketplace.json, the delta is additions-only (no existing entry modified or
|
||||
# removed), and every ADDED entry's source.url is a repo that ALREADY backs a live plugin in
|
||||
# this marketplace (the allowed set is derived from the live marketplace — there is no
|
||||
# maintained allowlist).
|
||||
#
|
||||
# Add the scope-guard job as a REQUIRED status check in branch protection for it to block merge.
|
||||
# Do NOT add this job to branch protection as a required status check. The merge gate is the
|
||||
# `validate` + `scan` checks plus a maintainer approval; this guard is advisory signal for the
|
||||
# reviewer, not a hard gate. (Making it required would block the no-approval bump-merge path.)
|
||||
#
|
||||
# Security: runs on pull_request_target but checks out only the BASE repo (trusted) for the
|
||||
# shared script; the head marketplace.json is fetched as DATA via the API and parsed, never executed.
|
||||
@@ -29,17 +32,16 @@ jobs:
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const author = context.payload.pull_request.user.login;
|
||||
const { evaluate, isExemptAuthor } = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/external-pr-scope.js`);
|
||||
|
||||
const { data: perm } = await github.rest.repos.getCollaboratorPermissionLevel({
|
||||
owner: context.repo.owner, repo: context.repo.repo, username: author,
|
||||
});
|
||||
if (['admin', 'write'].includes(perm.permission)) {
|
||||
console.log(`${author} is ${perm.permission} (member) — scope guard not applicable.`);
|
||||
// Members (write/admin) and the repo's own automation bot (bump SHA PRs) are
|
||||
// unrestricted; only genuinely external contributions are scope-checked.
|
||||
const ex = await isExemptAuthor({ github, context });
|
||||
if (ex.exempt) {
|
||||
console.log(`${ex.reason} — scope guard not applicable.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const { evaluate } = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/external-pr-scope.js`);
|
||||
const result = await evaluate({ github, context });
|
||||
|
||||
if (!result.ok) {
|
||||
|
||||
Reference in New Issue
Block a user