Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Remote MCP for RunComfy: ComfyUI deployments, hosted models, LoRA training. 31 tools.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
Authorization标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
在终端中运行这条命令
claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp --header 'Authorization: your-value'运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"runcomfy": {
"url": "https://mcp.runcomfy.com/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"runcomfy": {
"type": "http",
"url": "https://mcp.runcomfy.com/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
你的选择通过 Cookie 保存在这台设备上,无需账户。
Authorization 机密 必填 HTTP header这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 runcomfy-com 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:Authorization
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.1.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Claude Checkpoint MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ 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.
MCP server that checkpoints Claude Code session context to survive crashes and token limits
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
MCP server for the RunComfy platform — Serverless API (ComfyUI), Model API, and Trainer API. Manage deployments, run hosted models, train LoRAs, and retrieve results from AI assistants like Claude, Cursor, and Windsurf.
Endpoint: https://mcp.runcomfy.com/mcp
Docs: docs.runcomfy.com/mcp
31 tools mirroring the RunComfy docs 1:1, across three products plus your account balance.
Docs: docs.runcomfy.com/serverless
| Category | Tools |
|---|---|
| Deployment management | list_deployments, get_deployment, create_deployment, update_deployment, delete_deployment |
| Inference | submit_request, get_request_status, get_request_result, cancel_request |
| Advanced | call_instance_proxy |
Docs: docs.runcomfy.com/model-apis
| Category | Tools |
|---|---|
| Catalog | list_models, get_model, list_model_categories |
| Inference | run_model, get_model_request_status, get_model_request_result, cancel_model_request |
No deployment to manage and per-request billing. list_models browses the catalog by keyword or capability (category=image-to-video), get_model returns one model's input schema — property types, defaults, enums, and ranges — and run_model runs it. So an assistant can go from "make me a video" to a valid request without leaving the tools or guessing a parameter.
Entries also carry description, base_price_usd per price_unit, and a model_url to the model's page.
model_id is the identifier shown on the model's page at runcomfy.com/models, slashes included — e.g. blackforestlabs/flux-1-kontext/pro/edit. File inputs must be public HTTPS URLs.
Docs: docs.runcomfy.com/trainer-apis
| Category | Tools |
|---|---|
| Datasets | create_dataset, list_datasets, get_dataset_status, delete_dataset |
| Dataset uploads | upload_dataset_file_from_url, upload_dataset_text_file, get_dataset_upload_urls |
| Training jobs | submit_training_job, get_training_job_status, get_training_job_result, cancel_training_job, resume_training_job, edit_training_job |
Typical flow: create a dataset → upload media and matching .txt captions → poll until READY → submit a job with an AI Toolkit YAML config → poll status → pull checkpoints from the result.
Because the server runs remotely it cannot read local files. Upload media it can reach over HTTP with upload_dataset_file_from_url, write captions inline with upload_dataset_text_file, and for local or >150 MB files use get_dataset_upload_urls and PUT the bytes to the signed URL yourself.
| Category | Tools |
|---|---|
| Balance | get_balance |
One wallet funds all three products. get_balance reports what is left, in balance_usd for reading and balance_microdollars (millionths of a dollar) for exact threshold checks. It is served from api.runcomfy.net rather than mirrored per product, because there is only one figure to report.
A trained LoRA runs without any deployment: pass its base model's model_id to run_model and the LoRA as an input, e.g. {"lora": {"path": "my_first_lora_3000.safetensors"}} — either a name from your LoRA Assets or a public URL such as a checkpoint from get_training_job_result. For a dedicated endpoint with chosen hardware, deploy it and use the Serverless tools instead.
Every client authenticates with a RunComfy API token from your Profile page. Two ways to supply it:
Token header (one command, nothing else to do):
claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp --header "Authorization: Bearer YOUR_RUNCOMFY_TOKEN"
Or browser OAuth — omit the header, then run /mcp inside Claude Code and pick Authenticate:
claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp
--transport http is the Streamable HTTP transport. streamable-http is not a value Claude Code accepts, and single-dash -transport / -header are not either — both forms fail before the server is ever contacted.
Check it with claude mcp list, which should show runcomfy: connected.
Add https://mcp.runcomfy.com/mcp in Settings → Connectors → Add custom connector, then select Connect. Claude discovers RunComfy's OAuth 2.1 endpoints, opens a RunComfy consent page, and asks for one of the API tokens shown in your RunComfy Profile. The token is validated by RunComfy and encrypted inside the MCP authorization grant; it is never returned to Claude.
.cursor/mcp.json:
{
"mcpServers": { "runcomfy": { "url": "https://mcp.runcomfy.com/mcp", "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" } } } }
.vscode/mcp.json:
{
"servers": { "runcomfy": { "type": "http", "url": "https://mcp.runcomfy.com/mcp", "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" } } } }
Settings → MCP:
{
"mcpServers": { "runcomfy": { "serverUrl": "https://mcp.runcomfy.com/mcp", "headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" } } } }
https://mcp.runcomfy.com/mcpAuthorization: Bearer on every request, or OAuth 2.1 with a loopback redirect URI or an exact supported client callback| Symptom | Cause |
|---|---|
401 with RunComfy rejected this API token | The token is wrong, expired, or truncated on copy. Generate a new one in Profile — the response body names the fix. |
401 with no error_description | No Authorization header reached the server. Check the header is quoted as one argument: --header "Authorization: Bearer ...". |
invalid_client_metadata during OAuth | The client registered a callback outside the loopback and exact client allowlist. Use a supported callback or the token header. |
invalid_target during OAuth | The configured URL must be exactly https://mcp.runcomfy.com/mcp — no trailing slash. RFC 8707 binds the token to that exact resource. |
503 with Retry-After | RunComfy's API could not be reached to verify the token. Retry. |
429 | More than 600 token-authenticated requests a minute from one IP. |
Revoke access by regenerating the token in your RunComfy Profile. That invalidates the token header and any OAuth grant built on it, because every MCP request revalidates the token upstream.
MCP Client ──RunComfy API token──┐
│ Cloudflare Worker (/mcp) MCP Client ──MCP OAuth token─────┤ validates the credential, resolves │ it to one user's RunComfy token ▼ Cloudflare Container (Python FastMCP app) │ request-scoped RunComfy credential ┌───────────────┼───────────────┐ ▼ ▼ ▼ api.runcomfy.net model-api. trainer-api. (Serverless) runcomfy.net runcomfy.net (Model) (Trainer)
One RunComfy token authenticates all three products, so the same credential resolution covers every tool.
Both credential kinds converge on the same request-scoped identity header before the container is reached. They are told apart by shape: OAuth access tokens are always userId:grantId:secret, and a RunComfy API token never contains a colon.
src/index.ts) — OAuth 2.1 authorization server and protected-resource boundary. Missing, invalid, expired, or wrong-audience credentials are rejected before MCP initialization or tool discovery.src/index.ts) — a RunComfy Profile token presented as Authorization: Bearer is revalidated against api.runcomfy.net on every request, rate-limited per source IP, and never forwarded as-is.src/oauth-bridge.ts) — validates an existing RunComfy Profile token, stores it only in encrypted OAuth grant data, and issues a separate audience-bound MCP access token. Dynamic client registration accepts loopback callbacks (Claude Code and other local clients), an exact allowlist of hosted client callbacks, and Cursor's exact legacy app callback. Cursor registers cursor://anysphere.cursor-mcp/oauth/callback, https://www.cursor.com/agents/mcp/oauth/callback, and http://localhost:8787/callback together; all three must be accepted even when the active redirect uses localhost. Arbitrary custom protocols and callback variants remain rejected, and S256 PKCE is required.server.py) — FastMCP app with 31 tools across the Serverless, Model, and Trainer APIs. It has no shared/operator credential and fails closed unless the authenticated edge supplies the current user's request-scoped RunComfy token..github/workflows/deploy.yml CI: typecheck, test, deploy to Cloudflare
src/index.ts Cloudflare Worker entrypoint src/oauth-bridge.ts OAuth consent and RunComfy token validation server.py MCP tool definitions (31 tools) runcomfy_client.py RunComfy API clients (serverless, model, trainer) container_app.py ASGI middleware (request IDs, token forwarding) container_entrypoint.py Uvicorn startup container_runtime.py Env validation, structured logging wrangler.jsonc Cloudflare Worker + Container config Dockerfile Container image .env.example Local dev config
# Python 3.11+
python3.11 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env python -m container_entrypoint
Local endpoints:
http://127.0.0.1:8000/healthzhttp://127.0.0.1:8000/mcpThe local Python endpoint intentionally has no shared fallback credential. Protected tool calls must go through the authenticated Worker boundary.
Pushing to main deploys automatically via .github/workflows/deploy.yml: typecheck, Worker tests, and container tests must pass, then wrangler deploy --containers-rollout immediate ships the Worker and the Python container together. Pull requests run the same checks without deploying. The workflow can also be run by hand from the Actions tab.
One repository secret is required:
| Secret | Purpose |
|---|---|
CLOUDFLARE_API_TOKEN | A token with Edit Cloudflare Workers permission on the account in wrangler.jsonc |
CLOUDFLARE_ACCOUNT_ID | Optional. account_id is already committed in wrangler.jsonc; set this only to deploy under a different account. |
To deploy by hand (requires C
只显示了开头部分;其余内容请在仓库中阅读