Repository navigation
fix(agentic-engineering): pass the Claude plugin directory's checks #659
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
bde9403
fix(agentic-engineering): pass the Claude plugin directory's checks
devantler 67a62cf
fix(ci): let the gh JSON-field guard pass a plugin's PNG listing icon
devantler 8fc89b8
Merge main into claude/plugin-directory-validation
devantler 009394b
fix(agentic-engineering): give Codex its own launch paths and harden …
devantler cc1e354
Merge main into claude/plugin-directory-validation
devantler File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| { | ||
| "mcpServers": { | ||
| "aws-knowledge": { | ||
| "type": "http", | ||
| "url": "https://knowledge-mcp.global.api.aws" | ||
| }, | ||
| "cloudflare-docs": { | ||
| "type": "http", | ||
| "url": "https://docs.mcp.cloudflare.com/mcp" | ||
| }, | ||
| "context7": { | ||
| "type": "http", | ||
| "url": "https://mcp.context7.com/mcp" | ||
| }, | ||
| "coroot": { | ||
| "type": "http", | ||
| "url": "${COROOT_URL}/mcp", | ||
| "headersHelper": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/coroot-mcp-headers.sh\" \"${CLAUDE_PLUGIN_DATA}\"" | ||
| }, | ||
| "flux-operator-mcp": { | ||
| "command": "sh", | ||
| "args": [ | ||
| "scripts/flux-operator-mcp.sh" | ||
| ], | ||
| "cwd": "." | ||
| }, | ||
| "github": { | ||
| "type": "http", | ||
| "url": "https://api.githubcopilot.com/mcp/", | ||
| "headers": { | ||
| "X-MCP-Toolsets": "context,repos,issues,pull_requests,users,actions,labels,projects", | ||
| "X-MCP-Exclude-Tools": "merge_pull_request,create_repository,fork_repository,push_files,create_or_update_file,delete_file,update_pull_request_branch,update_pull_request,pull_request_review_write,add_comment_to_pending_review,actions_run_trigger,delete_repository" | ||
| }, | ||
| "headersHelper": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/github-mcp-headers.sh\" \"${CLAUDE_PLUGIN_DATA}\"" | ||
| }, | ||
| "github-ghas-tools": { | ||
| "type": "http", | ||
| "url": "https://api.githubcopilot.com/mcp/readonly", | ||
| "headers": { | ||
| "X-MCP-Toolsets": "code_security,secret_protection,security_advisories,dependabot", | ||
| "X-MCP-Readonly": "true" | ||
| }, | ||
| "headersHelper": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/github-mcp-headers.sh\" \"${CLAUDE_PLUGIN_DATA}\"" | ||
| }, | ||
| "kubescape": { | ||
| "command": "sh", | ||
| "args": [ | ||
| "scripts/kubescape-mcp.sh" | ||
| ], | ||
| "cwd": "." | ||
| }, | ||
| "siderolabs-docs": { | ||
| "type": "http", | ||
| "url": "https://docs.siderolabs.com/mcp" | ||
| }, | ||
| "stripe": { | ||
| "type": "http", | ||
| "url": "https://mcp.stripe.com" | ||
| }, | ||
| "svelte": { | ||
| "type": "http", | ||
| "url": "https://mcp.svelte.dev/mcp" | ||
| }, | ||
| "terraform-registry": { | ||
| "command": "terraform-mcp-server", | ||
| "args": [ | ||
| "stdio", | ||
| "--toolsets", | ||
| "registry" | ||
| ] | ||
| } | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| # Privacy | ||
|
|
||
| The `agentic-engineering` plugin is a set of files that runs inside your own AI coding tool: | ||
| skills, agents, helper scripts and MCP server definitions. Devantler Tech runs no service for it. | ||
| The plugin has no backend and sends no telemetry, and Devantler Tech collects, stores, shares and | ||
| sells no personal data through it. | ||
|
|
||
| What the plugin's servers send, and to whom, is set out below. Your conversation, including what | ||
| those servers return, also goes to the model provider your AI tool uses, under that provider's | ||
| terms rather than this policy. | ||
|
|
||
| ## On your machine | ||
|
|
||
| - **Skills and agents** are instructions your tool loads. Anything they do, such as running `gh` | ||
| or `git`, runs through your tool's own tools and permissions. | ||
| - **GitHub sign-in (Claude Code only).** | ||
| [`scripts/github-mcp-headers.sh`](scripts/github-mcp-headers.sh) reads a GitHub token from a | ||
| `github-token` file you create in the plugin's data directory, or else from your GitHub CLI | ||
| login. It hands the token to Claude Code, which sends it only to GitHub's MCP server as the | ||
| `Authorization` header of the bundled `github` and `github-ghas-tools` servers. The script stores | ||
| the token nowhere and never writes it to an error message or a log. | ||
| - **Cluster servers.** [`scripts/flux-operator-mcp.sh`](scripts/flux-operator-mcp.sh) and | ||
| [`scripts/kubescape-mcp.sh`](scripts/kubescape-mcp.sh) start the Flux and Kubescape servers against | ||
| the clusters in your kubeconfig. They talk to your clusters, and Kubescape also downloads its | ||
| released policy bundle from GitHub each time it starts. Kubescape's scans would also send a | ||
| version check to Kubescape's update service, carrying a cluster ID, the node count, the | ||
| frameworks scanned and the client version. The launcher turns that check off by setting | ||
| `KS_SKIP_UPDATE_CHECK=true`, unless you set that variable yourself. | ||
| - **Coroot (Claude Code only).** `coroot` connects to your own Coroot instance at the address in | ||
| `COROOT_URL`. [`scripts/coroot-mcp-headers.sh`](scripts/coroot-mcp-headers.sh) reads that | ||
| instance's address from `coroot-url` and a service-account API key from `coroot-api-key`, both | ||
| files you create in the plugin's data directory. It hands the key to Claude Code as a bearer | ||
| token only when Claude Code is connecting to that pinned address followed by `/mcp`. What the | ||
| agents ask Coroot, and what it answers, stays between your tool and your Coroot. | ||
| - **Terraform Registry server.** `terraform-registry` runs locally and looks providers and modules | ||
| up in HashiCorp's public Terraform Registry. | ||
|
|
||
| ## Hosted servers | ||
|
|
||
| Every other bundled server is hosted by a third party. When an agent calls one of its tools, the | ||
| request goes to that service, together with what the agent passes it: a search, a repository or | ||
| package name, a version, or code. Each service handles it under its own privacy policy. | ||
|
|
||
| | Server | Operated by | | ||
| |---|---| | ||
| | `aws-knowledge` | Amazon Web Services | | ||
| | `cloudflare-docs` | Cloudflare | | ||
| | `context7` | Upstash | | ||
| | `github`, `github-ghas-tools` | GitHub | | ||
| | `siderolabs-docs` | Sidero Labs | | ||
| | `stripe` | Stripe, once you sign in to it | | ||
| | `svelte` | The Svelte maintainers | | ||
|
|
||
| In Codex, the plugin also offers optional app connectors for iCloud Mail, iCloud Calendar, | ||
| LinkedIn and Codex Security. None connects unless you choose it. Each then works under its | ||
| operator's terms. | ||
|
|
||
| ## Your choices | ||
|
|
||
| - Disable any server in your tool's MCP settings to stop it contacting its service. Denying single | ||
| tools does not stop the connection. | ||
| - The only files the plugin reads that you create are the optional `github-token`, `coroot-url` | ||
|
devantler marked this conversation as resolved.
Resolved
|
||
| and `coroot-api-key` in its data directory. Delete them at any time. Claude Code removes that | ||
| directory when you uninstall the plugin from the last place it is installed, unless you pass | ||
| `--keep-data`. | ||
| - Uninstalling the plugin stops all of the above. | ||
|
|
||
| ## Changes and contact | ||
|
|
||
| Changes to this policy ship with the plugin and are listed in [`CHANGELOG.md`](CHANGELOG.md). | ||
| Ask questions in the repository's | ||
| [issues](https://github.com/devantler-tech/agent-plugins/issues). Report a privacy or security | ||
| problem privately through the repository's | ||
| [security advisories](https://github.com/devantler-tech/agent-plugins/security/advisories/new). | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| #!/bin/sh | ||
| # Start the bundled `flux-operator-mcp` server read-only. ../.mcp.json runs this file with `sh` as | ||
| # the server's command, and ../.codex-plugin/mcp.json runs it by its plugin-relative path, so a | ||
| # plugin directory's validator can read exactly what the plugin starts instead of an inline `sh -c` | ||
| # program it cannot follow. | ||
| # | ||
| # flux-operator-mcp refuses to start unless the KUBECONFIG environment variable is set. This sets | ||
| # it to $HOME/.kube/config when the environment leaves it unset or empty, and passes any | ||
| # non-empty value through unchanged. `--read-only` keeps the server from applying, deleting, | ||
| # reconciling, suspending or resuming anything. | ||
| # | ||
| # The server speaks MCP over stdin and stdout, so this script writes nothing to stdout itself and | ||
| # replaces itself with the server. It is POSIX sh, run by `sh`, which reads no BASH_ENV file that | ||
| # could print onto that stream first. | ||
| # | ||
| # Usage: flux-operator-mcp.sh (no arguments) | ||
| # Exit codes: the server's own; 1 neither KUBECONFIG nor HOME is set; 2 usage error; 127 the | ||
| # flux-operator-mcp binary is not on PATH. | ||
| set -eu | ||
|
|
||
| if [ $# -gt 0 ]; then | ||
| echo 'usage: flux-operator-mcp.sh' >&2 | ||
| exit 2 | ||
| fi | ||
|
|
||
| if [ -z "${KUBECONFIG:-}" ]; then | ||
| if [ -z "${HOME:-}" ]; then | ||
| echo 'flux-operator-mcp: set KUBECONFIG or HOME' >&2 | ||
| exit 1 | ||
| fi | ||
| KUBECONFIG="$HOME/.kube/config" | ||
| fi | ||
| export KUBECONFIG | ||
|
|
||
| exec flux-operator-mcp serve --read-only |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.