README invites external PRs that CI closes automatically
The contradiction
README.md:80 says:
Plugins are just markdown files. Fork the repo, make your changes, and submit a PR.
There is no CONTRIBUTING.md and no mention of membership. But .github/workflows/close-external-prs.yml runs on pull_request_target: [opened] and closes any PR from a non-member with:
Thanks for your interest! This repo only accepts contributions from Anthropic team members. If you'd like to submit a plugin to the marketplace, please submit your plugin here.
The only external PR that survives is one touching only .claude-plugin/marketplace.json, additions-only, whose source.url already backs a live plugin here. So the README's instruction succeeds for almost nobody who follows it.
It is already costing people work
- #1180 — opened
17:36:37, closed17:36:51. Fourteen seconds, for a 13-file change. - #232 — "Review request: PR #231 — add markifact entry" (open)
- #183 — "Review request: PR #182 — refresh adspirer-ads-agent entry" (open)
The last two are contributors who followed the README, had the PR auto-closed, and then filed an issue asking for a review — so the gap is also generating issue traffic that the submission flow would have absorbed.
At 24k+ stars this is a fair amount of avoidable effort, and the auto-close message is the first time a contributor learns the policy.
Suggested fix
The bot's message already contains the right destination, so the README just needs to agree with it. Something like:
## Contributing
Plugins are just markdown files. To propose one for the marketplace, submit it
[here](https://clau.de/plugin-directory-submission) — pull requests from outside
the Anthropic org are closed automatically.
Anthropic team members: fork the repo, make your changes, and submit a PR.Happy to open the PR if it helps, though as written the guard would close that too — it touches a file other than marketplace.json.
Not a bug, noted in passing
While confirming the above I checked the "url": "" entries across 14 .mcp.json files, which #1180 was removing. Those look intentional — check-mcp-urls.yml filters them deliberately ("Empty URLs are placeholders awaiting config and would false-fail"), and endpoints like Snowflake and Databricks are per-account. Mentioning it so the idea is not retried.
Source: anthropics/knowledge-work-plugins