Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Read-only access to a Crossplane control plane: resources, claims, packages, compositions.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"crossplane": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/ravibagri5/crossplane-mcp-server:0.1.5"
]
}
}
}在终端中运行这条命令
claude mcp add crossplane -- docker run -i --rm ghcr.io/ravibagri5/crossplane-mcp-server:0.1.5粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"crossplane": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/ravibagri5/crossplane-mcp-server:0.1.5"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"crossplane": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/ravibagri5/crossplane-mcp-server:0.1.5"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 ravibagri5 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.5)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Docker。
同一分类中有:Spec Driven Development, Remote Desktop Commander, SolveHub
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
CAPTCHA and anti-bot solving for Turnstile, DataDome, Akamai, PerimeterX and Imperva.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A Model Context Protocol server that lets AI assistants understand a Crossplane control plane.
Ask your assistant *"how many managed resources do I have and is anything broken?"* and it will answer from your actual control plane, with the reason for every failure, instead of guessing.
> Why is the app-db claim not ready?
crossplane_diagnose(kind="PostgreSQLInstance", name="app-db")
PostgreSQLInstance app-db is NOT READY.
Verdict: Instance/app-db-rds is the deepest failure: InvalidParameterValue: the instance class db.t2.mega does not exist
Root causes (deepest failing resources): KIND NAME READY SYNCED REASON DETAIL Instance app-db-rds False False ApplyFailure InvalidParameterValue...
Control plane checks: CHECK STATE DETAIL composition OK Composition "postgres-aws" exists. providers OK all 3 provider(s) are Installed and Healthy
Fix the instanceClass field in your Composition and the claim will reconcile.
The server is read-only by default: the tools that create and update are not registered at all unless you start it with --read-only=false, so a client cannot see them, let alone call them. Nothing deletes in either mode. Turn writes on and the same assistant can provision from your platform APIs:
> Create a small Postgres database called orders-db.
crossplane_database_create(name="orders-db", engine="postgresql", size="small")
Created PostgreSQLInstance default/orders-db on kind-crossplane.
apiVersion: demo.crossplane.io/v1alpha1 kind: PostgreSQLInstance metadata: name: orders-db namespace: default spec: parameters: engine: postgresql size: small version: "16"
Next: provisioning is asynchronous. Call crossplane_resource_tree with {"kind":"PostgreSQLInstance","name":"orders-db"} to watch it come up.
Nothing there names a Kubernetes kind. The tool found the platform API this control plane offers, read the schema its XRD declares and filled it in. See examples/demo for a control plane you can try it on without a cloud account.
A general purpose Kubernetes MCP server can already reach every object on a Crossplane control plane: Crossplane resources are Kubernetes resources, and a generic resources_list with an apiVersion and a kind will happily return your XRDs. Access was never the problem.
The problem is that it does not know what any of it means, and it will happily delete it.
| Generic Kubernetes MCP | This server | |
|---|---|---|
| Reach Crossplane CRDs | Yes | Yes |
| Follow a claim to the infrastructure it created | No. It returns objects; the model has to guess which field to follow at each hop | crossplane_resource_tree walks resourceRefs for you |
| Say which resource is actually at fault | No | crossplane_diagnose finds the deepest failure, not the symptom at the top |
| Notice infrastructure changed outside Crossplane | No. It can return spec and status but has no idea they are meant to match | crossplane_drift_detect diffs desired against observed |
| Explain why a delete is hanging | No | crossplane_deleting_resources names the Usage, finalizer or provider holding it |
| Say what a delete would destroy first | No | crossplane_impact reports the blast radius before you act |
| Simulate a change without touching the cluster | No | crossplane_composition_render runs the function pipeline offline |
| Write to your cluster | Yes, always: create, update, delete, exec | Only if you ask. Off by default, never deletes, limited to Crossplane kinds, and it provisions through your platform APIs rather than writing managed resources by hand |
That last row matters more here than it does for ordinary Kubernetes work. On a Crossplane control plane a deleted object is not a pod that a ReplicaSet will recreate, it is a production database. Point this server at production and it cannot mutate anything; point it at a development control plane with --read-only=false and it still cannot delete a resource, and cannot touch a Secret, a Deployment or an RBAC rule at all.
Underneath, the Crossplane knowledge this server encodes is:
managed, composite, claim), so it works with every provider without being taught about any of them.Ready/Synced on resources and Installed/Healthy on packages, and explains the difference to the model.resourceRefs to build the composition tree, the same view as crossplane beta trace.Observe-only resource is never corrected, which is the difference between a warning and a non-event.spec.crossplane reference location.go install github.com/ravibagri5/crossplane-mcp-server/cmd/crossplane-mcp-server@latest
crossplane-mcp-server tools
crossplane-mcp-server call crossplane_status
Then add it to your MCP client (see Client configuration) and ask it about your control plane.
go install. The pre-built binaries and the container image have no such requirement.crossplane_composition_render. Rendering executes the composition function pipeline, which cannot be done through the Kubernetes API. Every other tool needs nothing beyond API access, and crossplane_composition_validate covers most of the same ground without a container runtime.go install github.com/ravibagri5/crossplane-mcp-server/cmd/crossplane-mcp-server@latest
docker run --rm -i \
-v "${HOME}/.kube:/home/nonroot/.kube:ro" \ ghcr.io/ravibagri5/crossplane-mcp-server:latest
Pre-built binaries for Linux, macOS and Windows are attached to every release. These are the easiest option if you do not have a recent Go toolchain.
git clone https://github.com/ravibagri5/crossplane-mcp-server.git
cd crossplane-mcp-server make build ./bin/crossplane-mcp-server tools
This server is listed in:
io.github.ravibagri5/crossplane-mcp-server, which is where MCP clients look it up.{
"mcpServers": { "crossplane": { "command": "crossplane-mcp-server", "args": ["--clusters", "staging,production", "--context", "staging"], "env": { "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin", "HOME": "/Users/you" } } } }
PATH and HOME matter whenever a kubeconfig context authenticates through an exec plugin such as kubelogin or aws. Desktop applications launch servers with a near-empty environment, so without them the plugin is either not found or cannot read its token cache.
In ~/.config/goose/config.yaml:
extensions:
crossplane: enabled: true type: stdio cmd: /path/to/crossplane-mcp-server args: ["--clusters", "staging,production", "--context", "staging"] envs: PATH: /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin HOME: /Users/you timeout: 300
Add --read-only=false to args to let goose provision as well as inspect. examples/demo walks through that end to end on a throwaway cluster.
Add to .vscode/mcp.json in your workspace:
{
"servers": { "crossplane": { "type": "stdio", "command": "crossplane-mcp-server", "args": ["--clusters", "staging,production"] } } }
{
"mcpServers": { "crossplane": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "${HOME}/.kube:/home/nonroot/.kube:ro", "ghcr.io/ravibagri5/crossplane-mcp-server:latest" ] } } }
Run crossplane-mcp-server tools to print this list from your build.
resourcesManaged resources, composite resources and claims.
| Tool | What it answers |
|---|---|
crossplane_managed_resources_summary | How many managed resources exist, by kind, and how many are Ready and Synced |
crossplane_managed_resources_list | Which managed resources exist, optionally only the failing ones |
crossplane_composite_resources_list | Which composite resources (XRs) exist and which Composition each selected |
crossplane_claims_list | Which claims exist and which composite each is bound to |
crossplane_resource_get | Everything about one resource: conditions, external name, events, manifest |
crossplane_resource_tree | The composition tree below a claim or composite, with per-resource status |
crossplane_resource_events | The events Crossplane recorded against one resource |
crossplane_diagnose | Why a resource is not Ready, and which resource is actually at fault |
| crossplane_drift_detect | Which infrastructure no longer matches its declared spec, and whet
只显示了开头部分;其余内容请在仓库中阅读